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 のインストールと設定方法のグラフィックチュートリアル

推薦する

MySQL遅延スレーブを導入するメリットのまとめ

序文MySQL のマスター/スレーブ レプリケーション関係は、厳密には「同期」または「マスター/スレ...

HTML 中国語文字エンコード標準の概要

HTML では、Web ページで使用されるエンコーディングを指定する必要があります。一般的な指定方法...

uniappを使用してWeChatミニプログラムでEChartsを使用する方法

今日は、uniapp を使用して Echarts を統合し、マップ チャートを表示します。 mpvu...

DockerにRedisをインストールし、設定ファイルとして起動する詳細な説明

更新: 最近、サーバーがマイニング ウイルスによってハッキングされたことが判明しました。これは、おそ...

Linux でタイムアウト付きの接続関数を試す

前回の記事では、Windows でタイムアウトを試してみました。この記事では、Linux で試してみ...

初心者向けウェブサイト構築チュートリアルの概要

これら 6 つの記事を書いた後、私は少し混乱し始めました。次にどこに書けばいいのか分かりません。ドメ...

MySQLとSpringの自動コミットの詳細な説明

1 MySQLの自動コミット設定MySQL はデフォルトで自動的にコミットします。つまり、各 DML...

要素ツリーコントロールは、ドロップダウンメニューとアイコンを統合します(ツリー+ドロップダウン+入力)

目次要件:実装手順:この記事では主に以下について説明します: カスタムツリーコントロール<el...

CSS 標準: vertical-align プロパティ

<br />原文: http://www.mikkolee.com/13私は最近、ver...

CSS を使用して 3 列レイアウトを実装するサンプル コード。中央の列は適応型で、テキスト サイズに応じて幅が変わります。

Baiduのインタビューで遭遇する質問は、次のレイアウト効果を達成する必要がある。 中央の紫色の列...

MySQL のロックに関する問題

ロックの分類:データ操作の粒度から:テーブルロック:操作時にテーブル全体がロックされます。行ロック:...

dockerでnginxを実行するときにdaemon offが使用される理由についての簡単な説明

とても嬉しいです。この問題に遭遇したとき、私はDockerコンテナのプロセス原理について話さなければ...

Linux での fuser コマンドの使用法の詳細な説明

説明する: fuser は、現在ディスク上のファイル、マウント ポイント、さらにはネットワーク ポー...

MySQL で高性能なインデックスを作成するための完全な手順

目次1. インデックスの基本1. インデックスの種類1.1 Bツリーインデックス1.2 ハッシュイン...

Linux でシェル スクリプトを使用して jar パッケージ プロジェクトを展開するための完全な手順

1. JDKをインストールする コンピュータの動作桁を確認します。 uname -ar 2017 x...