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

49

J'essaie de configurer une machine virtuelle exécutant Ubuntu 12.04. J'ai deux hôtes virtuels configurés avec le port 80, mais Apache ne démarre pas.

J'obtiens cette erreur:
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80

La sortie de netstat -tulpn montre que rien n'utilise le port 80. Qu'est-ce qui pourrait en être la cause?

    
posée Gunner Barnes 02.04.2013 - 16:59
la source

9 réponses

3

Je l'ai compris. J'avais des commandes Listen 80 en double dans mes httpd.conf et ports.conf

De plus, en copiant le fichier de configuration sur ce serveur en cours de virtualisation, j'ai omis de remarquer que le répertoire des journaux d’erreur avait été modifié. En regardant dans ce journal des erreurs, j'ai remarqué que le répertoire du fichier de configuration mime.types était incorrect dans mon fichier httpd.conf . J'ai mis à jour ce paramètre et le serveur a bien démarré.

    
réponse donnée Gunner Barnes 04.04.2013 - 16:52
la source
29

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

Par exemple, vous pouvez l’avoir à la fois dans ports.conf et dans inn sites-enabled/www.conf .

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

Conservez Listen 80 dans un seul endroit.

    
réponse donnée ravi 20.08.2014 - 19:09
la source
15

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

Essayez netstat -ltnp | grep :80

Cela retournerait quelque chose comme

  

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

Puis lancez

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

    
réponse donnée Anonymous Platypus 15.01.2016 - 08:06
la source
13

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

Un bon moyen de savoir si c'est le cas pour vous est d'exécuter un ps -ef | grep apache : si cela retourne des processus qui ressemblent à /bin/bash /usr/share/apache2/ask-for-passphrase mysite.com:443 RSA , alors il attend qu'un mot de passe soit entré dans un terminal que vous ne verrez jamais .

D'abord, j'ai tué le processus bloqué (envoyer un kill -HUP à l'ID de processus pour le processus / usr / sbin / apache2 devrait suffire à tuer les autres également, mais faites un autre ps -ef | grep apache pour être sûr). / p>

Ensuite, j'ai suivi les instructions dans cet article. pour créer un fichier de mot de passe SSL pour lequel aucun mot de passe n'est requis. Ensuite, un service apache2 start a bien fonctionné et Apache a démarré correctement après un redémarrage.

    
réponse donnée Brendan Quinn 17.12.2013 - 03:37
la source
10

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

C'est un bug dans apache2. Il est accroché en arrière-plan. Voici ma solution pour savoir où se trouvent les bogues dans le logiciel.

Voici l'erreur que j'ai eu:

[email protected]:~$ 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? Qu'est-ce qui pourrait l'utiliser? Check it out:

[email protected]:~$ 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:

[email protected]:~$ 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 seconde fois sur le même port.

Ce qui m'embête, c'est que service indique que apache2 ne fonctionne PAS:

[email protected]:~$ sudo service apache2 status
Apache2 is NOT running.

Et quand vous interrogez apache2ctl pour son statut, il se bloque.

[email protected]:~# /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:

[email protected]:~# /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! Donc, Ubuntu ne peut pas arrêter apache2 car il ne sait pas où il se trouve!

Vous penseriez 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 pour apache2 ne fonctionne pas correctement.

Alors, comment le réparer?

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

C'est le programme fautif qui a besoin d'un coup de pied rapide.

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

Alors allez jeter un oeil à ce /etc/rc2.d/S91apache2 .

[email protected]:/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 cela pour empêcher apache2 de démarrer au démarrage:

[email protected]:~# 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 comme avant, mais cela ferait échouer à nouveau.

[email protected]:~$ 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, lancez apache2 comme ceci:

sudo service apache2 start

Et apache2 est de nouveau en sauvegarde et de servir des pages. Il semble y avoir de sérieux bogues avec apache2 / Ubuntu 12.10 qui provoquent le démarrage et le blocage d’apache2. Ceci est une solution de contournement, je suppose que le correctif est d'obtenir de nouvelles versions de apache2 et Ubuntu et d'espérer pour le mieux.

    
réponse donnée Eric Leschinski 16.11.2013 - 00:31
la source
4

J'avais un serveur Nginx à l’écoute de mon serveur AWS EC2, je pense qu’il a été configuré lors de la construction de l’EC2. J'ai donc arrêté le service et lancé le service Apache2:

sudo service nginx stop
sudo service apache2 start
    
réponse donnée Dodger 08.03.2017 - 00:59
la source
2

Cela signifie que vous utilisez déjà le port 80, ou modifiez le port pour apache2 (que je ne recommande pas) en éditant:

/etc/apache2/ports.conf

Ou fermez l'application exécutée sur le port 80:

netstat -antp | grep 80

Pour trouver ce qui est exécuté sur le port 80.

    
réponse donnée Dylan Dodds 02.04.2013 - 21:45
la source
2

Juste un indice pour quiconque utilise VirtualBox avec des réseaux NAT. J'ai trouvé que le fait d'avoir une règle NAT entre mon invité et son hôte s'était mis en place, liant le port

    
réponse donnée mschr 19.02.2014 - 11:16
la source
1

Pas seulement les mentions en double de

Listen 80

mais aussi mention de ceci en plus de Listen 80

Include ports.conf
    
réponse donnée Scott Stensland 30.06.2015 - 17:45
la source

Lire d'autres questions sur les étiquettes