Apache falha ao iniciar, endereço já em uso (mas não realmente)

45

Estou tentando configurar uma VM com o Ubuntu 12.04. Eu tenho dois hosts virtuais configurados usando a porta 80, mas o Apache não será iniciado.

Eu recebo este erro: (98) Address already in use: make_sock: could not bind to address 0.0.0.0:80

A saída de netstat -tulpn mostra que nada está usando a porta 80. O que poderia estar causando isso?

    
por Gunner Barnes 02.04.2013 / 16:59

9 respostas

2

Eu descobri isso. Eu tinha comandos duplicados Listen 80 no meu httpd.conf e ports.conf

Além disso, ao copiar o arquivo de configuração para o servidor que está sendo virtualizado, deixei de notar que o diretório do log de erros tinha sido alterado. Examinando esse log de erros, notei que o diretório do arquivo mime.types config estava incorreto no arquivo httpd.conf . Atualizei esse parâmetro e o servidor foi iniciado corretamente.

    
por Gunner Barnes 04.04.2013 / 16:52
27

Certifique-se de não declarar Listen 80 duas vezes em arquivos .conf.

Por exemplo, você pode ter ambos em ports.conf e inn sites-enabled/www.conf .

Para descobrir, use: grep -ri listen /etc/apache2

Guarde Listen 80 em apenas um lugar.

    
por ravi 20.08.2014 / 19:09
12

Quando tive este problema, descobri que o meu Apache não pôde ser iniciado na inicialização porque eu tinha um site SSL que exigia a inserção de uma senha para o certificado.

Uma boa maneira de saber se esse é o seu caso é executar um ps -ef | grep apache : se isso retornar processos que parecem com /bin/bash /usr/share/apache2/ask-for-passphrase mysite.com:443 RSA , ele está aguardando que uma senha seja inserida em um terminal que você nunca verá .

Primeiro, eu matei o processo suspenso (enviar um kill -HUP para o ID do processo / usr / sbin / apache2 deve ser suficiente para matar os outros também, mas faça outro ps -ef | grep apache para ter certeza). / p>

Depois, segui as instruções nesta postagem para criar um arquivo de senha SSL que não exija uma senha para ser inserido. Em seguida, um service apache2 start funcionou bem e o Apache começou corretamente após a reinicialização.

    
por Brendan Quinn 17.12.2013 / 03:37
12

Respondendo à maneira como resolvi esse problema. Pode ser útil para alguém no futuro.

Experimente netstat -ltnp | grep :80

Isso retornaria algo como

  

tcp6 0 0 ::: 80 ::: * ESCUTE 1047 / apache2

Em seguida, execute

sudo kill -9 1047

Onde 1047 é o pid do programa rodando na porta 80. Você pode substituir o pid que você obteve de netstat

    
por Anonymous Platypus 15.01.2016 / 08:06
9

Eu recebi este erro em uma nova instalação ao iniciar o apache2 Ubuntu 12.10.

É um bug no apache2. Fica pendurado no fundo. Aqui está o meu passo a passo para onde os erros podem estar no software.

Aqui está o erro que recebi:

[email protected]:~$ sudo service apache2 start
 * Starting web server apache2               
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
                                                                         [fail]

Endereço já em uso? O que poderia estar usando? Confira:

[email protected]:~$ grep -ri listen /etc/apache2
/etc/apache2/apache2.conf:#   supposed to determine listening ports for incoming connections, and which
/etc/apache2/apache2.conf:# Include list of ports to listen on and which to use for name based vhosts
/etc/apache2/ports.conf:Listen 80
/etc/apache2/ports.conf:    Listen 443
/etc/apache2/ports.conf:    Listen 443

Isso significa que o apache2 está impedindo que o apache2 seja iniciado. Bizarro. Isso confirmará:

[email protected]:~$ ps -ef | grep apache2
root      1146   954  0 15:51 ?        00:00:00 /bin/sh /etc/rc2.d/S91apache2 start
root      1172  1146  0 15:51 ?        00:00:00 /bin/sh /usr/sbin/apache2ctl start
root      1181  1172  0 15:51 ?        00:00:00 /usr/sbin/apache2 -k start
root      1193  1181  0 15:51 ?        00:00:00 /bin/bash /usr/share/apache2/ask-for-passphrase 127.0.1.1:443 RSA
el        5439  5326  0 16:23 pts/2    00:00:00 grep --color=auto apache2

Sim, neste caso o apache2 está em execução, eu estava tentando iniciar o apache2 uma segunda vez na mesma porta.

