Nginx proxy_redirect の使用方法の詳細な説明

Nginx proxy_redirect の使用方法の詳細な説明

今日、Apache の nginx リバース プロキシを実行していたときに、ちょっとした問題に遭遇しました。バックエンドの Apache が使用するポートが 8080 であることが判明しました。リバース プロキシを通過後、Wireshark を使用してパケットをキャプチャしたところ、location ヘッダー フィールドの値が http://192.168.1.154:8080/wuman/ であることがわかりました。これがクライアントに返される場合、間違いなく許可されていません。見た目が不自然ですし、Apache の特定の情報も公開されます。

したがって、ここでは、nginx の proxy_redirect を使用して、プロキシ サーバーによって返される応答ヘッダー内の location ヘッダー フィールドと refresh ヘッダー フィールドの値の変更を指定します。

以下はnginxの設定ドキュメントからの抜粋です。

サーバー{
 聞く 80;
 サーバー名 www.boke.com;
 位置 / {
  プロキシパス http://192.168.1.154:8080;
  proxy_redirect オフ;
 }
 }

この時点で、curlを使用して結果を表示します。

[root@localhost nginx]# curl -I http://www.boke.com/wuman
HTTP/1.1 301 永久に移動
サーバー: nginx
日付: 2015 年 12 月 24 日 (木) 12:02:00 GMT
コンテンツタイプ: text/html; 文字セット=iso-8859-1
接続: キープアライブ
場所: http://192.168.1.154:8080/wuman/

ここで、location はバックエンド サーバーの実際のアドレスとポートを含む応答ヘッダー情報です。これは実際の行では許可されていないため、ここでは proxy_redirect を介してプロキシ サーバーの応答ヘッダーの location フィールドを変更し、クライアントに返すことを計画しています。

