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移行計画と落とし穴の実践記録

推薦する

MySQLセグメンテーション関数substring()の具体的な使用法

MySQL には、主に left()、right()、substring()、substring_i...

Win10にnginxをインストールして設定するプロセス

1. はじめにNginx は、無料のオープンソースの高性能 HTTP サーバーおよびリバース プロキ...

JavaScript でイベントのバブリングを防ぐ方法

注意すべき点は、イベントバブリング自体の特性上、メリットだけでなくデメリットも生じるということです。...

WeChatアプレットの手動および自動追跡の実装の詳細説明(Taro)

どの企業もユーザーベースを拡大したいのであれば、ユーザーの操作データを収集・分析する必要があり、その...

MySQL インデックスの長さ制限の原理の分析

この記事は主に、MySQL インデックスの長さ制限の原理の分析を紹介します。サンプル コードを通じて...

Spring Boot のパッケージ化と Docker リポジトリへのアップロードの詳細な手順

重要な注意: この記事を読む前に、Docker コンテナに関する知識と、一般的な Docker 操作...

JavaScript の組み込み Date オブジェクトの詳細な説明

目次日付オブジェクト日付オブジェクトの作成新しい日付()日付を取得する()取得日()月を取得する()...

ReactでuseStateを使用する詳細な例

使用状態useState は、関数コンポーネント内で呼び出すことで、コンポーネントに内部状態を追加し...

Vueデータ監視の原理の詳細な説明

<本文> <div id="ルート"> <h1&...

explainコマンドがMySQLデータを変更する理由

クエリで EXPLAIN を実行するとデータベースが変更されるかどうかを尋ねられた場合、おそらく「い...

Dockerfile を使用したカスタムイメージの構築の実装

目次序文Dockerfile の紹介Dockerfileはイメージプロセスを構築するDockerfi...

Vueはプログレスバーの変更効果を実現します

この記事ではVueを使ってプログレスバーの変更を簡単に実装してみましたので参考にしてください。具体的...

MySQLデータベースでコマンドを自動補完する3つの方法

注意: 3 番目の方法は XSell でのみ使用され、finalsell では使用できません。方法1...

エージェントを介したzabbix監視プロセスとポートの詳細なプロセス

環境の紹介オペレーティングシステム: Centos 7.4 Zabbix バージョン: zabbix...