Не могу перезапустить nginx - PullRequest
13 голосов
/ 21 мая 2011

Я использую nginx с Django на Ubunto 10:04.Проблема в том, что когда я перезапускаю nginx, я получаю эту ошибку.

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)

Кроме того, я попытался остановить, а затем запустить, но все еще получаю ошибку.

Вот вывод из 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)

Если я убью процесс с PID 27141, он заработает.Тем не менее, я хотел бы разобраться, почему я не могу просто перезагрузить компьютер.

Вот 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;
        # For a TCP configuration:
        server 127.0.0.1:8000 fail_timeout=0;
    }

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

        keepalive_timeout 5;

        # path for static files
        root /home/apps/venvs/app1/app1;

        location / {
            # checks for static file, if not found proxy to app
            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;
        }
    }
}

Есть идеи?

Ответы [ 6 ]

31 голосов
/ 24 апреля 2012

Попробуйте:

$ sudo fuser -k 80/tcp ; sudo /etc/init.d/nginx restart 
4 голосов
/ 19 декабря 2013

Это сработало для меня

sudo fuser -k 80 / tcp

А потом

служба nginx start

Источник: https://rtcamp.com/tutorials/nginx/troubleshooting/emerg-bind-failed-98-address-already-in-use/

2 голосов
/ 01 апреля 2013

Daemontools запускает nginx успешно, затем nginx демонизирует, а затем daemontools пытается снова запустить nginx, безуспешно, регистрируя ошибку в журнале.

Решение этой проблемы - отключить режим демона в главном разделеnginx.conf:

демон отключен;

Сайт: http://wiki.nginx.org/CoreModule

1 голос
/ 02 июня 2013

Устали с проблемами перезапуска nginx и ошибками "адрес в использовании".Решил заставить его работать раз и навсегда.

Добавлена ​​только одна строка в конце остановки и перезапустить действие в файле /etc/init.d/nginx

nginx -s quit

, так что теперь это выглядитlike (и убедитесь, что папка nginx находится в переменной PATH, в противном случае укажите полный путь)

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

restart|force-reload)
    echo -n "Restarting $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."
    ;;

Надеемся, что это решение будет работать для других.

0 голосов
/ 05 июня 2016

Это потому, что вы не перезапускаетесь от имени root.

Перейдите в режим root:

sudo -i

Перезапустите:

service nginx restart

Или:

/etc/init.d/nginx restart
0 голосов
/ 29 января 2016

Всегда сначала проверяйте свою конфигурацию, она покажет синтаксические ошибки и повторяющиеся строки и укажет на вас.

nginx -t

Там вы увидите журналы, показывающие, что является причиной сбоя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...