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

9

Ich weiß, dass dieses Thema in verschiedenen Formen existiert, aber ich habe Probleme, mein Problem zu lösen. Wenn ich ausgeführt werde service nginx restart, schlägt nginx mit dem folgenden 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 geladen sites-enabled. Wenn ich renne:

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

Es zeigt, dass die defaultKonfiguration Listen 80 hat, aber das sollte keine Rolle spielen, da es nicht in ist 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 sehen Sie netstat, 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(die 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.

dallen
quelle
Ich stehe derzeit vor dem gleichen Problem. Eine einst funktionierende Nginx-Konfiguration ohne Änderungen wird jetzt nicht erfolgreich neu geladen, da der verwendete Port angezeigt wird. Nginx ist jedoch die einzige App, die auf diesem Port ausgeführt wird. Haben Sie Ihr Problem gelöst?
Mitch Kent

Antworten:

13

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.

szg28
quelle
Für mich wird der Prozess nach dem Töten der PID von vorne beginnen
Jason Liu
4

Laut Ihrer netstatAusgabe läuft nginx selbst immer noch auf Port 80.

Bevor Sie versuchen, es neu zu starten, überprüfen Sie Ihre Konfiguration mit nginx -tund beheben Sie die Fehler.

Michael Hampton
quelle
4
Ich habe nginx -t ausgeführt und es gibt keine Fehler. Deshalb bin ich verwirrt, weil ich nicht neu starten kann.
dallen
Stoppen Sie zuerst Nginx und starten Sie es dann erneut.
Michael Hampton
1
Ich gehe auf das gleiche Thema ein. Ich würde dies als einen Fehler von Nginx betrachten.
ClojureMostly
2

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

Wahrscheinlich kein sehr häufiger Fehler, aber ich denke, der Imbiss besteht darin, zu überprüfen, ob Sie versehentlich etwas anderes an Port 80 haben.

Redwolf-Programme
quelle
Sie sind nicht die Ersten, die das tun. Der Paketname wurde schlecht gewählt; es hätte wirklich mod_phpstattdessen benannt werden sollen. Aber jetzt, wo es seit Jahren so ist, kann es nicht geändert werden, ohne das System aller zu beschädigen.
Michael Hampton
@ MichaelHampton Zumindest ist es eine ziemlich einfache Lösung ( apt-get remove apache2 && apt-get autoremove)
Redwolf Programme