Apache ne parvient pas à démarrer, adresse déjà utilisée (mais pas vraiment)

58

J'essaie de configurer une machine virtuelle sous Ubuntu 12.04. J'ai deux hôtes virtuels configurés à l'aide du port 80, mais Apache ne démarre pas.

Je reçois cette erreur:
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80

La sortie de netstat -tulpnmontre que rien n'utilise le port 80. Quelle pourrait en être la cause?

Gunner Barnes
la source
est-ce que vous le démarrez en tant que root? Par défaut , seul root peut ouvrir les ports ci - dessous 1024.
onse
Oui. Il fonctionnait à un moment où je n'avais configuré qu'un seul hôte virtuel. J'ai donc depuis supprimé l'autre hôte virtuel pour tenter de résoudre le problème, mais je n'ai pas eu de chance avec cela non plus.
Gunner Barnes le
Votre hôte a-t-il quelque chose qui tourne sur le port 80 et que vous êtes en mode ponté pour l'invité? Je ne sais pas si cela ferait ça, mais cela semble probable
RobotHumans
Avez-vous essayé les suggestions de Démarrer Apache échoue (impossible de se connecter à l'adresse 0.0.0.0:80) ? Et s'il vous plaît inclure également la sortie de grep -ri listen /etc/apacheet sudo netstat -ntlp | grep 80.
gertvdijk
2
grep -ri listen /etc/apache2sorties: 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 80ne génère rien du tout.
Gunner Barnes le

Réponses:

38

Assurez-vous de ne pas déclarer Listen 80deux fois dans les fichiers .conf.

Par exemple, vous pourriez l'avoir à la fois dans ports.confet auberge sites-enabled/www.conf.

Pour le savoir, utilisez: grep -ri listen /etc/apache2

Gardez Listen 80dans un seul endroit.

ravi
la source
19

Répondre à la façon dont j'ai résolu ce problème. Peut être utile à quelqu'un à l'avenir.

Essayer netstat -ltnp | grep :80

Cela rendrait quelque chose comme

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

Puis courir

sudo kill -9 1047

Où 1047 est le pid du programme exécuté sur le port 80.Vous pouvez remplacer le pid que vous avez obtenu de netstat

Ornithorynque anonyme
la source
wow! ... et me voilà 48 heures après avoir envoyé un ticket à inmotionhosting et attendu une réponse. merci
Amjo
2
Qu'est-ce que ça veut dire? Je ne reçois pas de PID ni de nom. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
Aaron Franke
@ AaronFranke Pouvez-vous s'il vous plaît essayer d'exécuter cette commande dans Terminal après avoir maximisé la fenêtre?
Anonyme Ornithorynque
2
@AaronFranke le lance avec sudo. Vous pourriez ne pas avoir les autorisations pour afficher.
Advait S
13

Lorsque j'ai eu ce problème, il s'est avéré que mon Apache ne pouvait pas démarrer au démarrage car mon site SSL nécessitait la saisie d'un mot de passe pour le certificat.

Un bon moyen de savoir si tel est le cas pour vous est d’exécuter a ps -ef | grep apache: si cela renvoie des processus qui ressemblent, /bin/bash /usr/share/apache2/ask-for-passphrase mysite.com:443 RSAil attend alors la saisie d’un mot de passe dans un terminal que vous ne verrez jamais.

Tout d’abord, j’ai tué le processus bloqué (envoyer un kill -HUPà l’ID du processus / usr / sbin / apache2 devrait suffire à tuer les autres, mais faites-en un autre ps -ef | grep apachepour en être sûr).

Ensuite, j'ai suivi les instructions de cet article pour créer un fichier de mot de passe SSL ne nécessitant pas la saisie d'un mot de passe. Ensuite, cela a service apache2 startfonctionné correctement et Apache a démarré correctement après un redémarrage.

Brendan Quinn
la source
11

J'ai eu cette erreur lors d'une nouvelle installation au démarrage d'apache2 Ubuntu 12.10.

C'est un bug dans le apache2. Il est accroché à l'arrière-plan. Voici ma procédure pas à pas où les bugs pourraient être dans le logiciel.

Voici l'erreur que j'ai eu:

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]

Adresse déjà utilisée? Que pourrait-il utiliser? Vérifiez-le:

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

Cela signifie qu'apache2 empêche apache2 de démarrer. Bizarre. Cela confirmera:

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

Oui, dans ce cas, apache2 est en cours d'exécution, j'essayais de démarrer apache2 une deuxième fois sur le même port.

Ce qui me perturbe, c'est que servicerapporte qu'apache2 n'est PAS en cours d'exécution:

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

