nginxを再起動できません、bind()が失敗しました(98:アドレスはすでに使用されています)


9

このトピックはさまざまな形で存在しますが、問題を解決するのに苦労しています。を実行すると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いる設定は1つだけです。私が走ると:

$ 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(そこにあるのは1つだけです):

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)を使用しています。どんな助けでも大歓迎です。


現在、同じ問題に直面しています。変更のない一度動作したnginx構成は、ポートが使用中であると言っているため、正常にリロードされませんが、nginxはそのポートで実行されている唯一のアプリです。問題を解決しましたか?
ミッチ・ケント

回答:


13

nginxを停止してみてください。

service nginx stop

まだ実行中のnginxを確認します。

ps ax | grep nginx

そしてまだ実行中の場合は、プロセスを強制終了します。

kill -p PID

nginxステータスを確認します。実行されません。

ps ax | grep nginx

そして、クリーンスタートを行います:

service nginx start

これは同じ問題の後、私にとってはうまくいきました。


私にとって、PIDを強制終了した後、プロセスは再び開始されます
Jason Liu

4

netstat出力によると、nginx自体は引き続きポート80で実行されています。

再起動する前に、構成を検証してnginx -tエラーを修正してください。


4
nginx -tを実行しましたが、エラーはありません。そのため、再起動できないので困惑しています。
ダレン2015年

まずnginxを停止してから、もう一度開始してください。
マイケルハンプトン

1
私は同じ問題に踏み込みます。これはnginxのバグだと思います。
Clojure主に2015

2

私はおそらく、この間違いをするのに十分なだけの愚か者ですが、誤って(のphp代わりにphp-fpm)間違ったパッケージをダウンロードし、依存関係としてApache 2をインストールしました。ポート80で実行されていたため、Nginxは実行できませんでした。

おそらくあまり一般的な間違いではないでしょうが、ポート80に誤って何か他のものがあるかどうかを確認するのが得策だと思います。


あなたはそれを行う最初ではありません。パッケージ名の選択が不十分でした。mod_php代わりに実際に名前を付ける必要がありました。しかし、それは何年もそのようになってきたので、誰のシステムも壊さずに変更することはできません。
マイケルハンプトン

@MichaelHampton少なくともそれはかなり単純な修正です(apt-get remove apache2 && apt-get autoremove
Redwolfプログラム

1

同様の問題がありました。

これは私のために働いたものです:
sudo fuser -k 80/tcp
そして:
service nginx restart

私は原因を知りませんが、私の答えはここで見つかりました:https : //easyengine.io/tutorials/nginx/troubleshooting/emerg-bind-failed-98-address-already-in-use/

また、このエラーメッセージが表示された方法とタイミングの裏話もここにあります。https//serverfault.com/a/939888/399723

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.