Apache no se inicia, la dirección ya está en uso (pero no realmente)

58

Estoy tratando de configurar una VM que ejecute Ubuntu 12.04. Tengo dos hosts virtuales configurados usando el puerto 80, pero Apache no se iniciará.

Me sale este error:
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80

La salida de netstat -tulpnmuestra que nada está usando el puerto 80. ¿Qué podría estar causando esto?

Artillero Barnes
fuente
¿Lo estás iniciando como root? Por defecto, solo root puede abrir puertos por debajo de 1024.
onse
Sí lo soy. Se estaba ejecutando en un momento en que solo tenía un host virtual configurado, por lo que desde entonces eliminé el otro host virtual para tratar de solucionar el problema, pero tampoco tuve suerte con eso.
Artillero Barnes
¿Tiene el host algo ejecutándose en el puerto 80 y está en modo puente para el invitado? No sé si haría eso, pero parece probable
RobotHumans
¿Has probado las sugerencias de Error al iniciar apache (no se pudo vincular a la dirección 0.0.0.0:80) ? Y por favor incluya también la salida de grep -ri listen /etc/apachey sudo netstat -ntlp | grep 80.
gertvdijk
2
grep -ri listen /etc/apache2salidas: etc / apache2 / httpd.conf: Listen 80 /etc/apache2/httpd.conf: Listen 443 /etc/apache2/ports.conf: Listen 80 /etc/apache2/httpd.conf: Listen 443 / etc / apache2 / httpd.conf: Listen 443 sudo netstat -ntlp | grep 80no genera nada en absoluto.
Artillero Barnes

Respuestas:

38

Asegúrese de no declarar Listen 80dos veces en archivos .conf.

Por ejemplo, puede tenerlo tanto en la ports.confposada como en la posada sites-enabled/www.conf.

Para averiguarlo, use: grep -ri listen /etc/apache2

Mantener Listen 80en un solo lugar.

ravi
fuente
19

Respondiendo la forma en que resolví este problema. Puede ser útil para alguien en el futuro.

Tratar netstat -ltnp | grep :80

Esto devolvería algo como

tcp6 0 0 ::: 80 ::: * ESCUCHE 1047 / apache2

Entonces corre

sudo kill -9 1047

Donde 1047 es el pid del programa que se ejecuta en el puerto 80. Puede reemplazar el pid que obtuvo de netstat

Ornitorrinco anónimo
fuente
wow! ... y aquí estoy 48 horas después de enviar un boleto a inmotionhosting y esperando una respuesta. gracias
Amjo
2
¿Qué significa esto? No obtengo un PID o nombre. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
Aaron Franke
@AaronFranke ¿Puede intentar ejecutar este comando en la Terminal después de maximizar la ventana?
Ornitorrinco anónimo
2
@AaronFranke ejecútalo con sudo. Es posible que no tenga los permisos para ver.
Avance S
13

Cuando tuve este problema, resultó que mi Apache no podía iniciarse en el arranque porque tenía un sitio SSL que requería que se ingresara una contraseña para el certificado.

Una buena manera de saber si este es el caso para usted es ejecutar un ps -ef | grep apache: si esto devuelve procesos que parecen, /bin/bash /usr/share/apache2/ask-for-passphrase mysite.com:443 RSAentonces está esperando que se ingrese una contraseña en un terminal que nunca verá.

Primero, eliminé el proceso bloqueado (el envío de un kill -HUPID de proceso para / usr / sbin / apache2 debería ser suficiente para eliminar los otros, pero haga otro ps -ef | grep apachepara estar seguro).

Luego seguí las instrucciones en esta publicación para crear un archivo de contraseña SSL que no requería que se ingresara una contraseña. Luego service apache2 startfuncionó bien, y Apache comenzó correctamente después de un reinicio.

Brendan Quinn
fuente
11

Recibí este error en una instalación nueva al iniciar apache2 Ubuntu 12.10.

Es un error en el apache2. Se cuelga en el fondo. Aquí está mi tutorial sobre dónde podrían estar los errores en el software.

Aquí está el error que recibí:

el@titan:~$ sudo service apache2 start
 * Starting web server apache2               
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
                                                                         [fail]

¿Dirección ya en uso? ¿Qué podría estar usándolo? Echale un vistazo:

el@titan:~$ grep -ri listen /etc/apache2
/etc/apache2/apache2.conf:#   supposed to determine listening ports for incoming connections, and which
/etc/apache2/apache2.conf:# Include list of ports to listen on and which to use for name based vhosts
/etc/apache2/ports.conf:Listen 80
/etc/apache2/ports.conf:    Listen 443
/etc/apache2/ports.conf:    Listen 443

Eso significa que apache2 impide que apache2 se inicie. Extraño. Esto confirmará:

el@titan:~$ ps -ef | grep apache2
root      1146   954  0 15:51 ?        00:00:00 /bin/sh /etc/rc2.d/S91apache2 start
root      1172  1146  0 15:51 ?        00:00:00 /bin/sh /usr/sbin/apache2ctl start
root      1181  1172  0 15:51 ?        00:00:00 /usr/sbin/apache2 -k start
root      1193  1181  0 15:51 ?        00:00:00 /bin/bash /usr/share/apache2/ask-for-passphrase 127.0.1.1:443 RSA
el        5439  5326  0 16:23 pts/2    00:00:00 grep --color=auto apache2

Sí, en este caso apache2 se está ejecutando, estaba intentando iniciar apache2 por segunda vez en el mismo puerto.

