nginx リバース プロキシを設定する場合、location と proxy_pass のスラッシュによってさまざまな問題が発生する可能性があります。スラッシュが 1 つ多いか少ないかによって、結果がまったく異なります。そのため、location と proxy_pass の後にスラッシュがある場合とない場合を特別に整理して組み合わせ、完全なテストを実施して原理を解明し、姿勢レベルを向上させました。 0. 環境情報 2台のnginxサーバー nginxA: 192.168.1.48 nginxB: 192.168.1.56 1. 試験方法 nginx A で異なるルールを設定し、nginx A にリクエストします: http://192.168.1.48/foo/api ログの$requestフィールドを表示して、nginx Bが受信したリクエストを観察します。 2. テストのプロセスと結果 ケース1 nginx A 構成: 場所 /foo/ { プロキシパス http://192.168.1.56/; } nginx B が受信したリクエスト: /api ケース2 nginx A 構成: 場所 /foo/ { プロキシパス http://192.168.1.56/; } nginx B が受信したリクエスト: //api ケース3 nginx A 構成: 場所 /foo/ { プロキシパス http://192.168.1.56/; } nginx B が受信したリクエスト: /foo/api ケース4 nginx A 構成: 場所 /foo/ { プロキシパス http://192.168.1.56/; } nginx B が受信したリクエスト: /foo/api ケース5 nginx A 構成: 場所 /foo/ { プロキシパス http://192.168.1.56/bar/; } nginx B が受信したリクエスト: /bar/api ケース6 nginx A 構成: 場所 /foo { プロキシパス http://192.168.1.56/bar/; } nginx B が受信したリクエスト: /bar//api ケース7 nginx A 構成: 場所 /foo/ { プロキシパス http://192.168.1.56/bar; } nginx B が受信したリクエスト: /barapi ケース8 nginx A 構成: 場所 /foo { プロキシパス http://192.168.1.56/bar; } nginx B が受信したリクエスト: /bar/api これを見て目が回りませんか?実はパターンがあるんです。 これらのケースを表に並べると、結果はnginx Bが受信したリクエストを示します。 表1
表2
3. 分析 元のリクエストパス: この記事では「/foo/api」と同じ名前を使用します 場所: 上記の表の場所の列 proxy_pass: 上記の表のproxy_pass列 新しいリクエストパス: nginxが元のリクエストパスを処理した後の文字列 proxy_passの分析に焦点を当てます。proxy_passは3つの形式に分けられます。 そして、文字列の後にip:portが続くかどうかによって、2つのカテゴリに分類されます。「/」も文字列なので、1は1つのカテゴリに分類され、2と3は1つのカテゴリに分類されます。以下では、この2つのカテゴリについて説明します。 proxy_pass ip:port の後に文字列が続かない場合、ケース 3 および 4 のように、nginx は元のリクエスト パスをそのまま次の nginx に転送します。 proxy_pass の ip:port の後に文字列が追加されると、nginx は元のリクエスト パスから場所を削除し、残りの文字列を proxy_pass に連結して新しいリクエスト パスを生成し、新しいリクエスト パスを次のステーション nginx に転送します (上記の状況は、削除された文字列が空の文字列であることを除いて、実際にはこれと同じです~~) 最も混乱しやすい例、ケース 7 を見てみましょう。 proxy_pass の ip:port の後に文字列 "/bar" が続くため、場所 "/foo/" は元のリクエスト パス "/foo/api" から削除され、"api" になります。次に、"api" が proxy_pass: http://192.168.1.48/bar に連結され、新しいリクエスト URL "http://192.168.1.48/barapi" が生成されます。そのため、次の段階で nginx が受信するリクエストは "/barapi" になります。 ケース 6: proxy_pass の ip:port の後に文字列 "/bar/" が続くため、location: "/foo" は元のリクエスト パス "/foo/api" から削除されて "/api" になり、その後 "/api" が proxy_pass: http://192.168.1.48/bar/ に連結されて新しいリクエスト パス "http://192.168.1.48/bar//api" が生成されます。そのため、次の段階で nginx が受信するリクエストは /bar//api になります。 同じことが他のケースにも当てはまります。これでようやく理解できましたし、もう混乱する必要もありません。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: Mysql 5.7.17 をインストールした後、MySQL にログインするチュートリアル
この記事では、動的な点と線の効果を実現するためのJavaScriptキャンバスの具体的なコードを参考...
MySQL 5.7.18 でパスワードを変更する方法: 1. まずMySQLサーバーをシャットダウン...
1. ソフトウェアの紹介バーチャルボックスVirtualBox は、無料のオープンソース仮想マシン ...
1. ファイル名検索を実行するwhich ('実行可能ファイル' を検索) //PA...
MySQL 8.0.12のインストールと設定方法を記録してみんなで共有します。 1. インストール1...
Vue を学習する際に、vscode ターミナルで常に webpack 命令を使用すると、次のよう...
VirtualBox は、技術者が異なる種類の複数の仮想マシン (VM) を同時に実行できるようにす...
HTML徹底解析(14)特殊文字 ■ よく使われる特殊文字 HTMLタグを知っていれば、特殊文字の使...
序文Oracle であれ MySQL であれ、新バージョンで導入された新機能は、一方では製品の機能性...
まず、nginx コンテナ内の構造:コンテナを入力します: docker exec -it b511...
nginx は弊社で最もよく使用されるサーバーで、コンテンツ配信やリバース プロキシによく使用されま...
ページでビデオ タグを使用する場合は、Ogg Theora または VP8 (これに問題がない場合)...
序文:非常に遅いクエリとリクエストのタイムアウトのアラートを受け取りました。メトリックを通じて My...
目次序文ブラウザコンパイル版ローカルプリコンパイルバージョン要約する序文vue3サンドボックスには主...
目次1. 繰り返し宣言1.1 変数1.2 しましょう1.3 定数2. 可変プロモーション2.1 変数...