nginx error_log reporta “bind () para 0.0.0.0:80 falhou (48: Endereço já em uso)”

4

Eu instalei recentemente o nginx e o PHP-FPM via MacPorts no OS X 10.9 Mavericks e, embora funcione, meu principal error_log diz continuamente que a porta 80 está em uso.

2013/10/25 11:27:36 [emerg] 4510#0: bind() to 0.0.0.0:80 failed (48: Address already in use)
2013/10/25 11:27:36 [notice] 4510#0: try again to bind() after 500ms
2013/10/25 11:27:36 [emerg] 4510#0: bind() to 0.0.0.0:80 failed (48: Address already in use)
2013/10/25 11:27:36 [notice] 4510#0: try again to bind() after 500ms
2013/10/25 11:27:36 [emerg] 4510#0: bind() to 0.0.0.0:80 failed (48: Address already in use)
2013/10/25 11:27:36 [notice] 4510#0: try again to bind() after 500ms
2013/10/25 11:27:36 [emerg] 4510#0: bind() to 0.0.0.0:80 failed (48: Address already in use)
2013/10/25 11:27:36 [notice] 4510#0: try again to bind() after 500ms
2013/10/25 11:27:36 [emerg] 4510#0: bind() to 0.0.0.0:80 failed (48: Address already in use)
2013/10/25 11:27:36 [notice] 4510#0: try again to bind() after 500ms
2013/10/25 11:27:36 [emerg] 4510#0: still could not bind()

Eu não verifiquei mais nada, como o Apache está usando a porta 80.

    
por JCobb 25.10.2013 / 21:09

2 respostas

5

Ao procurar uma solução, vários locais, como este diz que a solução é remover / comentar a linha da diretiva listen no host padrão.

#listen       80 default_server;

Isso não mudou nada para mim, e o principal error_log continuou a ser preenchido.

Finalmente, alguém nos fóruns do nginx resolve um problema semelhante recomendado a saída de

ps ax -o pid,ppid,%cpu,vsz,wchan,command|egrep '(nginx|PID)'

Que para mim foi

  PID  PPID  %CPU      VSZ WCHAN  COMMAND
 4963     1   0.0  2504128 -      /opt/local/bin/daemondo --label=nginx --start-cmd /opt/local/sbin/nginx ; --pid=fileauto --pidfile /opt/local/var/run/nginx/nginx.pid
 4967     1   0.0  2475388 -      nginx: master process /opt/local/sbin/nginx
 4969  4967   0.0  2476412 -      nginx: worker process
 5024  1538   0.0  2432784 -      egrep (nginx|PID)
 1969  1874   0.0  2432772 -      tail -F /opt/local/etc/nginx/logs/error.log

Eu notei na primeira linha que o local do pidfile estava sendo definido no comando de inicialização do MacPorts --pidfile /opt/local/var/run/nginx/nginx.pid e que ele era diferente do local que eu havia especificado no meu nginx.conf . Alterei a entrada pid de volta para corresponder ao que o comando de início estava especificando:

pid        /opt/local/var/run/nginx/nginx.pid;

Depois de reiniciar o nginx e seguir o error_log ( tail -F /opt/local/etc/nginx/logs/error.log ), percebi que o problema foi corrigido.

Resumindo: se você estiver usando a versão MacPorts do nginx, provavelmente não desejará alterar a localização do pidfile.

Como um aparte, se você olhar para outras páginas tentando resolver esse problema, especificamente aquelas em que o problema foi corrigido removendo a diretiva listen ou onde algo como o Apache também estava usando a porta 80, você notará que logs dizem

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

e o meu teve

[emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)

Eu suspeito que a diferença entre o erro 98 e o erro 48 é a diferença, mas não consegui encontrar nenhuma descrição dos vários erros.

    
por 25.10.2013 / 21:09
1

Eu tive um problema bem parecido com a instalação do Nginx no Homebrew. Eu tinha uma instalação mais antiga do Nginx rodando como um processo launchd mesmo que eu tenha desinstalado algum tempo antes (talvez eu não tenhalauchctl unload ou o Homebrew não tenha desvinculado isso na desinstalação). De qualquer forma, o Nginx não apareceria em brew list nem netstat poderia encontrar o processo usando a porta. Eu só consegui detectá-lo com lsof :

sudo lsof -i 4tcp:8080

O processo estava em execução e usando a porta, mas não consegui encontrá-la em lugar nenhum (eu até tentei sudo find / -name nginx -type d procurar o disco inteiro para diretórios chamados nginx, mas nenhum sucesso). Depois de bater na cabeça contra a mesa, pensei em verificar se o Activity Monitor mostrava o caminho para abrir arquivos para o processo, e o faz.

Abra o Activity Monitor, encontre o processo, clique duas vezes nele e ele abrirá outra janela com os detalhes do processo:

Embora o processo e seus arquivos estivessem listados, os arquivos não existiam no disco. Eu apenas tive que forçar a saída dos processos Nginx zumbis que estavam rodando e então a nova instalação do Nginx funcionou como esperado.

Não tenho certeza, mas se bem me lembro, também tentei ps aux | grep nginx e ele não apareceu, mas vale a pena:

sudo ps aux | grep nginx
    
por 13.05.2016 / 23:35

Tags