[解決済み] NGINXのプロキシレスポンスでURLを書き換える方法
質問
私は mod_proxy_html で Apache を使用しており、NGINX で同様のことを実現しようとしています。 具体的な使用例は、ルート コンテキストにあるサーバー上のポート 8080 で Tomcat で実行されている管理 UI があるということです。
http://localhost:8080/
私はポート80でこれを表示する必要がありますが、私はこのホスト上で実行されているNGINXサーバ上の他のコンテキストを持っているので、でこれを試してアクセスしたいと思います。
http://localhost:80/admin/
以下の超簡単なサーバーブロックでいけるかと思ったのですが、なかなかそうはいきません。
server {
listen 80;
server_name screenly.local.akana.com;
location /admin/ {
proxy_pass http://localhost:8080/;
}
}
問題は、返されたコンテンツ (html) にスクリプトとスタイル情報への URL が含まれており、これらはすべてルートコンテキストでアクセスされるため、これらの URL を / の代わりに /admin/ で始まるように書き換える必要があることです。
NGINX でこれを行うにはどうすればよいですか。
どのように解決するのですか?
まず最初に のドキュメントを読んでください。 を注意深く、そして完全に読んでください。
上流サーバに渡される URI は、URI とともに "proxy_pass" ディレクティブが使用されているかどうかで決まります。proxy_passディレクティブの末尾にスラッシュがある場合は、URIが存在し、それが
/
. スラッシュがない場合は、URIがないことを意味します。
URIを含むProxy_pass :
location /some_dir/ {
proxy_pass http://some_server/;
}
上記で、以下のようなプロキシがあります。
http:// your_server/some_dir/ some_subdir/some_file ->
http:// some_server/ some_subdir/some_file
基本的には
/some_dir/
に置き換えられます。
/
からリクエストパスを変更するために
/some_dir/some_subdir/some_file
から
/some_subdir/some_file
.
URIのないProxy_pass :
location /some_dir/ {
proxy_pass http://some_server;
}
2番目の(末尾のスラッシュがない)場合:プロキシはこのようになります。
http:// your_server /some_dir/some_subdir/some_file ->
http:// some_server /some_dir/some_subdir/some_file
基本的に、オリジナルのリクエストパスは変更されずにそのまま渡されます。
ですから、あなたの場合、望みのものを得るためには、末尾のスラッシュを削除すればよいようです。
注意事項
自動的な書き換えは、proxy_pass で変数を使用しない場合のみ機能することに注意してください。変数を使用する場合は、自分で書き換えを行う必要があります。
location /some_dir/ {
rewrite /some_dir/(.*) /$1 break;
proxy_pass $upstream_server;
}
書き換えがうまくいかないケースは他にもあるので、ドキュメントを読むことは必須です。
編集
あなたの質問をもう一度読むと、あなたがhtml出力を編集したいだけだということを見逃していたかもしれないようです。
そのためには sub_filter ディレクティブを使います。次のようなものです。
location /admin/ {
proxy_pass http://localhost:8080/;
sub_filter "http://your_server/" "http://your_server/admin/";
sub_filter_once off;
}
基本的には、置き換えたい文字列と置き換え文字列の
関連
-
[解決済み】Raspberry Piサーバーに対して小規模なDDoS攻撃を実行する【終了しました
-
[解決済み] バックグラウンドでリクエストするようにnginxを設定する
-
Nginxのエラー処理方法:0.0.0.0:80へのbind()に失敗する
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Node.js + Nginx - 今度は何?
-
[解決済み] (13: Permission denied) 上流:[nginx]に接続中。
-
[解決済み】Kubernetes サービス 外部 ip 保留
-
[解決済み] React-routerとnginx
-
[解決済み] nginxです。[server_names_hash_bucket_size を大きくする必要があります。
-
[解決済み] Docker Networking - nginx: [emerg] ホストがアップストリームで見つかりません
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] nginxのエラー "conflicting server name "を無視する [終了しました]。
-
Gitはいくつかのバグフィックスを行いました。マージされていないファイルがあるため、Pullができない。
-
Nginxエージェントのリソース: net::ERR_NAME_NOT_RESOLVED の読み込みに失敗しました。
-
NginxのRequest Entity Too Largeの解決法
-
Nginxのエラー処理方法:0.0.0.0:80へのbind()に失敗する
-
チャンクベンダーが大きすぎるため、最初の画面の読み込みが遅すぎるフロントエンド・プロジェクトの最適化
-
[解決済み] NGINXのproxy_passまたはproxy_redirect
-
[解決済み] Nginx 同一IPで異なるドメイン
-
[解決済み] Nginxで単一のURLをリダイレクトするには?
-
[解決済み] nginxでproxy_passを使用しているときに応答ヘッダを追加するには?