Estou no final da minha corda e posso realmente usar algumas idéias / sugestões recentes.
O problema:
Durante a execução do Apache 2.2.3 no Debian Etch, meu servidor Apache envia frequentemente uma solicitação para ITSELF (para o host virtual LAST no arquivo de configuração) na atividade HTTP de entrada aleatória direcionada para QUALQUER um dos 15 hosts virtuais que configurei .
Eu até mesmo espelhei meu servidor ao vivo para uma caixa virtual local e obtive exatamente o mesmo comportamento.
Os logs (trunacados):
[30/Sep/2009:16:44:04 -0400] (Remote-host:) 127.0.0.1 (400) (Request:) "GET /"
[30/Sep/2009:16:44:05 -0400] (Remote-host:) 127.0.0.1 (400) (Request:) "GET /"
[30/Sep/2009:16:47:07 -0400] (Remote-host:) 127.0.0.1 (400) (Request:) "GET /"
[30/Sep/2009:16:47:12 -0400] (Remote-host:) 127.0.0.1 (400) (Request:) "GET /"
O motivo pelo qual sei que é o último host virtual que recebe a solicitação estranha é o erro 400-Bad request
acima. Acontece que meu último vhost está habilitado para SSL e o Apache está enviando para si mesmo um pedido não-SSL para /.
Minha configuração do vhost:
NameVirtualHost *:80
NameVirtualHost *:443
<VirtualHost *:80>
ServerName one.example.com
</VirtualHost>
<VirtualHost *:80>
ServerName two.example.com
</VirtualHost>
<VirtualHost *:80>
ServerName three.example.com
</VirtualHost>
<VirtualHost *:443>
ServerName secure.example.com
</VirtualHost>
Portanto, quando você envia uma solicitação HTTP para one.example.com , (às vezes) o arquivo de log para secure.example.com é exibido conforme mostrado acima. ESQUISITO! Eu corri mod_dumpio
e mod_log_forensic
, mas não ganhei muita percepção deles.
O que no mundo poderia estar causando isso?
O que eu sei:
- É aleatório e não importa qual vhost recebe a solicitação HTTP.
- Quando eu comento o último vhost, o problema desaparece.
- Minhas configurações de Apache, PHP e MySQL são muito comuns.
- Eu só posso reproduzir o estranho auto-pedido ao solicitar arquivos de imagem PHP + em vez de arquivos .txt, .xml, .html, etc.
Editar (a correção):
No caso de alguém mais se deparar com isso, aqui está o que eu fiz para remediar a situação.
Altere a ordem das minhas diretivas do Apache Listen:
Listen 192.168.0.199:443
Listen 192.168.0.199:80
Em seguida, adicione uma regra de reescrita ao meu PRIMEIRO host virtual:
RewriteCond %{REMOTE_ADDR} ^(192\.168\.0\.199|127\.0\.0\.1)$
RewriteCond %{HTTP_USER_AGENT} internal\ dummy\ connection [NC]
RewriteRule .* /apache-internal-dummy-connection/ [R=302,L]
A regra de reescrita simplesmente diz: "se o endereço IP dos usuários remotos é o mesmo do meu servidor web E o agente dos usuários remotos (navegador) contém as palavras 'conexão simulada interna', redirecione (302) qualquer solicitação para < href="http://www.example.com/apache-internal-dummy-connection/"> link ".
Eu escolhi redirecionar para um URI inexistente para manter a carga baixa no meu servidor.
Usou tail -f
no meu primeiro arquivo de log vhost e está funcionando bem em ambos os servidores.
Espero que isso ajude alguém.