別のマシンで実行されている Rails3 アプリのリバース プロキシを処理する apache2 Web サーバーがあります。
セットアップは機能しますが、Web アプリケーション内で生成された URL は、mod_proxy_html の設定によって書き換えられません。
の「リバースプロキシシナリオ」まさに私がやろうとしていることなので、できる限りチュートリアルに完全に従いました。
提供された回答を適用または試してみましたここstackoverflowでは効果がありません。
「リバースプロキシシナリオ」によると、いくつかのモジュールをロードする必要があります。これらの指示はすべてhttpd.confファイルにあり、出力を確認すると、
apactectl -t -D DUMP_MODULES
予想されるすべてのモジュールがリスト内に表示されます。
リバース プロキシを実行する外部 Web サーバーは www.ourdomain.org にあり、Rails アプリは内部的には apphost.local で利用できます (サーバーは Mac OS X Server 10.6、Rails アプリ サーバーは Mac OS X 10.6)。
現在動作しているのは、次のようにリバース プロキシ経由で Web アプリケーションにアクセスすることです。
http://www.ourdomain.org/apphost/railsappname/controllername/action
しかし、JavaScript ファイル、CSS ファイル、その他のアセットはいずれも読み込まれず、Web アプリ内部のリンクは URL の apphost 部分が欠落した状態で出力されます。これは、書き換えルールが誤って構成されているかのようです (もちろん、私はその点に焦点を当てており、apphost から html を渡し、Apache サーバー経由で出力するプロセスで何かを追加または削除することはできないようです)。
たとえば、Web アプリから返される HTML 内のアクション リンクにマウスを移動すると、次のようになります。
http://www.ourdomain.org/railsappname/controllername/action
私の Apache ディレクティブは次のようになります。
LoadModule proxy_html_module /usr/libexec/apache2/mod_proxy_html.so
LoadModule xml2enc_module /usr/libexec/apache2/mod_xml2enc.so
ProxyHTMLLogVerbose On
LogLevel Debug
ProxyPass /apphost/ http://apphost.local/
<Location /apphost/>
SetOutputFilter INFLATE;proxy-html;DEFLATE
ProxyPassReverse /
ProxyHTMLExtended On
ProxyHTMLURLMap railsappname/ apphost/railsappname/
RequestHeader unset Accept-Encoding
</Location>
httpd.conf に変更を加えるたびに、正常であることを確認するために apachectl -t を必ず実行します。
私は Apache の専門家ではありませんが、私の指示に従うすべての指示は、ここで行っていることを無効にするものではないようです。しかし、私が試したどの指示も、Web アプリのリクエストで Apache サーバーにアクセスした後、ブラウザーに表示される URL を変更しないようです。
私が何を間違えたのか分からない場合でも、Apache が Web アプリから送られてくる HTML に対して何を実行しているかを把握できるようにする方法についてのアイデアをいただければ幸いです。ProxyHTMLLogVerbose On と LogLevel Debug が設定されていると理解しましたが、ログ ファイルには何も表示されません。
答え1
少し単純な答えかもしれませんが、私がこれまでに見たほとんどの (すべてではないにしても) ProxyHTMLURLMap ディレクティブには、一致/置換パターンの先頭に / があります。この構成のバリエーションを試しましたか?
ProxyHTMLURLMap /railsappname/ /apphost/railsappname/
それでも問題が解決しない場合は、実行している Apache のバージョンを教えてください。該当する場合は、モジュールのバージョンを教えてください。Apache 2.4 以降にのみバンドルされているため、Apache の古いバージョンの場合は、このモジュール (のいずれかのバージョン) を自分でインストールする必要があります。
代わりに、mod_substitute に切り替えることもできますが、mod_proxy_html よりも多くの設定が必要になります。
ある時点で、組み込みの設定が削除され、自分で追加する必要が生じました。http://apache.webthing.com/svn/apache/filters/proxy_html/proxy_html.confProxyHTMLLinks および ProxyHTMLEvents ディレクティブは、設定に追加する必要があるディレクティブです。