J'essaie de configurer une VM 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
Le résultat de netstat -tulpn
indique que rien n'utilise le port 80. Quelle pourrait en être la cause?
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 le serveur en cours de virtualisation, j'ai omis de remarquer que le répertoire du journal des erreurs avait été modifié. En examinant ce journal d'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é.
Assurez-vous de ne pas déclarer Listen 80
deux fois dans les fichiers .conf.
Par exemple, vous pourriez l'avoir à la fois dans ports.conf
et inn sites-enabled/www.conf
.
Pour le savoir, utilisez: grep -ri listen /etc/Apache2
Conservez Listen 80
à un seul endroit.
Répondre à la façon dont j'ai résolu ce problème. Peut être utile à quelqu'un à l'avenir.
Essayez 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
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 votre cas consiste à exécuter un ps -ef | grep Apache
: si cela renvoie des processus ressemblant à /bin/bash /usr/share/Apache2/ask-for-passphrase mysite.com:443 RSA
, vous devez entrer 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 également, mais faites un autre ps -ef | grep Apache
pour en être sûr).
Ensuite, j'ai suivi les instructions dans cet article pour créer un fichier de mot de passe SSL ne nécessitant pas de mot de passe. Ensuite, un service Apache2 start
fonctionnait correctement et Apache a démarré correctement après un redémarrage.
J'ai eu cette erreur lors d'une nouvelle installation au démarrage d'Apache2 Ubuntu 12.10.
C'est un bug dans 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 trouble, c'est que service
indique 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 pas parce qu'Apache2 démarre au démarrage et se bloque. Le processus de démarrage normal pour Apache2 ne fonctionne pas correctement.
J'ai pu résoudre ce problème en analysant le résultat de la commande ps
. Notez que la commande ps
nous indique que ce processus a été lancé par "/etc/rc2.d/S91Apache2 start".
C’est le programme incriminé qui nécessite un Swift kick.
/etc/rc2.d/S91Apache2
est le lien symbolique utilisé pour lancer Apache2 pour vous au démarrage de l'ordinateur. Pour une raison quelconque, il semble que Apache2 soit démarré puis bloqué. Nous devrons donc lui dire de ne pas le faire.
Allez donc jeter un coup d'œil à ce /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 Apache2 de démarrer 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 pourriez remettre Apache2 à l’état initial, 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 en train de sauvegarder et de servir des pages à nouveau. Il semble y avoir quelques bugs sérieux avec Apache2/Ubuntu 12.10 qui entraînent le démarrage et le blocage d’Apache2. 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.
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
Juste un indice pour quiconque utilise peut-être VirtualBox avec les réseaux NAT. J'ai constaté que la règle NAT entre mon invité et l'hôte s'était configurée, liant le port.
Ne faites pas que dupliquer les mentions de
Listen 80
mais aussi mention de cela en plus de Listen 80
Include ports.conf
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.