No se puede reiniciar nginx, error en bind () (98: dirección ya en uso)

9

Sé que este tema existe en varias formas diferentes, pero tengo problemas para resolver mi problema. Si ejecuto service nginx restart, nginx falla con el siguiente 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()

Solo tengo una configuración cargando sites-enabled. Cuando corro:

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

Muestra que la defaultconfiguración tiene listen 80, pero eso no debería importar ya que no está en 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)

Aquí se netstatmuestra qué puertos se están utilizando:

$ 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

Y aquí está mi configuración completa en sites-enabled(la única allí):

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

Me pregunto si este error bind () está ocurriendo debido a mi configuración. ¿Alguna idea de lo que podría estar haciendo mal? Estoy usando nginx / 1.4.6 (Ubuntu). Cualquier ayuda sería muy apreciada.

dallen
fuente
Actualmente estoy enfrentando el mismo problema. Una configuración nginx que alguna vez funcionó y sin cambios ahora no se volverá a cargar con éxito, ya que dice puerto en uso, sin embargo, nginx es la única aplicación que se ejecuta en ese puerto. ¿Has resuelto tu problema?
Mitch Kent

Respuestas:

13

Intenta detener nginx:

service nginx stop

Comprueba que el nginx sigue ejecutándose:

ps ax | grep nginx

Y si aún se está ejecutando, elimine el proceso:

kill -p PID

Verifique el estado de nginx, no se ejecutará:

ps ax | grep nginx

Y luego haz un comienzo limpio:

service nginx start

Esto funcionó para mí después del mismo problema.

szg28
fuente
Para mí, después de matar el PID, el proceso comenzará nuevamente
Jason Liu
4

Según su netstatresultado, nginx todavía se está ejecutando en el puerto 80.

Antes de intentar reiniciarlo, valide su configuración con nginx -ty corrija los errores.

Michael Hampton
fuente
44
Ejecuté nginx -t y no hay errores. Es por eso que estoy confundido por no poder reiniciar.
dallen
Intente detener nginx primero y luego comenzarlo de nuevo.
Michael Hampton
1
Me encuentro con el mismo problema. Consideraría esto un error de nginx.
ClojureMás
2

Probablemente soy el único lo suficientemente tonto como para cometer este error, pero accidentalmente descargué el paquete incorrecto (en phplugar de php-fpm), que instaló Apache 2 como una dependencia. Como se estaba ejecutando en el puerto 80, Nginx no pudo.

Probablemente no sea un error muy común, pero supongo que la conclusión es verificar si accidentalmente tiene algo más en el puerto 80.

Programas Redwolf
fuente
No eres el primero en hacer eso. El nombre del paquete fue mal elegido; Realmente debería haber sido nombrado mod_phpen su lugar. Pero ahora que ha sido así durante años, no se puede cambiar sin romper el sistema de todos.
Michael Hampton
@MichaelHampton Al menos es una solución bastante simple ( apt-get remove apache2 && apt-get autoremove)
Programas Redwolf