O Apache2 não é executado na porta IPv4 tcp

23

Eu preciso executar o Apache2 no meu servidor Debian 7. Mas ele é executado apenas na porta tcpv6, não na porta tcpv4. Eu o instalei com o apt-get install. Se eu for para localhost ou 127.0.0.1 ou o endereço IPv4 do meu servidor, ele não exibirá nenhum site.

Meu /etc/apache2/ports.conf:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
 # If you add NameVirtualHost *:443 here, you will also have to change
 # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
 # to <VirtualHost *:443>
 # Server Name Indication for SSL named virtual hosts is currently not
 # supported by MSIE on Windows XP.
 Listen 443
</IfModule>

<IfModule mod_gnutls.c>
 Listen 443
</IfModule>

netstat -plntu:

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3558/sshd       
tcp        0      0 0.0.0.0:3466            0.0.0.0:*               LISTEN      2820/mysqld     
tcp6       0      0 :::80                   :::*                    LISTEN      2097/apache2    
tcp6       0      0 :::22                   :::*                    LISTEN      3558/sshd       
Mato
fonte
3
Tente mudar Listen 80para Listen 0.0.0.0:80. Você pode consultar a documentação httpd.apache.org/docs/2.2/bind.html para obter mais informações.
pradeepchhetri
@pradeepchhetri Obrigado. Funciona. Posso acessar o endereço do meu servidor a partir de qualquer computador e ele mostra o conteúdo (endereço IP / some.php), mas não acesso ao some.php deste servidor. Eu tentei localhost, 127.0.0.1 e IP externo: número da porta que funciona em outro PC ... Mas não funciona.
Mato
1
Você pode postar a saída de sudo iptables -nvLe sudo sestatus? Eu acho que você tem algum firewall local que está impedindo.
pradeepchhetri
@ Matheus, você precisa esclarecer: quando ele mostra conteúdo, mas não está funcionando, você quer dizer que ele está mostrando o PHP bruto em vez de executá-lo? Nesse caso, você precisa habilitar o módulo PHP. Eu acho que a2enmod php5deveria fazer isso por você.
robbat2
3
As máquinas Linux normalmente ocultam um soquete IPv4 + IPv6 de pilha dupla atrás da escuta no endereço IPv6 ::.
Pavel Šimerda

Respostas:

32

O fato de o netstat mostrar apenas o tcp6 aqui não é o problema. Se você não especificar um endereço para escutar, o apache escutará todas as famílias de endereços suportadas usando um soquete (por motivos de design, o sshd usa um soquete exclusivo por família de endereços e endereços, aparecendo, portanto, duas vezes na saída do netstat).

Aqui está um dos meus sistemas, mostrando o apache com apenas soquetes tcp6 e ainda funcionando bem via IPv4 e IPv6.

woodpecker ~ # netstat -anp |grep apache
tcp6       0      0 :::80    :::*       LISTEN      1637/apache2        
tcp6       0      0 :::443   :::*       LISTEN      1637/apache2        
woodpecker ~ # wget http://127.0.0.1/ -O /dev/null
--2013-12-25 08:52:38--  http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45 [text/html]
...
# wget http://[::1]/ -O /dev/null
--2013-12-25 08:53:00--  http://[::1]/
Connecting to [::1]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45 [text/html]
...

Se você executar wget http://127.0.0.1/ -O -no servidor, o que acontece? Ele se conecta com sucesso? Ele retorna o HTML bruto do seu site conforme o esperado?

robbat2
fonte
obrigado, agora funciona, mas eu tenho apenas um pequeno problema ainda. Eu escrevi sobre isso acima.
Mato
Você sabe que o maluco é que essa sempre foi minha experiência. Naturalmente. Como programador de rede, eu sei bem sobre INADDR_ANYe IN6ADDR_ANY_INIT. Mas hoje eu vi um comportamento realmente estranho. Nenhuma alteração no firewall, nenhum Apache muda, mas, de alguma forma, os hosts remotos só podem se conectar via IPv6 - o que é um problema para quem ainda não tem IPv6. Certamente é algo que vou resolver, mas você está absolutamente correto (embora a invocação que você fizer não seja aplicável no meu caso, infelizmente).
Pryftan
1
  1. 127.0.0.1 é local apenas para uma máquina; você precisa estar no próprio servidor em um navegador para usar o endereço IP / loopback local;

  2. Você pode ter um firewall bloqueando as portas;

  3. Verifique se o apache está funcionando e funcionando corretamente, verifique os logs de erros;

  4. Verifique todas as suas configurações do apache;

  5. Você está hospedando no diretório raiz www ou no diretório public_html do usuário?

  6. Verifique o proprietário e as permissões.


Quase o ano de 2019 (Bem-vindo ao futuro):

  • Por padrão, a maior parte do mundo usa o ipv6 e, se falhar, recorre ao ipv4;

  • Agora temos túneis ipv4 sobre ipv6 e vice-versa;

  • A maioria dos sistemas operacionais, programas, cliente e servidor geralmente faz isso agora;

  • Bem-vindo ao mundo de não mais NATs e ter que depender agora de firewall / filtros diretamente no seu dispositivo;

  • Eu recomendaria tentar manter todos os seus sistemas em pilha dupla, suportando o ipv4 e o ipv6 ao mesmo tempo; assim, quando o interruptor mágico acontecer, você continuará funcionando. Meu sistema operacional, rede e até meu ISP são de pilha dupla, ponta a ponta. Eu poderia desligar o ipv4 completamente se quisesse, mas o que há por aí que pode não funcionar mais se não existirem túneis no ipv6 a partir do ipv4.

cdmlb
fonte
Eu estava pensando em dar-lhe um +1 ou não - desde que você usou a palavra "pasta". Mas a idéia de não desativar o IPv6 é tão importante - como garantir que o seu firewall esteja configurado corretamente para o IPv6. Eu sei que muitas pessoas pensam que o NAT é segurança, mas no máximo isso é uma ilusão (também é um problema para muitos serviços). Isso e seus outros pontos são todos válidos, portanto, marque +1.
Pryftan
Me desculpe, eu quis dizer diretório :-P
cdmlb 16/11
Bem, por isso eu daria mais um +1, se pudesse. Estou bastante surpreso e também humilhado por você mudar isso. Eu sou purista, acho que tudo o que posso dizer. Me confunde e me irrita que uma certa empresa costumava corrigi-lo e depois o alterou para 'pasta'. Bem, talvez seja para torná-lo mais "amigável" para as pessoas, mas parece ter sido aceito como a palavra certa para outras pessoas que deveriam conhecer melhor. Eu não sei. Enfim, toda a sua lista é algo que eu realmente gostaria que mais pessoas entendessem! Infelizmente muitos não ...
Pryftan 17/11
-1

*

wget http://127.0.0.1/ -O / dev / null

* representa a conexão com o servidor local sem manipular IPv4 ou IPv6; se você alterar o host local (ou 127.0.0.1) para o endereço IP IPv4 real deste servidor, não poderá fazer nada porque a conexão foi negada.

Tente descrever seu IP nos arquivos de configuração: NameVirtualHost: 80 Listen: 80

Hóspede
fonte