it-swarm.com.de

Nginx kann nicht neu gestartet werden, bind () fehlgeschlagen (98: Adresse wird bereits verwendet)

Ich weiß, dass dieses Thema in verschiedenen Formen existiert, aber ich habe Probleme, mein Problem zu lösen. Wenn ich service nginx restart, nginx schlägt mit folgendem Protokoll fehl:

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()

Ich habe nur eine Konfiguration in sites-enabled. Wenn ich renne:

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

Es zeigt, dass die Konfiguration default Listen 80 hat, aber das sollte keine Rolle spielen, da sie nicht in 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)

Hier ist ein netstat, das zeigt, welche Ports verwendet werden:

$ 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

Und hier ist meine komplette Konfiguration in sites-enabled (der einzige dort):

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;
}

Ich frage mich, ob dieser bind () - Fehler aufgrund meiner Konfiguration auftritt. Irgendwelche Ideen, was ich falsch machen könnte? Ich benutze Nginx/1.4.6 (Ubuntu). Jede Hilfe wäre sehr dankbar.

9
dallen

Versuchen Sie, Nginx zu stoppen:

service nginx stop

Überprüfen Sie, ob der Nginx noch läuft:

ps ax | grep nginx

Und wenn es noch läuft, beenden Sie den Prozess:

kill -p PID

Überprüfen Sie den Nginx-Status, wird nicht ausgeführt:

ps ax | grep nginx

Und dann einen sauberen Start machen:

service nginx start

Dies funktionierte für mich nach dem gleichen Problem.

13
szg28

Entsprechend Ihrer netstat Ausgabe läuft nginx selbst immer noch auf Port 80.

Bevor Sie versuchen, es neu zu starten, überprüfen Sie Ihre Konfiguration mit nginx -t und behebe die Fehler.

4
Michael Hampton

Ich bin wahrscheinlich der einzige, der dumm genug ist, diesen Fehler zu machen, aber ich habe versehentlich das falsche Paket heruntergeladen (php anstelle von php-fpm), der Apache 2 als Abhängigkeit installiert hat. Da es auf Port 80 lief, konnte Nginx nicht.

Wahrscheinlich kein sehr häufiger Fehler, aber ich denke, Sie müssen überprüfen, ob Sie versehentlich noch etwas an Port 80 haben.

2

Ich hatte ein ähnliches Problem.

Das hat bei mir funktioniert:
Sudo fuser -k 80/tcp
dann:
service nginx restart

Ich weiß nicht, warum, aber meine Antwort wurde hier gefunden: https://easyengine.io/tutorials/nginx/troubleshooting/emerg-bind-failed-98-address-already-in-use/

Hier ist auch die Hintergrundgeschichte, wie/wann diese Fehlermeldung angezeigt wurde: https://serverfault.com/a/939888/39972

1
SherylHohman