HTTPボディコンテンツでnginxがURIを書き換える方法は?


13

これは、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コンテンツを動的に解析および更新できますか?


2
解決策を見つけましたか?はいの場合、回答として投稿できますか?
ホイヘンス

回答:


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.