通常はコンテンツ管理システムによって提供されるリソースのlocalhost静的コピーを使用して、リバースプロキシサーバーのフェイルオーバーを設定しようとしています。私はwget
を使用して、フェイルオーバーの目的で動的サイトの静的コピーを取得しました。
私は ApacheのProxyPassディレクティブのフォールバックの場所? に似た設定を使用しようとしましたが、それはかなり簡単ですが、タイトルにエラーが表示されます。
これが私の(無害化された)プロキシ設定です:
DocumentRoot /var/www/www.example.com/htdocs
ProxyRequests Off
ProxyPreserveHost On
ProxyPass "/site/" "balancer://cms"
ProxyPassReverse "/site/" "balancer://cms"
ProxyPassReverse "/site/" "http://ip-10-1-1-229.ec2.internal/site/"
<Proxy "balancer://cms">
#BalancerMember "http://ip-10-1-1-229.ec2.internal/site/" loadfactor=1
# For localhost services, a backup of the CMS's site
BalancerMember "http://127.0.0.1/site-backup/www.example.com/site/" loadfactor=10 status=+H
</Proxy>
<Directory "/var/www/www.example.com/htdocs/site-backup">
Order allow,deny
Allow from all
Options Indexes FollowSymlinks
DirectoryIndex index.html
</Directory>
(ここでは、実際のCMSシステムに行くバランサーメンバーをコメントアウトしました-その部分は問題なく動作しているため、ローカルの静的コピーをテストできます。)
index.html
に/var/www/www.example.com/site-backup/www.example.com/
ファイルがあり、http://www.example.com/site/
をヒットしようとするとロードされますが、ページの他のリソース(CSS、画像など)はロードされません。彼らは次のようなページにURLを持っています:
この場所にfoo.png
というファイルがあります。
/var/www/www.example.com/htdocs/site-backup/www.example.com/site/sites/default/files/foo.png
しかし、その画像がブラウザーによって読み込まれると、500 Internal Server Error
応答が返され、httpdのエラーログに次のように表示されます。
[proxy:warn] [pid 3182:tid 2838395712] [client 71.127.40.115:38208] AH01144:URL /site/site/sites/default/files/foo.pngに対して有効なプロトコルハンドラーがありませんでした。 mod_proxyのDSOバージョンを使用している場合は、プロキシサブモジュールがLoadModuleを使用した構成に含まれていることを確認してください。参照元: http://test.example.com/site/
エラーメッセージに表示されたURLのURLに余分な/site/
が含まれていることに気付いたので、/site/
とwget
を含むディレクトリから/site/
を含むURLスペースを提供しようとしているため、URLが2倍になったと思いましたおそらく今は完璧ではないので、/var/www/www.example.com/site-backups/www.example.com/site/site/sites
->
/var/www.www.example.com/site-backups/www.example.com/site/sites
からシンボリックリンクを作成しました。これは、URLの混乱による愚かさを修正したはずです。
しかし、それは何も修正していないようです。 mod_proxy
はまだプロトコルについて不平を言っています。 CMSへの通常のProxyPass
ディレクティブが期待どおりに機能しているため(有効になっている場合)、mod_proxy_http
は確実に有効になります。
これは私が見逃しているかなり単純なものだと確信していますが、それを理解することができないようです。どんな助けでも大歓迎です。
facepalm
ProxyPass
ディレクティブの末尾にスラッシュがないことがわかりました。
ProxyPass "/site/" "balancer://cms"
になるはずだった:
ProxyPass "/site/" "balancer://cms/"
(終了引用符の前のスラッシュに注意してください。)
文字通りすべてを修正しました.
この質問を削除して、「単純な誤植」として閉じたい場合は、喜んで回答しますが、ここではそのままにしておきます。この回答に対してp票を獲得した場合、このメモを削除し、同じ間違いを犯す可能性のあるすべての人のための公共サービスと見なします。
私の場合、proxy_ajp
モジュール。
a2enmod proxy proxy_http proxy_ajp
Kujiyと同じようにmod_ajp
。
私はApache4を使用しています。
ログに次のようなメッセージが表示されました。
No protocol handler was valid for the URL /jira.
If you are using a DSO version of mod_proxy,
make sure the proxy submodules are included in
the configuration using LoadModule
そのため、httpd.confに次の行を追加しました(コメントなしを意味します)。
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
保存し、Apacheサーバーを再起動しました。