Nginx の場所と proxy_pass パスの設定の問題の概要

Nginx の場所と proxy_pass パスの設定の問題の概要

この記事では、場所の一致が/で終わるかどうか、および proxy_pass の一致が/で終わるかどうかをテストし、テスト プロセス全体を完全に復元します。具体的な状況を理解するのに役立ちます。

1. Nginxロケーションの基本設定

1.1 Nginx 設定ファイル

アップストリームテスト1{
サーバー 127.0.0.1:8000;
}
アップストリームテスト2{
サーバー 127.0.0.1:8000;
}
サーバ{
	サーバー名 test.com;
	聞く 80;
        access_log /usr/local/openresty/nginx/logs/test.com_access.log 最新;
        error_log /usr/local/openresty/nginx/logs/test.com.log エラー;
        proxy_set_header ホスト $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 3秒;
        proxy_read_timeout 120秒;
        proxy_send_timeout 120秒;
        proxy_next_upstream エラー タイムアウト invalid_header http_404 http_502 http_504 http_500;
	
        場所 /user/ {
			proxy_set_header 接続 "";
        	プロキシ_http_バージョン 1.1;
			proxy_pass http://test1/;
		}
        位置 / {
                proxy_set_header 接続 "";
                プロキシ_http_バージョン 1.1;
                proxy_pass http://test2/;
        }
}

1.2 Pythonスクリプト

python2は実行できる

このスクリプトは、リクエストの内容を取得するために使用されます。 これはバックエンドとして機能し、proxy_pass プロキシのバックエンドになります。

#!/usr/bin/env python

SimpleHTTPServerをインポートする
SocketServerをインポートする

ポート = 8000

クラス GetHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        印刷(self.headers)
        自己.send_response(200, "")
    def do_POST(self):
        印刷(self.headers)
        content_length = self.headers.getheaders('content-length')
        length = int(content_length[0])、content_lengthの場合、それ以外の場合は0
        印刷(self.rfile.read(長さ))
        自己.send_response(200, "")

ハンドラ = GetHandler
httpd = SocketServer.TCPServer(("", ポート), ハンドラ)
httpd.serve_forever()

2. テスト

2.1、テスト場所

最後に/があり、proxy_pass の最後に/があります

nginxの設定は次のとおりです

 場所 /user/ {
			proxy_set_header 接続 "";
        	プロキシ_http_バージョン 1.1;
			プロキシパス http://test1/;
		}

リクエストURL

test.com/user/test.html

バックエンドコンテンツ

印刷される内容:

ホスト: test1
コンテンツの長さ: 0
ユーザーエージェント: PostmanRuntime/7.26.8
受け入れる: */*
郵便配達トークン: f2bfe770-4f44-4ee9-91c4-060f59dfb26c
受け入れエンコーディング: gzip、deflate、br


127.0.0.1 - - [2021年4月10日 16:54:26] 「POST /test.html HTTP/1.1」 200 -

結論: proxy_pass アドレスに/が追加された場合、 test.com/user/test.htmlを要求する実際のリクエストはhttp://test1/test.htmlになります。

2.2. テスト場所

proxy_pass の末尾に/があり、末尾に/がありません

nginxの設定は次のとおりです

 場所 /user/ {
			proxy_set_header 接続 "";
        	プロキシ_http_バージョン 1.1;
			プロキシパス http://test1;
		}

リクエストURL

test.com/user/test.html

バックエンドコンテンツ

印刷される内容:

ホスト: test1
コンテンツの長さ: 0
ユーザーエージェント: PostmanRuntime/7.26.8
受け入れる: */*
郵便配達トークン: e33d0a2c-1965-4152-b87c-94fca50f2899
受け入れエンコーディング: gzip、deflate、br

127.0.0.1 - - [2021年4月10日 16:57:18] 「POST /user/test.html HTTP/1.1」 200 -

結論: proxy_pass アドレスに/がない場合、 test.com/user/test.htmlへの実際のリクエストはhttp://test1/user/test.htmlになります。