O que me confunde é que service informa que o apache2 NÃO está em execução:

[email protected]:~$ sudo service apache2 status
Apache2 is NOT running.

E quando você consulta o apache2ctl para seu status, ele trava.

[email protected]:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.

Então, o Ubuntu parece estar tendo problemas para gerenciar o apache2 no boot. Hora de parar o apache2:

[email protected]:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running

Uma grande pista! Você tenta parar o apache2 e ele perdeu o ID do processo! Então o Ubuntu não pode parar o apache2 porque ele não sabe onde está!

Você poderia pensar que uma reinicialização iria consertá-lo, mas isso não acontece porque o apache2 inicia na inicialização e trava. O processo de inicialização normal do apache2 não está funcionando corretamente.

Então, como consertar isso?

Consegui corrigir isso analisando a saída do comando ps . Observe que o comando ps nos informa que esse processo foi iniciado por "/etc/rc2.d/S91apache2 start".

Esse é o programa ofensivo que precisa de um chute rápido.

/etc/rc2.d/S91apache2 é o link simbólico usado para iniciar o apache2 quando o computador é iniciado. Por alguma razão, parece estar começando o apache2 e depois trava. Então teremos que dizer para não fazer isso.

Então, dê uma olhada nesse /etc/rc2.d/S91apache2 .

[email protected]:/etc/rc2.d$ ls -l
lrwxrwxrwx   1 root root    17 Nov  7 21:45 S91apache2 -> ../init.d/apache2*

É um link simbólico que não queremos que esteja lá. Faça isso para evitar que o apache2 inicie na inicialização:

[email protected]:~# sudo update-rc.d -f apache2 remove
 Removing any system startup links for /etc/init.d/apache2 ...
   /etc/rc0.d/K09apache2
   /etc/rc1.d/K09apache2
   /etc/rc2.d/S91apache2
   /etc/rc3.d/S91apache2
   /etc/rc4.d/S91apache2
   /etc/rc5.d/S91apache2
   /etc/rc6.d/K09apache2

Reinicialize o computador para ter certeza de que o apache2 não inicia e trava. Tudo bem. Agora você poderia colocar o apache2 de volta do jeito que era, mas isso faria com que ele falhasse novamente.

[email protected]:~$ sudo update-rc.d apache2 defaults     //(don't do this)
 Adding system startup for /etc/init.d/apache2 ...
   /etc/rc0.d/K20apache2 -> ../init.d/apache2
   /etc/rc1.d/K20apache2 -> ../init.d/apache2
   /etc/rc6.d/K20apache2 -> ../init.d/apache2
   /etc/rc2.d/S20apache2 -> ../init.d/apache2
   /etc/rc3.d/S20apache2 -> ../init.d/apache2
   /etc/rc4.d/S20apache2 -> ../init.d/apache2
   /etc/rc5.d/S20apache2 -> ../init.d/apache2

Em vez disso, inicie o apache2 assim:

sudo service apache2 start

E o apache2 está de volta e servindo as páginas novamente. Parece haver alguns bugs sérios com o apache2 / Ubuntu 12.10 que fazem com que o apache2 seja iniciado e interrompido. Esta é uma solução alternativa, suponho que a correção seja obter versões mais recentes do apache2 e do Ubuntu e esperar o melhor.

    
por Eric Leschinski 16.11.2013 / 00:31
3

Eu tinha um servidor Nginx ouvindo no meu servidor AWS EC2, acho que ele foi configurado quando eu estava criando o EC2, portanto, eu estava recebendo endereço já em uso erro. Então parei o serviço e iniciei o serviço Apache2:

sudo service nginx stop
sudo service apache2 start
    
por Dodger 08.03.2017 / 00:59
1

Isso significa que sua porta 80 já está sendo usada, ou altere a porta para o apache2 (que eu não recomendo) editando:

/etc/apache2/ports.conf

Ou feche o aplicativo em execução na porta 80:

netstat -antp | grep 80

Para encontrar o que está sendo executado na porta 80.

    
por Dylan Dodds 02.04.2013 / 21:45
1

Apenas uma dica para qualquer pessoa, que talvez esteja executando o VirtualBox com redes NAT. Eu encontrei, tendo uma regra de NAT entre meu convidado e host tinha se configurado, ligando a porta

    
por mschr 19.02.2014 / 11:16
0

Não apenas duplicar as menções de

Listen 80

mas também mencionar isso além de ouvir 80

Include ports.conf
    
por Scott Stensland 30.06.2015 / 17:45