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 にログインするチュートリアル
序文MySQL の日常的な開発やメンテナンスでは、パスワードの紛失やテーブルの破損など、避けられない...
序文上記の Web ページ スタイルを記述しているときに、スタイルの値をどのように変更しても、ページ...
目次概要ハッシュプロパティホストプロパティホスト名属性Href属性起源のプロパティユーザー名とパスワ...
コードをコピーコードは次のとおりです。 <!--[IEの場合]><script t...
ごみ箱機能をオンにすると、削除されたファイルの元のデータをタイムアウトなしで復元できるため、誤って削...
1. HTMLコードコードをコピーコードは次のとおりです。経験値: <span class=...
この記事では、Web ページ レイアウト デザインのいくつかの簡単な原則をまとめ、Web ページ デ...
文法規則 列名を選択 テーブル名1から INNER JOIN テーブル名2 ON テーブル名1.列名...
Vm 内のハイパーリンク URL は、Get 要求のパラメータとして中国語と連結する必要があります。...
初めてこのエッセイを使ったとき、私はかなりぎこちなく感じましたhtmlファイルコードをコピーコードは...
cli3 でビルドされた vue プロジェクトは、ゼロ構成ファイルとして知られています。パッケージ化...
MacにはApache環境が付属していますターミナルを開き、sudo apachectl -v と入...
MySQL で concat 関数を使用する方法: CONCAT(文字列1、文字列2、…)戻り値は、...
事前に一言:突然、複数のドメイン名のアクセスを https に転送するというタスクを受け取りました。...
序文コストを考慮して、ほとんどのウェブマスターは、多数の小規模なウェブサイト用にサーバーを個別に購入...