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:
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.
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.