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


58

Estou tentando configurar uma VM executando 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 -tulpnmostra que nada está usando a porta 80. O que poderia estar causando isso?


você está iniciando como root? Por padrão, somente o root pode abrir portas abaixo de 1024.
— onse

Sim, eu sou. Ele estava em execução em um momento em que eu tinha apenas um host virtual configurado, então removi o outro host virtual para tentar solucionar o problema, mas também não tive sorte.
— quer

Você hospeda algo em execução na porta 80 e está no modo de ponte para o hóspede? Eu não sei o que ele faria isso, mas parece provável
— RobotHumans

Você já tentou as sugestões de Iniciando o apache falha (não foi possível vincular ao endereço 0.0.0.0:80) ? E inclua também a saída de grep -ri listen /etc/apachee sudo netstat -ntlp | grep 80.
— precisa saber é o seguinte

2
grep -ri listen /etc/apache2saídas: etc / apache2 / httpd.conf: Ouça 80 /etc/apache2/httpd.conf: Ouça 443 /etc/apache2/ports.conf: Ouça 80 /etc/apache2/httpd.conf: Ouça 443 / etc / apache2 / httpd.conf: Listen 443 sudo netstat -ntlp | grep 80não produz nada.
— Artilheiro Barnes

Respostas:


38

Verifique se você não está declarando Listen 80duas vezes em arquivos .conf.

Por exemplo, você pode incluí-lo na ports.confpousada sites-enabled/www.conf.

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

Mantenha Listen 80em apenas um lugar.


19

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

Experimentar netstat -ltnp | grep :80

Isso retornaria algo como

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

Então corra

sudo kill -9 1047

Onde 1047 é o pid do programa em execução na porta 80. Você pode substituir o pid obtido de netstat


uau! ... e aqui estou 48 horas depois de enviar um ticket para o inmotionhosting e aguardar uma resposta. obrigado
— Amjo 24/05

2
O que isto significa? Não estou recebendo um PID ou nome. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
— Aaron Franke

@AaronFranke Você pode tentar executar este comando no Terminal depois de maximizar a janela?
— Platypus anônimo

2
@AaronFranke executa-o com o sudo. Você pode não ter permissão para visualizar.
— Advait S

13

Quando tive esse problema, o meu Apache não pôde ser inicializado porque eu tinha um site SSL que exigia que uma senha fosse inserida para o certificado.

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

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

Segui as instruções nesta postagem para criar um arquivo de senha SSL que não exigia que uma senha fosse inserida. Então service apache2 startfuncionou bem, e o Apache começou corretamente após uma reinicialização.


11

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

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

Aqui está o erro que recebi:

el@titan:~$ 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 isso? Confira:

el@titan:~$ 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á:

el@titan:~$ 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á sendo executado, eu estava tentando iniciar o apache2 uma segunda vez na mesma porta.

O que me confunde é que servicerelata que o apache2 NÃO está sendo executado:

el@titan:~$ sudo service apache2 status
Apache2 is NOT running.

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

root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.

Portanto, o Ubuntu parece estar tendo problemas para gerenciar o apache2 na inicialização. Hora de parar o apache2:

root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running

Uma grande pista! Você tenta parar o apache2 e ele perdeu a identificação do processo! Portanto, o Ubuntu não pode parar o apache2 porque ele não sabe onde está!

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

Então, como consertar isso?

Consegui consertar isso analisando a pssaída do comando. Observe que o pscomando nos diz 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 iniciando o apache2 e depois trava. Então, teremos que dizer para não fazer isso.

Então vá dar uma olhada nisso /etc/rc2.d/S91apache2.

el@titan:/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 impedir que o apache2 seja iniciado na inicialização:

root@titan:~# 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

Reinicie o computador para garantir que o apache2 não seja iniciado e travado. Tudo bem. Agora você poderia colocar o apache2 de volta do jeito que estava, mas isso faria com que falhasse novamente.

root@titan:~$ 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 páginas novamente. Parece haver alguns erros sérios no apache2 / Ubuntu 12.10 que fazem com que o apache2 seja iniciado e travado. Esta é uma solução alternativa, suponho que a correção seja obter versões mais recentes do apache2 e Ubuntu e esperar o melhor.


Gostei de ler e usar suas dicas! Obrigado por escrever 'do jeito que você depurou'!
— Ram

10

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

sudo service nginx stop
sudo service apache2 start

Muito obrigado! Depois de todas as tentativas, isso funcionou para mim.
— Vivek

4

Eu descobri isso. Eu tinha comandos Listen 80 duplicados nos meus 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 havia sido alterado. Examinando esse log de erros, notei que o diretório do mime.typesarquivo de configuração estava incorreto no meu httpd.confarquivo. Atualizei esse parâmetro e o servidor foi iniciado corretamente.


3
Eu também tinha duplicado Listen 80comandos, tanto o meu httpd.confeports.conf
— Artilheiro Barnes

2

Isso significa que a porta 80 já está sendo usada, altere a porta do 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.


netstat -antp | grep 80não produz nada também.
— quer

você pode copiar e colar sua saída do netstat -antp | grep 80?
— Dylan Dodds

Não há literalmente nenhuma saída.
— Artilheiro Barnes

hmm isso é estranho, tente mudar a porta para 81 se não, não é a porta que está sendo bloqueada há um outro erro que você pode verificar erros apache2 em /var/log/apache2/error.log
— Dylan Dodds

2

Apenas uma dica para quem talvez esteja executando o VirtualBox com redes NAT. Eu descobri que ter uma regra NAT entre meu convidado e host havia se configurado, ligando a porta


2

Não apenas menções duplicadas de

Listen 80

mas também mencione isso além de Listen 80

Include ports.conf
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.