サーバー{
 聞く 80;
 サーバー名 www.boke.com;
 位置 / {
  プロキシパス http://192.168.1.154:8080;
  プロキシリダイレクト http://192.168.1.154:8080/wuman/ http://www.boke.com/wuman/;
 }

サーバー{
 聞く 80;
 サーバー名 www.boke.com;
 位置 / {
  プロキシパス http://192.168.1.154:8080;
  プロキシリダイレクト ~^http://192.168.1.154:8080(.*) http://www.boke.com$1;
 }

次にcurlは返された結果をチェックします

[root@localhost nginx]# curl -I http://www.boke.com/wuman
HTTP/1.1 301 永久に移動
サーバー: nginx
日付: 2015 年 12 月 24 日 (木) 12:08:34 GMT
コンテンツタイプ: text/html; 文字セット=iso-8859-1
接続: キープアライブ
場所: http://www.boke.com/wuman/

この時点で、場所を確認することが私たちが望む結果になりました。 この時点で、301の置き換えにより新しいページにリダイレクトされました。

ソース:

プロキシリダイレクト

構文: proxy_redirect [ デフォルト|オフ|リダイレクト置換 ]

デフォルト値: proxy_redirect default

使用フィールド: http、サーバー、場所

プロキシされたサーバーから送信された応答ヘッダーの「Location」フィールドと「Refresh」フィールドを変更する必要がある場合は、このコマンドを使用して設定できます。

プロキシ サーバーによって返される Location フィールドが http://localhost:8000/two/some/uri/ であると仮定します。

この指示:

proxy_redirect http://localhost:8000/two/ http://frontend/one/;

Location フィールドを http://frontend/one/some/uri/ に書き換えます。

置換フィールドにサーバー名を入力する必要はありません。

proxy_redirect http://localhost:8000/two/ /;

これにより、80 以外のポートからの場合でも、サーバーのベース名とポートが使用されます。

「default」パラメータが使用される場合、location および proxy_pass パラメータの設定に基づいて決定されます。

たとえば、次の 2 つの構成は同等です。

場所 / 1 / {
 proxy_pass http://upstream:port/two/; 
 proxy_redirect デフォルト;
}
場所 / 1 / {
 proxy_pass http://upstream:port/two/; 
 proxy_redirect http://upstream:port/two/ /one/;
}

ディレクティブで使用できる変数はいくつかあります。

proxy_redirect http://localhost:8000/ http://$host:$server_port/;

この指示は繰り返されることがあります:

proxy_redirect デフォルト;
proxy_redirect http://localhost:8000//; proxy_redirect; /;

パラメータ off は、このフィールド内のすべての proxy_redirect ディレクティブを無効にします。

proxy_redirect オフ;
proxy_redirect デフォルト;
proxy_redirect http://localhost:8000/ /; proxy_redirect ; /;

プロキシされたサーバーによって発行された相対リダイレクトにホスト名を追加するには、このディレクティブを使用します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Nginx でグレースケールリリースを実装する 3 つの方法の概要
  • Asp.Net Core の公開と展開の詳細な説明 (MacOS + Linux + Nginx)
  • nginx がリリースしたばかりの JavaScript 機能、nginScript の簡単な分析
  • Nginxのアクセスボリューム制御の詳細な説明
  • nginx を使用したプロキシ サーバーの設定
  • Docker コンテナのデプロイの試み - マルチコンテナ通信 (node+mongoDB+nginx)
  • 指定したディレクトリに nginx をインストールする方法の例
  • Linux システムで IPv6 をサポートするように Nginx を設定する方法
  • VueとNginxをベースにしたフロントエンドとバックエンドのデプロイメントチュートリアルの詳細な説明
  • nginx を使用してカナリアリリースをシミュレートする方法

<<:  Linux での MySQL 5.7.18 yum のアンインストールからインストールまでのプロセスの図

>>:  jQuery ツリービュー ツリー構造アプリケーション

ブログ    

推薦する

MySQLインデックスの詳細な分析

序文インデックスの選択はオプティマイザ段階の作業であることはわかっていますが、オプティマイザは万能で...

CSS の境界線を通して三角形と矢印を実装するサンプルコード

1. CSS ボックスモデルボックスには、余白、境界線、パディング、コンテンツが含まれます境界線の接...

Javascript Echarts 空気質マップ効果の詳細な説明

まず、空気質データと地図データを組み合わせる必要があります。マップデータには属性名があるさまざまな都...

VMware14 に CentOS 7 をインストールするグラフィック チュートリアル

CentOS の紹介CentOS は、Red Hat Linux が提供する無料で利用できるソースコ...

JS 矢印関数に適さないシナリオは何ですか?

目次概要オブジェクトにメソッドを定義するオブジェクトリテラルオブジェクトプロトタイプ動的コンテキスト...

Dockerコンテナが停止できない問題の解決方法

解決策は次のとおりです。 1. コンテナを強制削除する docker rm -f ジェンキンス2. ...

JavaScript 状態コンテナ Redux の詳細な説明

目次1. Reduxを選ぶ理由2. Reduxデータフロー3つの原則4. Reduxソースコード分析...

Flutterを使用して移動可能なスタックウィジェット機能を作成する

この投稿では、キャンバスとドラッグ可能なノード インターフェースを使用するデスクトップおよび Web...

パーティショニングを使用して数十億のデータに対する MySQL データ処理を最適化する方法

MySQL が数千万のデータをクエリする場合、ほとんどのクエリ最適化の問題はインデックスを通じて解決...

CMD で MySQL データベースを操作するときに中国語の文字化けが発生する問題の解決方法

Baiduで検索しました。 。 chcp コマンドを使用して、cmd の文字エンコーディングを 65...

HTML テーブル マークアップ チュートリアル (14): テーブル ヘッダー

<br />HTML 言語では、タグを使用してテーブルにタイトルを自動的に追加できます。...

CSSでイメージマッピングを実装する方法

1. はじめにイメージマップを使用すると、画像の領域をホットスポットとして指定できます。この領域にマ...

CSS 8 目を引く HOVER 効果のサンプル コード

1. エフェクトHTMLを送信する <div id="送信ボタン">...

Angular のパフォーマンス最適化: サードパーティ コンポーネントと遅延読み込みテクノロジー

目次概要環境の準備プロジェクトのパフォーマンスに影響を与える要因遅延読み込みとは何ですか?プロジェク...

MySQL トランザクションの概念と使用法の詳細な説明

目次情事の概念取引の状態取引の役割取引の特徴トランザクション構文トランザクション対応ストレージエンジ...