Apache“随机”丢失VirtualHostconfiguration

我希望有人能够解释这个问题,我没有在别处解决的运气。 我们正在运行一个用于基本负载平衡的Apache(2.2.15)服务器,但最终使用ProxyPass指令到我们的各种后端服务器。

问题似乎是Apache“随机”不再具有正确加载的特定虚拟主机文件(或者更可能是我们在不知不觉中造成这种情况),并且我们正在看到来自Apache的404s或代理错误。

在error_log中没有错误,我也确认httpd -S仍然显示虚拟主机加载,但好奇的是,如果我发出一个httpd重新加载,它又开始工作。 该服务器有〜2GB的可用内存。

我们在我们的httpd.conf文件中包含了vhosts / active指令,并且在那个目录中有符号链接到实际的vhostconfiguration文件(不要相信这是相关的但是想要透露),而且我们正在加载大约40个不同的vhost CONFIGS。 下面是一个例子,从一个特别的发生相对比较顺利(也可能值得一提的是,似乎只有像这样的确定的虚拟主机文件):

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

来自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> 

感谢您的帮助/想法,因为在这个特定问题上search让我无处可寻!

我看到2个可能的原因:

  1. 当Apache 2.2尝试加载ProxyPass url后面的内容并且它不响应时,有时使用此ProxyPass的整个虚拟主机将停止工作。 使用默认的Apache 2.2testingDebian Squeeze和Wheezy。

  2. 您的服务器也可能会遇到DNSparsing器的随机问题,这会影响ServerName到vhost的映射。

你可以尝试testing,如果它是第一个原因,通过加载10.10.0.77:80 IP而不是ServerName。