Reverse-Proxy
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>
感謝您的幫助/想法,因為搜尋這個特定問題讓我無處可去!
我看到兩個可能的原因:
- 當 Apache 2.2 嘗試載入 ProxyPass url 後面的內容並且它沒有響應時,有時使用此 ProxyPass 的整個虛擬主機會停止工作。使用預設 Apache 2.2 在 Debian Squeeze 和 Wheezy 上進行測試。
- 您的伺服器可能還會遇到 DNS 解析器的隨機問題,這會影響 ServerName 到 vhost 的映射。
如果是第一個原因,您可以嘗試通過 IP 而不是 ServerName 載入 10.10.0.77:80 來測試。