他の方法では解決できなかったこの問題について、誰かが解明してくれることを期待しています。私たちは、基本的な負荷分散に使用される Apache (2.2.15) サーバーを実行していますが、最終的にはさまざまなバックエンド サーバーに ProxyPass ディレクティブを使用しています。
問題は、Apache が特定の仮想ホスト ファイルを「ランダムに」適切にロードしなくなった (または、おそらく、私たちが知らないうちにこれを引き起こしている) ことであり、Apache から 404 またはプロキシ エラーが表示されることです。
error_log にはエラーはなく、httpd -S で vhost がロードされたことがまだ表示されていることも確認しましたが、興味深いのは、httpd reload を発行すると、再び動作し始めることです。サーバーには約 2 GB の空きメモリがあります。
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
考えられる原因は 2 つあります。
Apache 2.2 が ProxyPass URL の背後にあるコンテンツを読み込もうとして応答しない場合、この ProxyPass を使用している仮想ホスト全体が動作を停止することがあります。デフォルトの Apache 2.2 を使用して Debian Squeeze および Wheezy でテスト済み。
サーバーでは DNS リゾルバーに関するランダムな問題が発生している可能性があり、それが ServerName から vhost へのマッピングに影響します。
これが最初の原因である場合は、ServerName ではなく IP で 10.10.0.77:80 をロードしてテストしてみてください。