Et lorsque vous interrogez apache2ctl sur son statut, il se bloque.

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

Ubuntu semble donc avoir du mal à gérer Apache2 au démarrage. Il est temps d'arrêter apache2:

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

Un gros indice! Vous essayez d'arrêter apache2 et il a perdu l'identifiant du processus! Ubuntu ne peut donc pas arrêter Apache2 car il ne sait pas où il se trouve!

Vous pourriez penser qu'un redémarrage résoudrait le problème, mais ce n'est pas le cas, car apache2 démarre au démarrage et se bloque. Le processus de démarrage normal d’apache2 ne fonctionne pas correctement.

Alors, comment y remédier?

J'ai pu résoudre ce problème en analysant le psrésultat de la commande. Notez que la pscommande nous indique que ce processus a été lancé par "/etc/rc2.d/S91apache2 start".

C’est le programme fautif qui a besoin d’un coup d’œil rapide.

/etc/rc2.d/S91apache2est le lien symbolique utilisé pour démarrer apache2 lorsque l'ordinateur démarre. Pour une raison quelconque, il semble commencer apache2, puis se bloque. Nous devrons donc lui dire de ne pas le faire.

Alors allez voir ça /etc/rc2.d/S91apache2.

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

C'est un lien symbolique que nous ne voulons pas qu'il soit là. Faites ceci pour empêcher le démarrage d’apache2 au démarrage:

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

Redémarrez l'ordinateur pour vous assurer qu'apache2 ne démarre pas et ne se bloque pas. OK bien. Maintenant, vous POUVEZ remettre Apache2 en place, mais cela le ferait échouer à nouveau.

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

Au lieu de cela, démarrez apache2 comme ceci:

sudo service apache2 start

Et Apache2 est de nouveau en service et sauvegarde des pages. Il semble y avoir de sérieux bugs avec apache2 / Ubuntu 12.10 qui font que apache2 démarre et se bloque. C’est une solution de contournement. Je suppose que le correctif consiste à obtenir les nouvelles versions d’apache2 et d’Ubuntu et à espérer que tout ira pour le mieux.

Eric Leschinski
la source
J'ai bien aimé lire et utiliser vos astuces! Merci d'avoir écrit "la façon dont vous l'avez débogué"!
Ram
10

J'avais un serveur Nginx à l'écoute sur mon serveur AWS EC2. Je pense qu'il a été configuré lors de la construction de l'EC2. J'ai donc une erreur Address is in use. J'ai donc arrêté le service et lancé le service Apache2:

sudo service nginx stop
sudo service apache2 start
Dodger
la source
Merci beaucoup! Après tout, cela a fonctionné pour moi.
Vivek
4

Je l'ai compris. J'avais dupliqué Listen 80 commandes dans mon httpd.conf et ports.conf

De plus, lors de la copie du fichier de configuration sur ce serveur en cours de virtualisation, j'ai négligé de remarquer que le répertoire du journal des erreurs avait été modifié. En regardant dans ce journal des erreurs, j'ai remarqué que le répertoire du mime.typesfichier de configuration était incorrect dans mon httpd.conffichier. J'ai mis à jour ce paramètre et le serveur a bien démarré.

Gunner Barnes
la source
3
J'ai également eu des Listen 80commandes en double dans mon httpd.confetports.conf
Gunner Barnes
2

Cela signifie que votre port 80 est déjà utilisé, changez le port pour apache2 (ce que je ne recommande pas) en modifiant:

/etc/apache2/ports.conf

Ou fermez l'application qui s'exécute sur le port 80:

netstat -antp | grep 80

Pour trouver ce qui fonctionne sur le port 80.

Dylan Dodds
la source
netstat -antp | grep 80ne produit rien aussi bien.
Gunner Barnes
pouvez-vous copier / coller votre sortie de netstat -antp | grep 80?
Dylan Dodds le
Il n'y a littéralement aucune sortie.
Gunner Barnes
hmm c'est étrange, essayez de changer le port à 81 sinon ce n'est pas le port bloqué il y a une autre erreur vous pouvez vérifier les erreurs apache2 dans /var/log/apache2/error.log
Dylan Dodds
2

Juste un indice pour quiconque utilise peut-être VirtualBox avec des réseaux NAT. J'ai constaté qu'une règle NAT entre mon invité et l'hôte s'était configurée, liant le port

mschr
la source
2

Ne faites pas que dupliquer les mentions de

Listen 80

mais aussi mention de cela en plus de Listen 80

Include ports.conf
Scott Stensland
la source