これは nginxリバースプロキシ302をルートではなくURIサブフォルダーにリダイレクトする の方法に関する私の以前の質問の続きです。
rewrite
およびproxy_pass
ディレクティブを使用してhttps://domain.com/my/web/app/
などのURLへの外部リクエストをhttps://10.0.0.22/
の内部LANサーバーにプロキシするnginxプロキシサーバーがあります。翻訳をASCII UMLで表すための私の試みは次のとおりです。
.-------------. .------------------.
| Nginx proxy | | Local web server |
| (domain.com) | | (10.0.0.22) |
'-------------' '------------------'
| |
| |
GET https://domain.com/my/web/app/ ----------->| |
|---------------->| GET /
| |
|<----------------| 302 redirect /login.php
302 redirect /my/web/app/login.php <-----------| |
| |
GET https://domain.com/my/web/app/login.php -->| |
|---------------->| GET /login.php
| |
|<----------------| 200
HTML body content (images, CSS, links) <-------|
Nginx構成ファイルの実際のロケーションブロックは次のとおりです。
location ^~ /my/web/app/
{
proxy_buffering off;
rewrite /my/web/app/(.*) /$1 break;
proxy_pass https://10.0.0.22/;
proxy_redirect default;
}
HTTPリクエストとレスポンスの内部および外部URIパス間のURI変換に最適ですが、HTMLコンテンツ(ボディ画像、CSS、スクリプト)のURIは変換されません。
たとえば、/ images/logo.pngのようなURIを使用してHTML応答に埋め込まれた相対パスを持つ画像は、Webクライアントに返され、https://domain.com/images/logo.png
ではなくhttps://domain.com/my/web/app/images/logo.png
として解釈されます。
なぜこれが起こっているのかは理解できますが、コンテンツだけでなくリクエストも動的にプロキシする方法があったらすばらしいと思います。 nginxがHTMLコンテンツに埋め込まれたURIも変換する方法はありますか?プロキシサーバーを通過するHTMLコンテンツを動的に解析および更新することは可能ですか?
これまでに見つけた唯一の解決策は HttpSubsModule です( github page も参照してください)。
このモジュールは公式のNginxソースの一部ではないため、このモジュールを使用するには、おそらく自分でNginxをビルドする必要があります。