Не удается перезапустить nginx, ошибка bind() (98: адрес уже используется)

Я знаю, что эта тема существует в разных формах, но у меня проблемы с решением моей проблемы. Если я бегу service nginx restart, nginx терпит неудачу со следующим журналом:

2015/03/14 08:36:42 [emerg] 9400#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2015/03/14 08:36:42 [emerg] 9400#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2015/03/14 08:36:42 [emerg] 9400#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2015/03/14 08:36:42 [emerg] 9400#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2015/03/14 08:36:42 [emerg] 9400#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2015/03/14 08:36:42 [emerg] 9400#0: still could not bind()

У меня только один конфиг загружается в sites-enabled, Когда я бегу:

$ grep -slir "listen 80"
$ sites-available/default

Это показывает, что default в конфиге есть 80 прослушиваний, но это не должно иметь значения, поскольку sites-enabled,

$ ps ax -o pid,ppid,%cpu,vsz,wchan,command|egrep '(nginx|PID)'
  PID  PPID %CPU    VSZ WCHAN  COMMAND
 9468     1  0.0  97188 sigsus nginx: master process /usr/sbin/nginx
 9471  9468  0.0  97328 ep_pol nginx: worker process
 9472  9468  0.0  97368 ep_pol nginx: worker process
 9693  9641  0.0   9448 pipe_w egrep --color=auto (nginx|PID)

Вот netstat показывая, какие порты используются:

$ netstat -tulpn

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      1300/master
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      9468/nginx
tcp        0      0 0.0.0.0:2812            0.0.0.0:*               LISTEN      5980/monit
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1174/mysqld
tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      1155/memcached
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9468/nginx
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1113/sshd
tcp6       0      0 :::25                   :::*                    LISTEN      1300/master
tcp6       0      0 :::9000                 :::*                    LISTEN      9106/hhvm
tcp6       0      0 :::22                   :::*                    LISTEN      1113/sshd
udp        0      0 127.0.0.1:11211         0.0.0.0:*                           1155/memcached

И вот мой полный конфиг в sites-enabled (единственный там):

server {
    listen                  443 ssl default_server;

    limit_conn              gulag 15;
    server_name             www.my-website.com;

    access_log              /home/my-website/logs/access.log;
    error_log               /home/my-website/logs/error.log info;

    root                    /home/my-website/web;
    index                   index.php index.html;

    ssl_certificate /etc/nginx/ssl/my-website.com.chained.crt;
    ssl_certificate_key /etc/nginx/ssl/my-website.com.key;
    ssl_prefer_server_ciphers On;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;

    include                 /etc/nginx/includes/my-website_redirects_https.inc;
    include                 /etc/nginx/includes/file_cache.inc;
    include                 /etc/nginx/includes/wordpress.inc;
}

server {
    listen                  80;
    server_name             my-website.com www.my-website.com;
    return                  301 https://$server_name$request_uri;
}

server {
    listen                  443;
    server_name             my-website.com;
    return                  301 https://www.$server_name$request_uri;
}

server {
    server_name
        some-other-website1.com         www.some-other-website1.com
        some-other-website2.com         www.some-other-website2.com
        some-other-website3.com         www.some-other-website3.com
        some-other-website4.com         www.some-other-website4.com
        some-other-website5.com         www.some-other-website5.com

    rewrite ^(.*)$ https://www.my-website.com/some/page/ permanent;
}

server {
    server_name
        some-other-website6.com         www.some-other-website6.com
        some-other-website7.com         www.some-other-website7.com
        some-other-website8.com         www.some-other-website8.com

    rewrite ^(.*)$ https://www.my-website.com/some/other/page/ permanent;
}

server {
    server_name     subdomain.my-website.com;

    rewrite ^(.*)$ https://some.otherwebsite.com/ permanent;
}

server {
    server_name
        some-other-website9.com         www.some-other-website9.com
        some-other-website10.com         www.some-other-website10.com
        some-other-website11.com         www.some-other-website11.com

    rewrite ^(.*)$  https://www.my-website.com/ permanent;
}

Мне интересно, если эта ошибка bind() происходит из-за моей конфигурации. Есть идеи, что я могу делать не так? Я использую nginx/1.4.6 (Ubuntu). Любая помощь будет принята с благодарностью.

5 ответов

Попробуйте остановить nginx:

service nginx stop

Проверьте, работает ли nginx:

ps ax | grep nginx

И если все еще работает, убить процесс:

kill -p PID

Проверьте статус nginx, не запустится:

ps ax | grep nginx

А затем сделайте чистый старт:

service nginx start

Это сработало для меня после того же вопроса.

У меня была похожая проблема.

Вот что сработало для меня:
sudo fuser -k 80/tcp
затем:
service nginx restart

Я не знаю причину, но мой ответ был найден здесь: https://easyengine.io/tutorials/nginx/troubleshooting/emerg-bind-failed-98-address-already-in-use/ Troubleshooting/emerg-bind-failed-98-address-already-in- use/

Кроме того, вот предыстория того, как / когда появилось это сообщение об ошибке: /questions/661574/konfliktuyuschee-imya-servera-nginx-dlya-subdomena/661585#661585

В соответствии с вашими netstat вывод, сам nginx все еще работает на порту 80.

Прежде чем пытаться перезапустить его, проверьте свою конфигурацию с помощью nginx -t и исправить ошибки.

Я, наверное, единственный, кто достаточно глуп, чтобы совершить эту ошибку, но я случайно скачал не тот пакет (php вместо php-fpm), который установил Apache 2 в качестве зависимости. Поскольку он работал на 80-м порту, Nginx не смог.

Вероятно, не очень распространенная ошибка, но я думаю, что вы должны проверить, есть ли у вас случайно что-нибудь еще на порту 80.

Во-первых, нам нужно проверить, сколько служб работает на порту 80. Чтобы проверить это, вы можете запустить следующую команду:

      sudo netstat -plant | grep 80

Это покажет вам, какая именно служба прослушивает порт 80, а затем вы сможете принять решение, хотите ли вы использовать эту службу как есть или вместо нее использовать Nginx.

Если это Apache, вам нужно будет решить, хотите ли вы использовать Apache или Nginx.

Если вы хотите использовать только Nginx, вам нужно сначала остановить Apache:

      sudo systemctl stop apache2 && sudo systemctl start nginx
Другие вопросы по тегам