nginx - nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)

前端 未结 18 1315
醉酒成梦
醉酒成梦 2020-11-28 17:36

All of a sudden I am getting the below nginx error

 * Restarting nginx
 * Stopping nginx nginx
   ...done.
 * Starting nginx nginx
nginx: [emerg] bind() to [         


        
相关标签:
18条回答
  • 2020-11-28 17:50

    try to do this command

    sudo fuser -k 443/tcp
    service nginx restart
    
    0 讨论(0)
  • 2020-11-28 17:50

    In my case, one of the services either Apache, Apache2 or Nginx was already running and due to that I was not able to start the other service.

    0 讨论(0)
  • 2020-11-28 17:53

    First change apache listen port 80 to 8080 apache in /etc/apache2/ports.conf include

    Listen 1.2.3.4:80 to 1.2.3.4:8080
    sudo service apache2 restart 
    

    or

    sudo service httpd restart    // in case of centos
    

    then add nginx as reverse proxy server that will listen apache port

    server {
     listen   1.2.3.4:80;
     server_name  some.com;
    
     access_log  /var/log/nginx/something-access.log;
    
     location / {
      proxy_pass http://localhost:8080;
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     }
    
    
    location ~* ^.+\.(jpg|js|jpeg|png)$ {
       root /usr/share/nginx/html/;
    }
    
    location /404.html {
      root /usr/share/nginx/html/40x.html;
    }
    
    error_page 404 /404.html;
        location = /40x.html {
    }
    
    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
    
    # put code for static content like js/css/images/fonts
    }
    

    After changes restart nginx server

    sudo service nginx restart
    

    Now all traffic will be handled by nginx server and send all dynamic request to apache and static conten is served by nginx server.

    For advance configuration like cache :

    https://www.linode.com/docs/web-servers/nginx/slightly-more-advanced-configurations-for-nginx/#basic-nginx-caching

    0 讨论(0)
  • 2020-11-28 17:55

    In my case the culprit turned out to be a server-block that contained:

            listen  127.0.0.1:80;
            listen  [::1]:80 ipv6only=on;
            server_name  localhost;
    

    On Linux, a socket listening on a specific IP (e.g. [::1]:80) conflicts with a socket listening on the same port but any IP (i.e. [::]:80). Normally nginx will transparently deal with this problem by using a single socket behind this scenes. However, explicitly specifying ipv6only (or certain other options) on the listen directive forces nginx to (try to) create a separate socket for it, thus resulting in the Address already in use error.

    Since ipv6only=on is the default anyway (since 1.3.4) the fix was simply to remove that option from this directive, and making sure ipv6only wasn't used anywhere else in my config.

    0 讨论(0)
  • 2020-11-28 18:02

    I have the same issue, but I see that port 80 listened by Nginx:

    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      9730/nginx 
    

    But when I try to restart it, I have the error:

        service nginx restart
    Stopping nginx:                                            [FAILED]
    Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
    nginx: [emerg] still could not bind()
    

    My issue was in the config file, I am set PID file, and seems system cant catch it properly:

    user nginx;
    worker_processes 1;
    error_log /var/log/nginx/error.log;
    pid /run/nginx.pid;
    

    When I removed it, it worked.

    0 讨论(0)
  • 2020-11-28 18:05

    I had the same problem in letsencrypt (certbot) and nginx,

    ref: https://github.com/certbot/certbot/issues/5486

    this error does not have a solution yet

    so, a changed a cron for renew (putting a reload after renew) (using suggest from certbot)

    -- in /etc/cron.d/certbot
    from
    0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew 
    to
    0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --pre-hook "service nginx stop" --post-hook "service nginx start"
    

    logs (short):

    -- in /var/log/syslog
    Jun 10 00:14:25 localhost systemd[1]: Starting Certbot...
    Jun 10 00:14:38 localhost certbot[22222]: nginx: [error] open() "/run/nginx.pid$
    Jun 10 00:14:41 localhost certbot[22222]: Hook command "nginx" returned error c$
    Jun 10 00:14:41 localhost certbot[22222]: Error output from nginx:
    Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
    Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
    Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
    Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
    Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
    Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
    Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
    Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
    Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
    Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
    Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] still could not bind()
    Jun 10 00:14:41 localhost systemd[1]: Started Certbot.
    
    
    -- in /var/log/nginx/error.log
    2018/06/10 00:14:27 [notice] 22233#22233: signal process started
    2018/06/10 00:14:31 [notice] 22237#22237: signal process started
    2018/06/10 00:14:33 [notice] 22240#22240: signal process started
    2018/06/10 00:14:34 [notice] 22245#22245: signal process started
    2018/06/10 00:14:38 [notice] 22255#22255: signal process started
    2018/06/10 00:14:38 [error] 22255#22255: open() "/run/nginx.pid" failed (2: No $
    2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
    2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
    2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
    2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
    2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
    2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
    2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
    2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
    2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
    2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
    2018/06/10 00:14:39 [emerg] 22261#22261: still could not bind()
    
    0 讨论(0)
提交回复
热议问题