nginxリバースプロキシによって返されるHTMLページを変更する


16

インターネットからイントラネット内にあるサードパーティアプリケーションにアクセスするためのリバースプロキシをセットアップしています。このアプリケーションがURL上にあるとしましょう:

https://internalserver:8080/ (イントラネットからのみ到達可能)

プロキシがオンになっています:

https://proxyserver/ (世界のどこからでも到達可能)

プロキシはnginxによって管理されており、正常に機能しています。ユーザーがアクセスするhttps://proxyserver/ と、でアプリのコンテンツを取得しhttps://internalserver:8080/ます。

問題は、アプリケーションがHTML応答に絶対URLを書き込んでいるため、ユーザーが新しいページへのリンクをクリックすると、ブラウザがのhttps://internalserver:8080/somepage 代わりに内部名でページを検索しようとすること です https://proxyserver/somepage

これはプログラムのバグであることは知っていますが、プログラムを変更することはできません。

応答をインターセプトし、URLを変更し、nginxで最終クライアントに送信(変更)できますか?それとも別のツールで?

編集:私は前にこの質問を見ましたが、私の場合はより具体的です、引用された質問は一般的な変更を求めます。その場合、fast-cgiアドホックプログラムが最適なソリューションであり、私が望んでいるのは、より一般的なシナリオのためのより具体的なソリューションです(と思います)。fast-cgiプログラムは機能しますが、私はこのシナリオの最も簡単で、おそらくより強力な、現実世界でのソリューションを探しています。


回答:



3

http://nginx.org/en/docs/http/ngx_http_sub_module.html

ngx_http_sub_moduleモジュールは、指定された文字列を別の文字列に置き換えることにより応答を変更するフィルターです。

このモジュールはデフォルトではビルドされません。--with-http_sub_module構成パラメーターで有効にする必要があります。

設定例

sub_filter      </head>
    '</head><script language="javascript" src="$script"></script>';
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.