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. 내가 실행할 때 :

$ 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(유일한 구성 ).

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는 해당 포트에서 실행되는 유일한 앱입니다. 문제를 해결 했습니까?
Mitch Kent

답변:


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를 실행했으며 오류가 없습니다. 그래서 다시 시작할 수 없어 혼란스러워합니다.
dallen

먼저 nginx를 중지 한 다음 다시 시작하십시오.
Michael Hampton

1
나는 같은 문제에 시달린다. 나는 이것을 nginx의 버그라고 생각할 것이다.
Clojure 대부분

2

아마이 실수를하기에 유일하게 멍청한 사람 일 수도 있지만 실수로 잘못된 패키지 ( php대신 대신 php-fpm)를 다운로드하여 Apache 2를 종속성으로 설치했습니다. 포트 80에서 실행되었으므로 Nginx는 할 수 없었습니다.

아마도 일반적인 실수는 아니지만 포트 80에 실수로 다른 것이 있는지 확인하는 것이 좋습니다.


당신은 그렇게 먼저하지 않습니다. 패키지 이름이 잘못 선택되었습니다. 그 mod_php대신 실제로 이름을 붙여야했습니다. 그러나 이제 수년간 그렇게되었으므로 모든 사람의 시스템을 손상시키지 않으면 서 변경할 수 없습니다.
Michael Hampton

@MichaelHampton 적어도 그것은 꽤 간단한 수정입니다 ( apt-get remove apache2 && apt-get autoremove)
Redwolf Programs

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.