Servidor Apache2 solicitando ITSELF em atividade HTTP aleatória

4

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.

    
por Jeff 01.10.2009 / 00:12

4 respostas

1

As solicitações são conexões simuladas internas que o Apache usa para afetar o status de processos filhos. Eles são inofensivos e a razão pela qual você está vendo seu comportamento preciso é devido a alguma estranheza.

O processo interno não é capaz de falar SSL e é facilmente confundido pela ordem das diretivas Listen . Se Listen 443 for definido após Listen 80 , ele tentará enviar uma solicitação não SSL para o link , que atingirá seu vhost SSL padrão e falhar, resultando no código de status HTTP 400.

Tanto quanto eu saiba, a única solução é reordenar suas diretivas Listen ao contrário.

    
por 01.10.2009 / 17:57
0

Enquanto eu vejo que o seu último bloco vhost é para a porta 443, não vejo que esteja realmente configurado para SSL. Você precisa ter "SSLEnable On" para começar. Talvez essa seja a razão pela qual você está vendo o erro "solicitação incorreta" ...?

    
por 01.10.2009 / 17:38
0

Por favor, note que você não pode NameVirtualHost uma conexão SSL!

link

    
por 01.10.2009 / 17:58
0

na verdade, você pode usar o NameVirtualHost + SSL, usando certificados SAN (nome alternativo do assunto).

    
por 30.07.2010 / 21:11

Tags