Apache“随机”丢失VirtualHost配置

Apache“随机”丢失VirtualHost配置

我希望有人能帮我解决这个问题,因为我在其他地方都没能解决。我们正在运行一个 Apache (2.2.15) 服务器,用于基本的负载平衡,但最终使用 ProxyPass 指令来处理我们的各个后端服务器。

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

error_log 中没有错误,我还确认 httpd -S 仍然显示 vhost 已加载,但奇怪的是,如果我发出 httpd reload,它会再次开始工作。服务器有约 2GB 的可用内存。

我们的 httpd.conf 文件中有一个 Include vhosts/active 指令,并且该目录中有指向实际 vhost 配置文件的符号链接(不相信这有关联但想披露),我们正在加载大约 40 个不同的 vhost 配置。下面是一个相对频繁发生的特定示例(可能还值得一提的是,它似乎只发生在某些 vhost 文件上,例如这个):

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

谢谢您的帮助/想法,因为搜索这个特定问题我没有找到任何结果!

答案1

我认为有两个可能的原因:

  1. 当 Apache 2.2 尝试在 ProxyPass url 后面加载内容并且它没有响应时,有时使用此 ProxyPass 的整个 vhost 会停止工作。在默认 Apache 2.2 的 Debian Squeeze 和 Wheezy 上进行了测试。

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

您可以尝试通过 IP 而不是 ServerName 加载 10.10.0.77:80 来测试是否是第一个原因。

相关内容