13 votes

Impossible de redémarrer nginx

Je utilise nginx avec Django sur Ubunto 10:04. Le problème est quand je redémarre nginx, je reçois cette erreur.

sudo /etc/init.d/nginx restart
Restarting nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
configuration file /etc/nginx/nginx.conf test is successful
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)

Aussi, j'ai essayé d'arrêter puis de démarrer mais j'obtiens toujours l'erreur.

Voici la sortie de lsof:

sudo lsof -i tcp:80
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   27141   root    6u  IPv4 245906      0t0  TCP *:www (LISTEN)
nginx   27142 nobody    6u  IPv4 245906      0t0  TCP *:www (LISTEN)

Si je tue le processus avec le PID 27141, ça fonctionne. Cependant, j'aimerais comprendre pourquoi je ne peux pas simplement redémarrer.

Voici le nginx.conf:

worker_processes 1;

user nobody nogroup;
pid /tmp/nginx.pid;
error_log /tmp/nginx.error.log;

events {
    worker_connections 1024;
    accept_mutex off;
}

http {
    include mime.types;
    default_type application/octet-stream;
    access_log /tmp/nginx.access.log combined;
    sendfile on;

    upstream app_server {
        # server unix:/tmp/gunicorn.sock fail_timeout=0;
        # Pour une configuration TCP:
        server 127.0.0.1:8000 fail_timeout=0;
    }

    server {
        listen 80 default;
        client_max_body_size 4G;
        server_name _;

        keepalive_timeout 5;

        # chemin pour les fichiers statiques
        root /home/apps/venvs/app1/app1;

        location / {
            # vérifie les fichiers statiques, sinon proxy à l'application
            try_files $uri @proxy_to_app;
        }

        location @proxy_to_app {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;

            proxy_pass   http://app_server;
        }

        error_page 500 502 503 504 /500.html;
        location = /500.html {
            root /path/to/app/current/public;
        }
    }
}

Des idées?

34voto

tersakyan Points 433

Essayer :

$ sudo fuser -k 80/tcp ; sudo /etc/init.d/nginx restart

6voto

MikeDre Points 70

Cela a fonctionné pour moi

sudo fuser -k 80/tcp

Et ensuite

service nginx start

Source : https://rtcamp.com/tutorials/nginx/troubleshooting/emerg-bind-failed-98-address-already-in-use/

2voto

tquang Points 141

Daemontools démarre nginx avec succès, puis nginx se daemonize, et ensuite daemontools essaie de démarrer à nouveau nginx, sans succès, en enregistrant une erreur dans le journal.

La solution à ce problème est de désactiver le mode daemon dans la section principale du nginx.conf :

daemon off;

Site: http://wiki.nginx.org/CoreModule

1voto

Alfishe Points 347

Fatigué des problèmes de redémarrage de nginx et des fautes "adresse en cours d'utilisation". J'ai décidé de le faire fonctionner une fois pour toutes.

Ajouté juste une ligne à la fin de l'action d'arrêt et de redémarrage dans le fichier /etc/init.d/nginx

nginx -s quit

donc maintenant cela ressemble à ceci (et assurez-vous que le dossier nginx est dans la variable PATH, sinon spécifiez le chemin complet)

stop)
    echo -n "Arrêt de $DESC : "
    start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
        --exec $DAEMON || true
    echo "$NAME."
    nginx -s quit
    ;;

restart|force-reload)
    echo -n "Redémarrage de $DESC : "
    start-stop-daemon --stop --quiet --pidfile \
        /var/run/$NAME.pid --exec $DAEMON || true
    nginx -s quit
    sleep 1
    test_nginx_config
    start-stop-daemon --start --quiet --pidfile \
        /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true
    echo "$NAME."
    ;;

J'espère que cette solution fonctionnera pour d'autres.

0voto

emrah Points 176

Toujours tester votre configuration en premier, cela montrera les erreurs de syntaxe et les lignes dupliquées et vous indiquera où elles se trouvent.

nginx -t

Vous verrez des journaux là-bas vous montrant ce qui cause l'échec.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X