Nginx フォワードプロキシとリバースプロキシの違いと原理分析

Nginx フォワードプロキシとリバースプロキシの違いと原理分析

1. フォワードプロキシとリバースプロキシの違い

フォワード プロキシはクライアントのプロキシとして機能し、リバース プロキシはサーバーのプロキシとして機能します。

1.1 フォワードプロキシ

フォワード プロキシ サーバーは、クライアントとサーバーの間に配置されます。サーバーからデータを取得するために、クライアントはプロキシ サーバーに要求を送信し、ターゲット サーバーを指定します。プロキシ サーバーは、ターゲット サーバーから返されたデータをクライアントに転送します。ここで、クライアントはいくつかのフォワード プロキシ設定を行う必要があります。

例: 壁を登る

フォワードプロキシでは、クライアントのリクエストはプロキシされる

1.2 リバースプロキシ

リバース プロキシでは、クライアントはプロキシを意識せず、設定なしでアクセスできます。クライアントはリバース プロキシ サーバーにリクエストを送信し、リバース プロキシ サーバーはターゲット サーバーを選択してデータを取得し、クライアントに返します。このとき、リバース プロキシ サーバーとターゲット サーバーは外部に対して 1 つのサーバーです。公開されているのはプロキシ サーバーのアドレスであり、実際のサーバーの IP アドレスは隠されています。

2. nginxリバースプロキシの使用

nginx設定ファイルnginx.confに新しい仮想ホスト設定を作成します。

サーバー{
    8080を聴く;
    server_name ローカルホスト;
    
    場所 /カテゴリー/ {
      proxy_pass http://localhost;
    }
  }

上記の構成では、

listen は nginx が listen するポートを示します。

server_name は、nginx にアクセスするときにブラウザに入力するドメイン名です。IP アドレスを直接入力することもできます。複数バインドする場合は、スペースで区切ることができます。

location は、nginx がポートを listen するときに一致する URL を示します。nginx にアクセスする URL に /category/ が含まれている場合、プロキシが実行されます。

proxy_pass は、nginx がクライアントのリクエストをプロキシするターゲットを示します。

ここで proxy_pass のパスの書き方に注意してください。上記のようにパスが / なしで終わる場合、それは相対パスを意味します。そうすると、nginx はリクエストを転送するときに元の URL の /category/ を傍受しません。たとえば、ブラウザが http://localhost:8080/category/findAll にアクセスする場合、nginx が実際に送信するリクエスト アドレスは http://localhost/category/findAll です。

proxy_pass のターゲット パスの末尾に絶対パスを示す / が設定されている場合、nginx はリクエストを転送するときに元の URL の /category/ をインターセプトします。たとえば、ブラウザーが http://localhost:8080/category/findAll にアクセスすると、nginx によって実際に送信されるリクエスト アドレスは http://localhost/findAll になります。

設定時に、必要に応じて / を含めるかどうかを決定する必要があります。そうしないと、実際の使用時に nginx は常に 404 エラーを報告します。

ここでの設定では、バックエンド インターフェイス パスに /category が含まれているため、相対パスを使用してこれを保持します。

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

以下もご興味があるかもしれません:
  • nginx フォワード プロキシを使用してイントラネット ドメイン名転送プロセス分析を実装する
  • nginx を介して方向プロキシを実装するプロセスの図
  • nginxフォワードプロキシとリバースプロキシの詳細な説明
  • リバースプロキシ設定を実装するためのユニバーサルnginxインターフェース
  • 分散アーキテクチャにおけるフォワードプロキシとリバースプロキシに関する面接の質問

<<:  jsは水平および垂直スライダーを実現します

>>:  MySQL 8.0.18 のインストールと設定方法のグラフィックチュートリアル

推薦する

docker の run/cmd/entrypoint の違いの詳細な説明

Dockerfile では、run、cmd、entrypoint はすべてコマンドを実行するために使...

問題におけるJS演算子の調査

問題は、誰もが「メモリ リーク」について知っていることです。一般的なシナリオはいくつかあります。クロ...

JavaScript で動的な QML オブジェクトを作成する方法

1. オブジェクトを動的に作成するJavaScript からオブジェクトを動的に作成する方法は 2 ...

CentOS 7 でソースコードから Openssh をインストールする方法

環境: CentOS 7.1.1503 最小インストール依存パッケージをダウンロードします: yum...

MySQL 8.0 パスワード有効期限ポリシーの詳細な説明

MySQL 8.0.16 以降では、パスワードの有効期限ポリシーを設定できます。今日は、この小さな知...

JS配列ループ方式と効率分析の比較

配列メソッドJavaScript には多くの配列メソッドが用意されています。次の図は、ほとんどの配列...

Linuxの同時実行は簡単です。このようにするだけです

並行処理関数 i の `grep server /etc/hosts | awk '{pri...

MySql はデータを正常に挿入しますが、[Err] 1055 エラーが報告されます。解決策

1. 質問:最近、挿入操作を行っています。MySQLのバージョンは5.7です。挿入は成功しますが、エ...

Vue3カプセル化メッセージメッセージプロンプトインスタンス関数の詳細な説明

目次Vue3 カプセル化メッセージプロンプトインスタンス関数スタイルレイアウトカプセル化メッセージ....

Bツリー挿入プロセスの概要

前回の記事 https://www.jb51.net/article/154153.htm では、B...

background-positionプロパティでのパーセンテージ値の使用法の検討

背景位置が背景画像の表示に与える影響この2日間のプロジェクトでホームページの写真を入れ替えていたとこ...

ウェブサイトにファビコンを追加するためのヒント: URLの前の小さなアイコン

いわゆるファビコンは、Favorites Icon の略で、中国語ではウェブサイトアバターと呼ばれて...

CSSをインポートする方法に関する詳細な洞察の要約

CSS の開発履歴についてはここでは紹介しません。ブログを書いている理由の 1 つは、フロントエンド...

Ubuntu 18.04 Server に静的 IP を設定する方法

1. 背景Netplan は、Ubuntu システムのネットワーク設定を簡単に管理および構成できるよ...