私は、パブリック、ビジネス、ワークスペース(すべてApacheを実行)の3つのレイヤーの多層アプリケーションを持っています。クライアント リクエストはパブリック サーバーに到達し、リクエストは処理され、「処理」を行うビジネス サーバーにディスパッチされます。応答はパブリック サーバーに返され、そこで応答が処理されてクライアントに渡されます。/rstudio というリクエストを公開サーバーに送り、ワークスペース サーバーへのリバース プロキシをインターンするビジネスにディスパッチするというシナリオがあります。ここには2つのキャッチがあります:
- ワークスペース サーバーはリクエストごとに異なります
- ワークスペース サーバー (Rstudio) で実行されているアプリケーションは、GWT を使用し、ルート URL でリソース (静的リソース js、css など、および RPC coms) を参照します。すべてのアプリケーション内リダイレクトもドメインで発生します。
ビジネス サーバーから、アプリケーション サーバーから Rstudio サーバーへのリバース プロキシをセットアップしました。
<Proxy *>
Allow from localhost
</Proxy>
ProxyPass /rstudio/ http://business_server/
ProxyPassReverse /rstudio/ http://business_server/
RedirectMatch permanent ^/rstudio$ /rstudio/
これは正常に機能します (参照https://support.rstudio.com/hc/en-us/articles/200552326-Running-with-a-Proxy )。動的ワークスペースサーバーを処理するには、次のことができますが、ProxyPassReverse は値の表現をサポートしていないため、このアプローチでは喜びがありません。
ProxyPassMatch ^/rstudio/(.*)$ http://$1
ProxyPassReverse ^/rstudio/(.*)$ http://$1
RedirectMatch permanent ^/rstudio$ /rstudio/
mod_rewrite ルール (以下) で同じことを試しましたが、ProxyPassReverse がなく、GWT Rstudio でのドメイン リダイレクトのために、これは機能しません。ProxyPassReverse を追加すると問題は解決しますが、動的ワークスペース サーバーの問題に対処するための値の部分に式がありません。
RewriteRule "^/rstudio/(.*)" "http://$1" [P]
以下は、LocationMatch と mod_headers を使用してこの問題を解決する 3 番目の方法です。
<LocationMatch ^/rstudio/(.+)>
ProxyPassMatch http://$1
Header edit Location ^http:// "http://%{SERVER_NAME}e/rstudio/"
</LocationMatch>
しかし、ヘッダー ディレクティブの値は環境変数に対して評価されないため (ここでは後方参照のみが機能します)、これも喜ばしいことではありません。business_server をコーディングした場合、リバース プロキシを機能させることができますが、これは次のとおりです。
<LocationMatch ^/rstudio/(.+)>
ProxyPassMatch http://$1
Header edit Location ^http:// "http://private_server/rstudio/"
</LocationMatch>
質問 1: apache conf でサーバー DNS をハードコーディングせずに、この問題を解決するためのより良い方法があるかどうか疑問に思っていましたか?
質問 2:ハード コーディングされたサーバー DNS を使用すると、リバース プロキシは機能します (パッチはありますが機能します) が、ルートでのリソース参照の GWT 問題に遭遇し、リクエストのディスパッチが完全に機能しません。サインイン ページが表示されますが、リソースが見つかりません。
それを処理するためのより良い方法があるかどうか疑問に思っていましたか?
以下は、ブラウザからのログの例です。
Navigated to https://public_server/rstudio
rworkspaces:43 GET https://public_server/rstudio.css
rworkspaces:108 GET https://public_server/js/encrypt.min.js
rworkspaces:167 GET https://public_server/images/rstudio.png 404 (Not Found)
rworkspaces:218 GET https://public_server/images/buttonLeft.png 404 (Not Found)
rworkspaces:218 GET https://public_server/images/buttonTile.png 404 (Not Found)
rworkspaces:218 GET https://public_server/images/buttonRight.png 404 (Not Found)