これは、nginxリバースプロキシ302をrootではなくURIサブフォルダーにリダイレクトする方法に関する以前の質問の続きです。
rewrite
およびproxy_pass
ディレクティブを使用して、外部リクエストをhttps://domain.com/my/web/app/
にある内部LANサーバーのようなURLにプロキシするnginxプロキシサーバーがありますhttps://10.0.0.22/
。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パスの間の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
。
なぜこれが起こっているのかは理解できますが、リクエストだけでなくコンテンツを動的にプロキシする方法があれば素晴らしいと思います。HTMLコンテンツに埋め込まれたURIも変換するためにnginxを取得する方法はありますか?プロキシサーバーを通過するHTMLコンテンツを動的に解析および更新できますか?