2.3. 3つの場所をテストする

末尾の/なし、proxy_pass 末尾の/なし

nginxの設定は次のとおりです

 場所 / ユーザー {
			proxy_set_header 接続 "";
        	プロキシ_http_バージョン 1.1;
			プロキシパス http://test1;
		}

リクエストURL

test.com/user/test.html

バックエンドコンテンツ

印刷される内容:

ホスト: test1
コンテンツの長さ: 0
ユーザーエージェント: PostmanRuntime/7.26.8
受け入れる: */*
郵便配達トークン: 31cd33c6-4c95-41b5-a095-28cdc7113dcd
受け入れエンコーディング: gzip、deflate、br

127.0.0.1 - - [2021年4月10日 16:59:34] 「POST /user/test.html HTTP/1.1」 200 -

リクエストtest.com/user/test.html実際のリクエストはhttp://test1/user/test.htmlです

2.4、場所が追加されていません

最後の/と proxy_pass と最後の/

nginxの設定は次のとおりです

  場所 / ユーザー {
			proxy_set_header 接続 "";
        	プロキシ_http_バージョン 1.1;
			プロキシパス http://test1/;
		}

リクエストURL

test.com/user/test.html

バックエンドコンテンツ

印刷内容:

ホスト: test1
コンテンツの長さ: 0
ユーザーエージェント: PostmanRuntime/7.26.8
受け入れる: */*
郵便配達トークン: d0f4b83f-6482-41ba-8a01-c059eececc2d
受け入れエンコーディング: gzip、deflate、br

127.0.0.1 - - [2021年4月10日 17:00:21] 「POST //test.html HTTP/1.1」 200 -

リクエストtest.com/user/test.html実際のリクエストはhttp://test1//test.htmlです

2.5. ロケーション終了

パスの最後に/ proxy_passがあるので、最後に/を追加します

nginxの設定は次のとおりです

   場所 /user/ {
			proxy_set_header 接続 "";
        	プロキシ_http_バージョン 1.1;
			proxy_pass http://test1/haha/;
		}

リクエストURL

test.com/user/test.html

バックエンドコンテンツ

印刷される内容:

ホスト: test1
コンテンツの長さ: 0
ユーザーエージェント: PostmanRuntime/7.26.8
受け入れる: */*
郵便配達トークン: 6447cf0b-5988-4f96-81a4-2b621fe32604
受け入れエンコーディング: gzip、deflate、br

127.0.0.1 - - [2021年4月10日 17:03:27] 「POST /haha/test.html HTTP/1.1」 200 -

リクエストtest.com/user/test.html実際のリクエストはhttp://test1/haha/test.htmlです

2.6. 場所の終了

パスの最後には/ proxy_passがあり、最後には/がありません

nginxの設定は次のとおりです

 場所 /user/ {
			proxy_set_header 接続 "";
        	プロキシ_http_バージョン 1.1;
			proxy_pass http://test1/haha;
		}

リクエストURL

test.com/user/test.html

バックエンドコンテンツ

印刷される内容:

ホスト: test1
コンテンツの長さ: 0
ユーザーエージェント: PostmanRuntime/7.26.8
受け入れる: */*
郵便配達トークン: 32fb2a50-1e7c-4131-9804-1828e21ca841
受け入れエンコーディング: gzip、deflate、br

127.0.0.1 - - [2021年4月10日 17:05:03] 「POST /hahatest.html HTTP/1.1」 200 -

リクエストtest.com/user/test.html実際のリクエストはhttp://test1/hahatest.htmlです

結論

シリアルナンバーアクセスURL場所の設定proxy_pass 設定バックエンドで受信したリクエスト述べる
1 test.com/user/test.html /ユーザー/ http://test1/ /テスト.html
2 test.com/user/test.html /ユーザー/ http://テスト1 /user/test.html
3 test.com/user/test.html /ユーザーhttp://テスト1 /user/test.html
4 test.com/user/test.html /ユーザーhttp://test1/ //テスト.html
5 test.com/user/test.html /ユーザー/ http://test1/はは/ /haha/テスト.html
6 test.com/user/test.html /ユーザー/ http://test1/はは/ハハテスト.html

