Reverse-Proxy

Apache“隨機”失去 VirtualHost 配置

  • June 15, 2015

我希望有人能夠闡明這個我在其他地方沒有解決的問題。我們正在執行一個用於基本負載平衡的 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. 當 Apache 2.2 嘗試載入 ProxyPass url 後面的內容並且它沒有響應時,有時使用此 ProxyPass 的整個虛擬主機會停止工作。使用預設 Apache 2.2 在 Debian Squeeze 和 Wheezy 上進行測試。
  2. 您的伺服器可能還會遇到 DNS 解析器的隨機問題,這會影響 ServerName 到 vhost 的映射。

如果是第一個原因,您可以嘗試通過 IP 而不是 ServerName 載入 10.10.0.77:80 來測試。

引用自:https://serverfault.com/questions/699200