Apache「隨機」遺失 VirtualHost 配置

Apache「隨機」遺失 VirtualHost 配置

我希望有人能夠闡明這個我在其他地方沒有運氣解決的問題。我們正在運行一個用於基本負載平衡的 Apache (2.2.15) 伺服器,但最終對我們的各種後端伺服器使用 ProxyPass 指令。

問題似乎是 Apache “隨機”不再正確加載特定的虛擬主機檔案(或者更可能的是,我們在不知不覺中導致了這種情況),並且我們看到來自 Apache 的 404 或代理錯誤。

error_log 中沒有錯誤,我還確認 httpd -S 仍然顯示已加載的虛擬主機,但奇怪的是,如果我發出 httpd 重新加載,它會再次開始工作。伺服器有 ~2GB 可用記憶體。

我們的httpd.conf 檔案中有一個Include vhosts/active 指令,並且在該目錄中是指向實際虛擬主機設定檔的符號連結(不要相信這是相關的,但想透露),並且我們正在加載大約40 個不同的虛擬主機配置。以下是一個相對頻繁發生的範例(也值得一提的是,它似乎只是像這樣的某些虛擬主機檔案):

<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 的整個虛擬主機機會停止運作。在 Debian Squeeze 和 Wheezy 上使用預設 Apache 2.2 進行了測試。

  2. 您的伺服器也可能遇到 DNS 解析器的隨機問題,這會影響 ServerName 到虛擬主機的對應。

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

相關內容