Tout à coup, je reçois l'erreur nginx ci-dessous
* Restarting nginx
* Stopping nginx nginx
...done.
* Starting nginx nginx
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
...done.
...done.
Si je cours
lsof -i :80 or Sudo fuser -k 80/tcp
Je n'ai rien Rien sur le port 80
Puis je lance le ci-dessous:
Sudo netstat -pan | grep ":80"
tcp 0 0 127.0.0.1:8070 0.0.0.0:* LISTEN 15056/uwsgi
tcp 0 0 10.170.35.97:39567 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39564 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39584 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39566 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39571 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39580 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39562 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39582 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39586 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39575 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39579 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39560 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39587 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39591 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39589 10.158.58.13:8080 TIME_WAIT -
Je suis perplexe.
Comment déboguer?
J'utilise uwsgi avec
proxy pass sur le port 8070. uwsgi est en cours d'exécution. Nginx n'est pas. J'utilise Ubuntu 12.4
Vous trouverez ci-dessous les parties pertinentes de mon fichier de configuration nginx.
upstream uwsgi_frontend {
server 127.0.0.1:8070;
}
server {
listen 80;
server_name 127.0.0.1;
location = /favicon.ico {
log_not_found off;
}
location / {
include uwsgi_params;
uwsgi_buffering off;
uwsgi_pass 127.0.0.1:8070;
}
}
Voici comment j'installe nginx sur Ubuntu 12.04
nginx=stable;add-apt-repository ppa:nginx/$nginx;
apt-get update
apt get install nginx-full
[::]:80
est une adresse ipv6.
Cette erreur peut être provoquée si une configuration nginx est à l'écoute sur le port 80 et sur le port [::]:80
.
J'ai eu le suivant dans mon fichier de sites disponibles par défaut:
listen 80;
listen [::]:80 default_server;
Vous pouvez résoudre ce problème en ajoutant ipv6only=on
au [::]:80
comme ceci:
listen 80;
listen [::]:80 ipv6only=on default_server;
Pour plus d'informations, voir:
j'ai corrigé cela en exécutant Sudo apachectl stop
- s'avère qu'Apache s'exécutait en arrière-plan et empêchait nginx de démarrer sur le port souhaité.
Sous ubuntu, lancez Sudo /etc/init.d/Apache2 stop
J'ai trouvé le problème que je n'avais jamais eu auparavant.
Je viens juste de supprimer /etc/nginx/sites-available/default
. Ensuite cela a fonctionné.
Ma conf était dans /etc/nginx/default
.
J'obtenais aussi la même erreur . nginx: [émergent] bind () à [::]: 80 a échoué (98: adresse déjà utilisée) et quand j'ai tapé l'hôte local dans le navigateur, alors j'obtenais
Ça marche!
Ceci est la page Web par défaut pour ce serveur.
Le logiciel du serveur Web est en cours d’exécution, mais aucun contenu n’a été ajouté pour le moment… .. au lieu de la page d’accueil de nginx, Apache2 est exécuté sur le même port,
trouver le fichier Apache2 ports.conf
Sudo /etc/Apache2/ports.conf
changer le port autre que 80, je le fais en tant que 70
sauvegarder le fichier
redémarrez votre système
cela fonctionnera aussi pour vous, si vous tapez localhost dans le navigateur, vous obtiendrez la page d'accueil de nginx
Mon cas est différent, j'ai dû tuer Nginx pour le redémarrer.
Au lieu de
Sudo systemctl restart nginx
Je devais utiliser:
Sudo pkill -f nginx
Sudo systemctl start nginx
J'ai eu le même problème dans letsencrypt (certbot) et nginx,
ref: https://github.com/certbot/certbot/issues/5486
cette erreur n'a pas encore de solution
donc, a changé un cron pour renouveler (mettant une recharge après renouvellement) (en utilisant suggérer de certbot)
-- in /etc/cron.d/certbot
from
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && Perl -e 'sleep int(Rand(3600))' && certbot -q renew
to
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && Perl -e 'sleep int(Rand(3600))' && certbot -q renew --pre-hook "service nginx stop" --post-hook "service nginx start"
journaux (court):
-- in /var/log/syslog
Jun 10 00:14:25 localhost systemd[1]: Starting Certbot...
Jun 10 00:14:38 localhost certbot[22222]: nginx: [error] open() "/run/nginx.pid$
Jun 10 00:14:41 localhost certbot[22222]: Hook command "nginx" returned error c$
Jun 10 00:14:41 localhost certbot[22222]: Error output from nginx:
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] still could not bind()
Jun 10 00:14:41 localhost systemd[1]: Started Certbot.
-- in /var/log/nginx/error.log
2018/06/10 00:14:27 [notice] 22233#22233: signal process started
2018/06/10 00:14:31 [notice] 22237#22237: signal process started
2018/06/10 00:14:33 [notice] 22240#22240: signal process started
2018/06/10 00:14:34 [notice] 22245#22245: signal process started
2018/06/10 00:14:38 [notice] 22255#22255: signal process started
2018/06/10 00:14:38 [error] 22255#22255: open() "/run/nginx.pid" failed (2: No $
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: still could not bind()
essayez de faire cette commande
Sudo fuser -k 443/tcp
service nginx restart
Mon problème était que mes directives d'écoute se chevauchaient. J'ai réussi à comprendre les directives qui se chevauchent en exécutant
grep -r listen /etc/nginx/*
Deux fichiers écoutaient sur le même port:
/etc/nginx/conf.d/default.conf: listen 80;
/etc/nginx/sites-enabled/default.conf: listen 80;
J'ai rencontré le même problème. le journal est comme ci-dessous
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: still could not bind()
2018/10/31 12:54:23 [alert] 127997#127997: unlink() "/run/nginx.pid" failed (2: No such file or directory)
2018/10/31 22:40:48 [info] 36948#36948: Using 32768KiB of shared memory for Push module in /etc/nginx/nginx.conf:68
2018/10/31 22:50:40 [emerg] 37638#37638: duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/default:18
2018/10/31 22:51:33 [info] 37787#37787: Using 32768KiB of shared memory for Push module in /etc/nginx/nginx.conf:68
Le dernier [emerg]
indique que duplicate listen options for [::]:80
, ce qui signifie qu'il existe plusieurs fichiers de bloc nginx contenant [::]:80
.
Ma solution consiste à supprimer l'un des paramètres [::]:80
P.S. vous avez probablement un fichier de bloc par défaut. Mon conseil est de conserver ce fichier comme serveur par défaut pour le port 80 et de supprimer [::]:80
des autres fichiers de blocage.
Commencez par changer le port d'écoute Apache 80 en 8080 Apache dans /etc/Apache2/ports.conf include
Listen 1.2.3.4:80 to 1.2.3.4:8080
Sudo service Apache2 restart
ou
Sudo service httpd restart // in case of centos
puis ajoutez nginx comme serveur proxy inverse qui écoutera le port Apache
server {
listen 1.2.3.4:80;
server_name some.com;
access_log /var/log/nginx/something-access.log;
location / {
proxy_pass http://localhost:8080;
proxy_redirect off;
proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* ^.+\.(jpg|js|jpeg|png)$ {
root /usr/share/nginx/html/;
}
location /404.html {
root /usr/share/nginx/html/40x.html;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
# put code for static content like js/css/images/fonts
}
Après les modifications, redémarrez le serveur nginx
Sudo service nginx restart
Maintenant tout le trafic sera traité par le serveur nginx et enverra toutes les requêtes dynamiques à Apache et le contenu statique sera servi par le serveur nginx.
Pour la configuration préalable comme le cache:
Si le problème persiste après avoir essayé l'une des solutions ci-dessus, redémarrez votre serveur une fois. Cela a fonctionné pour moi :)
J'ai eu plusieurs fichiers * .save (sauvegardes d'urgence de nano) de différents fichiers de configuration NGINX dans mon répertoire sites-avilable. Une fois que j'ai supprimé ces fichiers .save, NGINX a redémarré correctement. J'ai supposé que ceux-ci étaient inoffensifs puisqu'il n'y avait pas de lien symbolique correspondant, mais je suppose que j'avais tort.
Dans mon cas, l'un des services, Apache, Apache2 ou Nginx, était déjà en cours d'exécution et, à cause de cela, je n'ai pas pu démarrer l'autre service.
J'utilise superviseur pour exécuter Nginx et Gunicorn côte à côte sur un conteneur Docker.
C'était la configuration utilisée pour superviseur:
[supervisord]
nodaemon=true
[program:gunicorn]
command = /project/start.sh
user = www-data
[program:nginx]
command=/usr/sbin/nginx
Le problème était la façon dont j'ai lancé Ngnix: par défaut, il s’exécute au premier plan. Cela permet de superviser les tentatives d’exécution d’une autre instance de Nginx.
En ajoutant -g 'daemon off;'
à la ligne de commande, Nginx est resté au premier plan, le superviseur a cessé d'essayer d'exécuter une autre instance.
Dans mon cas, le coupable s'est avéré être un bloc serveur qui contenait:
listen 127.0.0.1:80;
listen [::1]:80 ipv6only=on;
server_name localhost;
Sous Linux, un socket écoutant une adresse IP spécifique (par exemple [::1]:80
) est en conflit avec un socket écoutant le même port mais une adresse IP quelconque (c'est-à-dire [::]:80
). Normalement, nginx résoudra ce problème de manière transparente en utilisant une seule prise derrière cette scène. Cependant, spécifier explicitement ipv6only
(ou certaines autres options) dans la directive d'écoute oblige nginx à (essayer de) créer un socket distinct pour celle-ci, entraînant ainsi l'erreur Address already in use
.
Comme ipv6only=on
est quand même la valeur par défaut (depuis la version 1.3.4), le correctif consistait simplement à supprimer cette option de cette directive, et à s'assurer que ipv6only
n'était utilisé nulle part ailleurs dans ma config.
Pour suivre @ lfender6445 et les réponses @SAURABH -
Mon problème était également le fait qu'après la mise à niveau vers Vagrant 2.2.2, Apache2 était exécuté en tant que serveur Web au démarrage de l'invité. Dans le passé, je n'avais que nginx en tant que serveur Web.
vagrant ssh dans la boîte et exécutez la commande suivante pour empêcher Apache2 de démarrer à chaque démarrage de la boîte d'invité:
Sudo update-rc.d -f Apache2 remove
Quittez ssh, halte, vagabond. Problème résolu.