Lo que me confunde es que serviceinforma que apache2 NO se está ejecutando:

el@titan:~$ sudo service apache2 status
Apache2 is NOT running.

Y cuando consulta apache2ctl por su estado, se cuelga.

root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.

Entonces Ubuntu parece tener problemas para administrar apache2 en el arranque. Hora de parar apache2:

root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running

Una gran pista! Intenta detener apache2 y perdió la identificación del proceso. ¡Entonces Ubuntu no puede detener apache2 porque no sabe dónde está!

Se podría pensar que un reinicio lo solucionaría, pero no lo hace porque apache2 se inicia en el inicio y se cuelga. El proceso de arranque normal para apache2 no funciona correctamente.

Entonces, ¿cómo solucionarlo?

Pude solucionar esto analizando la pssalida del comando. Observe que el pscomando nos dice que ese proceso fue iniciado por "/etc/rc2.d/S91apache2 start".

Ese es el programa ofensivo que necesita una patada rápida.

/etc/rc2.d/S91apache2es el enlace simbólico utilizado para iniciar apache2 cuando se inicia la computadora. Por alguna razón, parece estar iniciando apache2 y luego se cuelga. Entonces tendremos que decirle que no haga eso.

Así que ve a ver eso /etc/rc2.d/S91apache2.

el@titan:/etc/rc2.d$ ls -l
lrwxrwxrwx   1 root root    17 Nov  7 21:45 S91apache2 -> ../init.d/apache2*

Es un enlace simbólico que no queremos que esté allí. Haga esto para evitar que apache2 se inicie en el arranque:

root@titan:~# sudo update-rc.d -f apache2 remove
 Removing any system startup links for /etc/init.d/apache2 ...
   /etc/rc0.d/K09apache2
   /etc/rc1.d/K09apache2
   /etc/rc2.d/S91apache2
   /etc/rc3.d/S91apache2
   /etc/rc4.d/S91apache2
   /etc/rc5.d/S91apache2
   /etc/rc6.d/K09apache2

Reinicie la computadora para asegurarse de que apache2 no se inicie y se cuelgue. Bien. Ahora PODRÍAS volver a poner apache2 como estaba, pero eso haría que volviera a fallar.

root@titan:~$ sudo update-rc.d apache2 defaults     //(don't do this)
 Adding system startup for /etc/init.d/apache2 ...
   /etc/rc0.d/K20apache2 -> ../init.d/apache2
   /etc/rc1.d/K20apache2 -> ../init.d/apache2
   /etc/rc6.d/K20apache2 -> ../init.d/apache2
   /etc/rc2.d/S20apache2 -> ../init.d/apache2
   /etc/rc3.d/S20apache2 -> ../init.d/apache2
   /etc/rc4.d/S20apache2 -> ../init.d/apache2
   /etc/rc5.d/S20apache2 -> ../init.d/apache2

En su lugar, inicie el apache2 así:

sudo service apache2 start

Y el apache2 está respaldado y sirve páginas nuevamente. Parece que hay algunos errores graves con apache2 / Ubuntu 12.10 que hacen que apache2 se inicie y se cuelgue. Esta es una solución alternativa, supongo que la solución es obtener versiones más recientes de apache2 y Ubuntu y esperar lo mejor.

Eric Leschinski
fuente
¡Disfruté leyendo y usando tus consejos! ¡Gracias por escribir 'la forma en que lo depuró'!
Ram
10

Tenía un servidor Nginx escuchando en mi servidor AWS EC2, creo que se configuró cuando estaba compilando el EC2, por lo tanto, estaba recibiendo un error de Dirección ya en uso. Así que detuve el servicio y comencé el servicio Apache2:

sudo service nginx stop
sudo service apache2 start
Gandul
fuente
¡Gracias una tonelada! Después de todos los intentos, esto funcionó para mí.
Vivek
4

Lo he resuelto. Tenía comandos duplicados de Listen 80 tanto en mi httpd.conf como en ports.conf

Además, al copiar el archivo de configuración para ese servidor que se está virtualizando, no noté que el directorio de registro de errores había cambiado. Al mirar ese registro de errores, noté que el directorio para el mime.typesarchivo de configuración era incorrecto en mi httpd.confarchivo. Actualicé ese parámetro y el servidor comenzó bien.

Artillero Barnes
fuente
3
También tenía Listen 80comandos duplicados en mi httpd.confyports.conf
Gunner Barnes
2

Esto significa que su puerto 80 ya está en uso, o bien cambie el puerto para apache2 (que no recomiendo) editando:

/etc/apache2/ports.conf

O cierre la aplicación que se ejecuta en el puerto 80:

netstat -antp | grep 80

Para encontrar lo que se está ejecutando en el puerto 80.

Dylan Dodds
fuente
netstat -antp | grep 80no produce nada también.
Artillero Barnes
puedes copiar y pegar tu salida de netstat -antp | grep 80?
Dylan Dodds
Literalmente no hay salida.
Artillero Barnes
hmm eso es extraño, trate de cambiar el puerto a 81, si no que no es el puerto que está bloqueado hay otro error puede comprobar errores en apache2 /var/log/apache2/error.log
Dylan Dodds
2

Solo una pista para cualquiera que quizás esté ejecutando VirtualBox con redes NAT. Descubrí que tener una regla NAT entre mi invitado y el host se había configurado, vinculando el puerto

mschr
fuente
2

No solo menciones duplicadas de

Listen 80

pero también menciono esto además de Listen 80

Include ports.conf
Scott Stensland
fuente