it-swarm-pt.com

nginx - nginx: [emerg] bind () para [::]: 80 falhou (98: endereço já em uso)

De repente eu estou recebendo o erro nginx abaixo

 * Restarting nginx
 * Stopping nginx nginx
   ...done.
 * Starting nginx nginx
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
   ...done.
   ...done.

Se eu correr 

lsof -i :80 or Sudo fuser -k 80/tcp 

Eu não recebo nada. Nada na porta 80

Então eu corro o abaixo:

Sudo netstat -pan | grep ":80"
tcp        0      0 127.0.0.1:8070          0.0.0.0:*               LISTEN      15056/uwsgi     
tcp        0      0 10.170.35.97:39567      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39564      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39584      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39566      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39571      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39580      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39562      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39582      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39586      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39575      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39579      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39560      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39587      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39591      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39589      10.158.58.13:8080       TIME_WAIT   - 

Estou perplexo.

Como depurar?

Eu estou usando o uwsgi com um 

passagem de proxy na porta 8070. O uwsgi está em execução. Nginx não é. Eu estou usando o Ubuntu 12.4

Abaixo estão as partes relevantes do meu arquivo conf nginx

upstream uwsgi_frontend {
          server 127.0.0.1:8070;
        }
server {
listen 80;
        server_name 127.0.0.1;
        location = /favicon.ico {
                  log_not_found off;
                }



                location / {
                       include uwsgi_params;
                       uwsgi_buffering off;

                       uwsgi_pass 127.0.0.1:8070;
                 }
        }

Aqui está como eu instalo o nginx no Ubuntu 12.04

nginx=stable;add-apt-repository ppa:nginx/$nginx;
apt-get update
apt get install nginx-full
183
Tampa

[::]:80 é um endereço ipv6.

Este erro pode ser causado se você tiver uma configuração nginx que esteja escutando na porta 80 e também na porta [::]:80.

Eu tinha o seguinte no meu arquivo padrão de sites disponíveis:

listen 80;
listen [::]:80 default_server;

Você pode consertar isso adicionando ipv6only=on ao [::]:80 desta forma:

listen 80;
listen [::]:80 ipv6only=on default_server;

Para mais informações, veja:

http://forum.linode.com/viewtopic.php?t=8580

http://wiki.nginx.org/HttpCoreModule#listen

184
Nathan

eu corri o problema executando Sudo apachectl stop - o Apache estava rodando em segundo plano e impedia que o nginx fosse iniciado na porta desejada. 

No Ubuntu, execute Sudo /etc/init.d/Apache2 stop

172
lfender6445

Eu encontrei o problema que nunca tive antes.

Eu só tive que deletar /etc/nginx/sites-available/default. Então funcionou.

Meu conf estava em /etc/nginx/default.

32
Tampa

Eu também estava recebendo o mesmo erro. Nginx: [emerg] bind () para [::]: 80 falhou (98: Endereço já em uso) E quando eu digitei o localhost no navegador, então eu estava ficando 

Funciona!

Essa é a página da web padrão pra esse servidor.

O software do servidor da web está em execução, mas nenhum conteúdo foi adicionado ainda. Em vez da página de boas vindas do nginx, o Apache2 está sendo executado na mesma porta,

  1. encontre o arquivo ports.conf do Apache2 

    Sudo /etc/Apache2/ports.conf

  2. mude a porta outra então 80, eu a faço como 70 

  3. salve o arquivo 

  4. reinicie seu sistema

ele funcionará para você também, se você digitar o localhost no navegador, você receberá a página de boas-vindas do nginx

20
SAURABH

Meu caso é diferente, eu tive que matar o Nginx para reiniciá-lo.

Ao invés de

Sudo systemctl restart nginx

Eu tive que usar:

Sudo pkill -f nginx
Sudo systemctl start nginx
16
datdinhquoc

Eu tive o mesmo problema em letsencrypt (certbot) e nginx, 

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

este erro ainda não tem solução 

então, um mudou um cron para renovar (colocando uma recarga depois de renovar) (usando sugestão de 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 (curtos):

-- 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()
4
Wagner Pereira

tente fazer este comando

Sudo fuser -k 443/tcp
service nginx restart
3
jack

Meu problema era que eu tinha diretivas de escuta sobrepostas. Eu consegui descobrir diretivas sobrepostas executando

grep -r listen /etc/nginx/*

Dois arquivos estavam escutando na mesma porta:

/etc/nginx/conf.d/default.conf:           listen 80;  
/etc/nginx/sites-enabled/default.conf:    listen 80;
1
Black

Eu conheci problema similar. o log é como abaixo 

2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: still could not bind()
2018/10/31 12:54:23 [alert] 127997#127997: unlink() "/run/nginx.pid" failed (2: No such file or directory)
2018/10/31 22:40:48 [info] 36948#36948: Using 32768KiB of shared memory for Push module in /etc/nginx/nginx.conf:68
2018/10/31 22:50:40 [emerg] 37638#37638: duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/default:18
2018/10/31 22:51:33 [info] 37787#37787: Using 32768KiB of shared memory for Push module in /etc/nginx/nginx.conf:68

O último [emerg] mostra que duplicate listen options for [::]:80 significa que há mais de um arquivo de bloco nginx contendo [::]:80

Minha solução é remover uma das configurações de [::]:80 

P.S. você provavelmente tem um arquivo de bloco padrão. Meu conselho é manter este arquivo como servidor padrão para a porta 80. e remover [::]:80 de outros arquivos de bloco

1
Oscar Zhou1989

Primeiro altere a porta de escuta do Apache 80 para 8080 Apache em /etc/Apache2/ports.conf incluem

Listen 1.2.3.4:80 to 1.2.3.4:8080
Sudo service Apache2 restart 

ou 

Sudo service httpd restart    // in case of centos

em seguida, adicione nginx como servidor proxy reverso que escutará a porta do Apache

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
}

Após as alterações, reinicie o servidor nginx

Sudo service nginx restart

Agora todo o tráfego será tratado pelo servidor nginx e enviará todos os pedidos dinâmicos para o Apache e o conteúdo estático será servido pelo servidor nginx.

Para configuração avançada como cache:

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

0
Kamal Kumar

Se o problema persistir depois de tentar qualquer uma das soluções acima, reinicie o servidor uma vez. Funcionou para mim :)

0
Deejay

Eu tinha vários arquivos * .save (despejos de emergência do nano) de diferentes arquivos de configuração do NGINX em meu diretório available de sites. Depois que eu deletei esses arquivos .save, o NGINX reiniciou bem. Presumi que eram inofensivos, pois não havia links simbólicos correspondentes, mas acho que estava errado.

0
Allen

No meu caso, um dos serviços, Apache ou Apache2 ou Nginx, já estava rodando e, devido a isso, não consegui iniciar o outro serviço.

0
Rishikesh Chandra

Para seguir as respostas @ lfender6445 e @SAURABH - 

Meu problema também foi o fato de que, após a atualização para o Vagrant 2.2.2, o Apache2 estava rodando como um servidor web quando o guest inicializou. No passado eu só tinha o nginx como servidor web.

vagrant ssh na caixa e execute o seguinte comando para desabilitar o Apache2 da inicialização sempre que a caixa de convidado inicializar:

Sudo update-rc.d -f Apache2 remove

Saia ssh, vagrant halt, vagrant up. Problema resolvido.

0
Lance Cleveland