上記の表のバックエンドは、Python スクリプトに対応する Web サービスを指すことに注意してください。

日常的なウェブサイトの展開では、 nginxproxy_passリバースプロキシがよく使用されます。proxy_pass proxy_pass設定する際には、明確にする必要がある設定があります。

  • upstram_nameの後に/が現れた場合、それは絶対ルートパスと同等であり、 nginx locationで一致するパス部分をプロキシしません。
  • /がない場合、一致するパス部分もプロキシされます。

Nginx の location と proxy_pass パスの詳細な設定に関するこの記事はこれで終わりです。Nginx の location と proxy_pass パスの設定に関するより詳しい内容については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • nginx における proxy_pass のさまざまな使用法の詳細な説明
  • nginx proxy_pass 設定で URL が / で終わる場合と / なしで終わる場合の違いの詳細な説明
  • nginx の場所に複数の Proxy_pass メソッドがある
  • nginx リバース プロキシでの proxy_pass の実装
  • nginx の 2 つのモジュールの proxy_pass の違い

<<:  25 個の CSS フレームワーク、ツール、ソフトウェア、テンプレートを共有

>>:  MySQL移行計画と落とし穴の実践記録

推薦する

HTML の値属性と名前属性の機能と使用法の紹介

1. ボタンで使用される値は、「OK」、「削除」など、ボタンに表示されるテキストを指します。 2. ...

MySQL における := と = の違いをグラフィカルに紹介

:= と = の違い=設定および更新の場合にのみ、:= と同じ効果、つまり代入効果があり、それ以外の...

DockerでGDBを使用するときにブレークポイントを入力できない問題を解決する

質問docker で gdb を実行すると、ブレークポイントに到達しますが、ブレークポイントに入るこ...

docker-machineの使い方の詳しい説明

Docker-machineはDockerが公式に提供しているDocker管理ツールです。これは d...

MySQL の NULL 値に関する体験談と分析チュートリアルシリーズ

目次1. テストデータ2. ヌル値による不便3. スペース、空の値、null をどのように判断すれば...

k8s に ingress-nginx をデプロイする手順

目次序文1. Ingressの展開と構成2. httpsを使用する序文k8sクラスタサービスがデプロ...

Tomcat は親の委任メカニズムを破壊して Web アプリケーションの分離を実現します。

目次Tomcat クラスローダー階層WebAppクラスローダー共有クラスローダーカタリナクラスローダ...

Uniappがスライディングスコアリング効果を実現

この記事では、スライディングスコアリングを実装するためのuniappの具体的なコードを参考までに共有...

MySQL のインデックスの種類と基本的な使用例

目次索引- 総合索引- ユニークなインデックス- 主キーインデックス- 複合インデックス- 全文索引...

フックを使用して React コンポーネントを書くときに注意すべき 5 つの点

目次01. レンダリングが不要な場合はuseStateを使用する02. リンクの代わりにrouter...

CSSを使用して複数の画像を中央に水平に表示する方法

まず実装手順について説明します。最終結果 2. コードの実装HTML部分 <div class...

MySQLで重複行を削除する方法

SQL文 /* MySQL で重複行を削除するいくつかの方法 ---Chu Minfei ---20...

Ubuntu 18.04 で apt-get ソースを変更する方法

apt-get を使用してインストールすると、非常に遅くなります。国内のソースを変更すると、この問題...

MySQL を暗号化および復号化するいくつかの方法 (要約)

目次前面に書かれた双方向暗号化エンコード/デコードAES_ENCRYPT/AES_DECRYPT D...

CocosCreatorでWeChatゲームを作成する方法

目次1. WeChatパブリックプラットフォームからWeChat開発者ツールをダウンロードする2. ...