web-dev-qa-db-ja.com

httpd mod_proxy_balancerを使用した「URLに有効なプロトコルハンドラはありません」

通常はコンテンツ管理システムによって提供されるリソースの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は確実に有効になります。

これは私が見逃しているかなり単純なものだと確信していますが、それを理解することができないようです。どんな助けでも大歓迎です。

6

facepalm

ProxyPassディレクティブの末尾にスラッシュがないことがわかりました。

ProxyPass "/site/" "balancer://cms"

になるはずだった:

ProxyPass "/site/" "balancer://cms/"

(終了引用符の前のスラッシュに注意してください。)

文字通りすべてを修正しました.

この質問を削除して、「単純な誤植」として閉じたい場合は、喜んで回答しますが、ここではそのままにしておきます。この回答に対してp票を獲得した場合、このメモを削除し、同じ間違いを犯す可能性のあるすべての人のための公共サービスと見なします。

11

私の場合、proxy_ajpモジュール。

a2enmod proxy proxy_http proxy_ajp 
5
kujiy

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サーバーを再起動しました。

1
Yogesh Devi