web-dev-qa-db-ja.com

nginxにHTTPボディコンテンツのURIを書き換えさせるにはどうすればよいですか?

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

14
Steve HHH

これまでに見つけた唯一の解決策は HttpSubsModule です( github page も参照してください)。

このモジュールは公式のNginxソースの一部ではないため、このモジュールを使用するには、おそらく自分でNginxをビルドする必要があります。

5
Rasjid Wilcox