Apache perdendo configurações do VirtualHost "aleatoriamente"

Apache perdendo configurações do VirtualHost "aleatoriamente"

Espero que alguém possa lançar alguma luz sobre esse problema que não tive sorte em resolver em outro lugar. Estamos executando um servidor Apache (2.2.15) usado para balanceamento de carga básico, mas, em última análise, usando diretivas ProxyPass para nossos vários servidores back-end.

O problema parece ser que o Apache "aleatoriamente" não tem mais arquivos virtualhost específicos carregados corretamente (ou, mais provavelmente, estamos causando isso sem saber) e estamos vendo erros 404 ou de proxy do Apache.

Não há erros no error_log, também confirmei que o httpd -S ainda mostra o vhost carregado, mas o curioso é que se eu emitir um recarregamento do httpd, ele começa a funcionar novamente. O servidor tem aproximadamente 2 GB de memória livre.

Temos uma diretiva Incluir vhosts/active em nosso arquivo httpd.conf, e dentro desse diretório estão links simbólicos para os arquivos de configuração vhost reais (não acredite que isso esteja relacionado, mas queremos divulgar), e estamos carregando cerca de 40 vhosts diferentes configurações. Aqui está um exemplo em particular que acontece com relativa frequência (também pode valer a pena mencionar que parece haver apenas alguns arquivos vhost como este):

<VirtualHost 10.10.0.77:80>

    ServerName url.mysite.com
    ServerAlias url
    Options +FollowSymLinks
    ProxyPreserveHost On

    ProxyPass / http://hostname.internaldomain.local:8081/
    ProxyPassReverse / http://hostname.internaldomain.local:8081/

</VirtualHost>

<VirtualHost 10.10.0.77:443>
    ServerName url.mysite.com
    ServerAlias url
    RewriteEngine On
    SSLEngine on
    SSLProxyEngine on
    SSLProxyVerify none
    SSLCertificateFile /etc/httpd/conf/ssl/mycert.com.crt
    SSLCertificateKeyFile /etc/httpd/conf/ssl/mycert.key
    SSLCertificateChainFile /etc/httpd/conf/ssl/mycert_chain.crt
    Options +FollowSymLinks
    ProxyPreserveHost On

    ProxyPass / http://hostname.internaldomain.local:8081/
    ProxyPassReverse / http://hostname.internaldomain.local:8081/

</VirtualHost>

de httpd.conf:

SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1

Include vhosts/active/*.active
<Location /balancer-manager>
SetHandler balancer-manager

Order Deny,Allow
Deny from all
Allow from .mydomain.com
</Location>

<IfModule mod_headers.c>
RequestHeader unset Expect early
</IfModule>

Obrigado por sua ajuda/ideias, pois pesquisar sobre esse assunto específico não me levou a lugar nenhum!

Responder1

Vejo 2 causas possíveis:

  1. Quando o Apache 2.2 tenta carregar o conteúdo atrás do URL do ProxyPass e ele não responde, às vezes todo o vhost usando este ProxyPass para de funcionar. Testado no Debian Squeeze e Wheezy com Apache 2.2 padrão.

  2. Seu servidor também pode estar enfrentando problemas aleatórios com o resolvedor de DNS, que afetam o mapeamento de ServerName para vhost.

Você pode tentar testar, se for a primeira causa, carregando 10.10.0.77:80 por IP em vez de ServerName.

informação relacionada