Impossibile riavviare nginx, bind () non riuscito (98: indirizzo già in uso)


9

So che questo argomento esiste in varie forme, ma ho problemi a risolvere il mio problema. Se corro service nginx restart, nginx fallisce con il seguente registro:

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

Ho solo una configurazione in caricamento sites-enabled. Quando corro:

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

Mostra che la defaultconfigurazione ha ascoltato 80, ma questo non dovrebbe importare poiché non è presente 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)

Ecco un esempio delle netstatporte utilizzate:

$ 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

Ed ecco la mia configurazione completa in sites-enabled(l'unico lì dentro):

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

Mi chiedo se questo errore bind () si sta verificando a causa della mia configurazione. Qualche idea su cosa potrei fare di sbagliato? Sto usando nginx / 1.4.6 (Ubuntu). Qualsiasi aiuto sarebbe molto apprezzato.


Attualmente sto affrontando lo stesso problema. Una configurazione nginx una volta funzionante senza modifiche ora non verrà ricaricata correttamente come sta dicendo porta in uso, tuttavia nginx è l'unica app in esecuzione su quella porta. Hai risolto il tuo problema?
Mitch Kent,

Risposte:


13

Prova a fermare nginx:

service nginx stop

Controlla che nginx sia ancora in esecuzione:

ps ax | grep nginx

E se ancora in esecuzione, uccidi il processo:

kill -p PID

Controlla lo stato di nginx, non verrà eseguito:

ps ax | grep nginx

E poi fai un nuovo inizio:

service nginx start

Questo ha funzionato per me dopo lo stesso problema.


Per me, dopo aver ucciso il PID, il processo ricomincerà da solo
Jason Liu il

4

Secondo l' netstatoutput, lo stesso nginx è ancora in esecuzione sulla porta 80.

Prima di provare a riavviarlo, convalidare la configurazione nginx -te correggere gli errori.


4
Ho eseguito nginx -t e non ci sono errori. Ecco perché sono confuso dal non poter riavviare.
dallen,

Prova prima a interrompere nginx e poi a riavviarlo.
Michael Hampton,

1
Sono coinvolto nello stesso problema. Considererei questo un bug di nginx.
Clojure:

2

Probabilmente sono l'unico abbastanza stupido da commettere questo errore, ma ho accidentalmente scaricato il pacchetto sbagliato ( phpinvece di php-fpm), che ha installato Apache 2 come dipendenza. Dato che era in esecuzione sulla porta 80, Nginx non poteva.

Probabilmente non è un errore molto comune, ma immagino che il takeaway sia verificare se hai accidentalmente qualcos'altro sulla porta 80.


Non sei il primo a farlo. Il nome del pacchetto è stato scelto male; invece avrebbe dovuto essere chiamato mod_php. Ma ora che è stato così per anni, non può essere cambiato senza rompere il sistema di tutti.
Michael Hampton,

@MichaelHampton Almeno è una soluzione abbastanza semplice ( apt-get remove apache2 && apt-get autoremove)
Programmi Redwolf il

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.