nginx を介して方向プロキシを実装するプロセスの図

nginx を介して方向プロキシを実装するプロセスの図

この記事は主に、nginx を介して方向プロキシを実装するプロセスを紹介します。この記事のサンプル コードは非常に詳細で、皆さんの学習や仕事に一定の参考値があります。困っている友人は参考にしてください。

nginxは方向プロキシを実装します

1. nginxとは何か

Nginx は、ロシア人によって書かれた非常に軽量な HTTP サーバーです。これは、IMAP/POP3/SMTP サービスも提供する、高性能な HTTP およびリバース プロキシ Web サーバーです。その特徴は、メモリの占有量が少なく、同時実行性が強いことです。実際、nginx の同時実行性は、同じタイプの他の Web サーバーよりも優れています。nginx を使用している Web サイトのユーザーには、Baidu、JD.com、Sina、NetEase、Tencent、Taobao などがあります。

2. エージェントとは何ですか?

プロキシ サーバーは、クライアントが要求を送信すると、それを直接宛先ホストに送信するのではなく、まずプロキシ サーバーに送信します。プロキシ サービスは、クライアントの要求を受け入れた後、それをホストに送信し、宛先ホストから返されたデータを受信し、プロキシ サーバーのハード ディスクに保存してから、クライアントに送信します。

例えば、私たちの周りで家を借りたいと思っている人

3. エージェントなしのシナリオ

プロキシがない場合、クライアントと nginx サーバーは両方ともクライアントです。クライアントはサーバーに要求し、サーバーはクライアントに直接応答します。

4. エンタープライズ シナリオ インターネット リクエストでは、クライアントがサーバーへのリクエストを直接開始できないことが多いため、クライアントとサービス間の通信を実装する必要があります。

5. nginxプロキシサービスの一般的なモード

プロキシサービスとしてのnginxは、アプリケーションシナリオに応じてまとめられており、プロキシはフォワードプロキシとリバースプロキシに分かれています。

6. フォワードプロキシ

フォワードプロキシ: クライアント <-> プロキシ -> サーバー:

家を借りる簡単な例をフォワードエージェントが示します。

A(借主)B(代理人)C(家主)A(依頼者)はC(サーバー)の家を借りたいのですが、A(依頼者)はC(サーバー)を知らないので借りることができません。 B(エージェント)は、この家を借りることができるC(サーバー)を知っているので、B(エージェント)にこの家を借りるのを手伝ってくれるように頼みます。追記: このプロセスでは、C (サーバー) は A (クライアント) を知らず、B (エージェント) のみを知っています。C (サーバー) は A (クライアント) が家を借りたことを知らず、家が B (エージェント) に貸し出されたことのみを知っています。

---------------------------------------------------

フォワード プロキシは、クライアントとターゲット ホストの間に設定され、内部ネットワークからインターネットへの接続要求をプロキシするためにのみ使用されます。クライアントはプロキシ サーバーを指定し、元々 Web サーバーに直接送信されていた http 要求をプロキシ サーバーに送信する必要があります。

7. リバースプロキシ

リバース プロキシ: client-1>proxy<1> サーバー側のリバース プロキシでも、家を借りる例が使用されます。A (クライアント) は家を借りたいと考えており、B (プロキシ) は A に家を貸します。 この時点では、C(サーバー)が実質的な家主となります。 B(エージェント)はA(クライアント)に家を貸す仲介人です。 このプロセスの間、A(クライアント)は家の家主が誰であるかを知らず、家がB(エージェント)のものであると考える可能性があります。

--------------------------------------------------------

リバース プロキシ サーバーはサーバー側に設置されます。頻繁に要求されるページをバッファリングすることでサーバーの負荷を軽減し、クライアントの要求を内部ネットワーク上のターゲット サーバーに転送します。また、サーバーから取得した結果を、インターネット上で接続を要求しているクライアントに返します。このとき、プロキシ サーバーとターゲット ホストは外部からは 1 つのサーバーのように見えます。

8. リバースプロキシの主な用途

現在、多くの大規模 Web サイトではリバース プロキシが使用されています。外部ネットワークから内部サーバーへの悪意のある攻撃を防ぎ、サーバーの負荷を軽減するキャッシュ機能やアクセスセキュリティ制御に加え、負荷分散を実行してユーザーリクエストを複数のサーバーに分散することもできます。

9. nginxプロキシでサポートされるプロキシプロトコル

http は第 7 層に属し、アプリケーション層プロキシはハイパーテキスト転送プロトコル https プロキシ http/https プロトコルに属し、TCP は第 4 層に属し、トランスポート層プロキシは tcp/dupxiey に属します。
websocketは、プロキシhttp1.1ロングリンク通信プロトコルGRPCプロキシgo言語リモート呼び出しPOP / IMAPプロキシメール送受信プロトコルRTMPプロキシストリーミングメディア、ライブブロードキャストの開発に使用されます。

10.web01 プロキシの設定

[root@web01 php]# vim /etc/nginx/conf.d/blog.drz.com.conf
サーバー{
  聞く 80;
  サーバー名 blog.drz.com;
  ルート /code/wordpress;
  インデックス index.php index.html;
  access_log /var/log/nginx/blog.drz.com_access.log メイン;

  場所 ~\.php$ {
    127.0.0.1:9000; をデフォルトとして設定します。
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_params を含めます。
  }

}
プロキシWordPress
[root@lb01 ~]# vim /etc/nginx/conf.d/daili.conf wordpressのプロキシサーバーを編集します{
  聞く 80;
  サーバー名 blog.drz.com;

  位置 / {
    プロキシパス http://10.0.0.7;

     proxy_set_header ホスト $http_host;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

     プロキシ_http_バージョン 1.1;
     proxy_connect_timeout 60秒;
     proxy_read_timeout 60秒;
     proxy_send_timeout 60秒;
     proxy_buffering オン;
     プロキシバッファサイズ 8k;
     プロキシバッファ 8 8k;
}

}
root@lb01 ~]# nginx -t
nginx: 設定ファイル /etc/nginx/nginx.conf の構文は正常です
nginx: 設定ファイル /etc/nginx/nginx.conf のテストが成功しました
[root@lb01 ~]# nginx -s リロード

11. バックエンドサーバーに送信されるリクエストヘッダー情報を追加する

# ユーザーがリクエストすると、HOST の値は www.oldboy.com になるため、プロキシ サービスはリクエストを www.oldboy.com としてバックエンドに渡します。
proxy_set_header ホスト $http_host;
# $remote_addr の値を変数 X-Real-IP に格納します。$remote_addr の値はクライアントの IP アドレスです。
proxy_set_header X-Real-IP $remote_addr;
# クライアントはプロキシ サービスを介してバックエンド サービスにアクセスします。バックエンド サービスは、この変数 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for を通じて実際のクライアント アドレスを記録します。

12. プロキシからバックエンドへのTCP接続、応答、戻りなどのタイムアウト

//Nginx プロキシとバックエンド サーバーの接続タイムアウト (プロキシ接続タイムアウト)
構文: proxy_connect_timeout 時間;
デフォルト: proxy_connect_timeout 60 秒;
コンテキスト: http、サーバー、場所
 
// nginx プロキシがバックエンド サーバーからの応答を待機する時間 構文: proxy_read_timeout time;
デフォルト: proxy_read_timeout 60 秒;
コンテキスト: http、サーバー、場所
 
//バックエンド サーバーのデータが nginx プロキシに送り返されるまでのタイムアウト時間 構文: proxy_send_timeout time;
デフォルト: proxy_send_timeout 60秒;
コンテキスト: http、サーバー、場所

13. プロキシを使用する理由

1) アクセス速度の向上。ターゲットホストから返されたデータはプロキシサーバーのハードディスクに保存されるため、次回クライアントが同じサイトのデータにアクセスすると、プロキシサーバーのハードディスクから直接読み取られ、キャッシュの役割を果たします。特に人気のあるサイトでは、リクエスト速度が大幅に向上します。

2) ファイアウォール機能: すべてのクライアント要求は、リモート サイトにアクセスするためにプロキシ サーバーを経由する必要があるため、プロキシ サーバーに制限を設定して、特定の安全でない情報をフィルターすることができます。

3) プロキシ サーバーを介してアクセスできないターゲット サイトにアクセスします。インターネットには多くのプロキシ サーバーが開発されています。クライアントのアクセスが制限されている場合、制限のないプロキシ サーバーを介してターゲット サイトにアクセスできます。簡単に言えば、ファイアウォールをバイパスするために使用するブラウザーはプロキシ サーバーを利用しています。海外に行くことはできませんが、外部ネットワークに直接アクセスすることもできます。

14. まとめ

フォワード プロキシ エージェントはクライアントであり、クライアントにサービスを提供します。リバース プロキシ エージェントはサーバーであり、サーバーにサービスを提供します。

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

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

<<:  MySQLは複数テーブル関連統計(サブクエリ統計)の例を実装します

>>:  ECMAScript のイテレータの詳細な説明

推薦する

mysql バックアップ スクリプト mysqldump の使い方の詳細な説明

この記事では、参考までにMySQLバックアップスクリプトを紹介します。具体的な内容は次のとおりです。...

HTML テーブル マウス ドラッグ ソート機能

効果画像: 1. ファイルをインポートする<script src="js/jquer...

Vue3のいくつかの利点についての簡単な説明

目次1. ソースコード1.1 モノレポ1.2 タイプスクリプト2. パフォーマンス2.1 ソースコー...

Linux CentOS 7.7 システムの VMware インストールに関する詳細なチュートリアル

Linux CentOS 7.7 システムを Vmware にインストールする方法。最小限のインスト...

mysql 8.0.15 winx64 解凍バージョン グラフィック インストール チュートリアル

システムをインストールした後、毎回いくつかのソフトウェアを再インストールする必要があります。ソフトウ...

MySQL 5.7.16 のインストールと設定方法のグラフィック チュートリアル (Ubuntu 16.04)

Ubuntu 16.04 に MySQL 5.7 をインストールするにはどうすればいいですか?メイ...

Linux システムによって報告される tcp_mark_head_lost エラーの処理方法

問題の説明最近、ホストから次のカーネル情報が報告されました。 7月8日 10:47:42 cztes...

React 入門レベルの詳細なメモ

目次1. Reactの基本的な理解1. はじめに2. Reactの特徴3. Reactが効率的な理由...

Nginx の add_header ディレクティブに注意する必要があるのはなぜですか?

序文ご存知のとおり、nginx 構成ファイルは add_header ディレクティブを使用して応答ヘ...

Node.js でのクラスター作成に関する簡単な説明

目次クラスタクラスターの詳細クラスター内のイベントクラスター内のメソッドクラスター内の属性クラスター...

Java+Tomcat 環境の展開とインストールのプロセス図

次に、Centos7 に Java+Tomcat をインストールします。インターネット上には多くの記...

Linux で 1 回限りのスケジュールされたタスクを実行するための at コマンドの使用に関する詳細な説明

目次序文1. 一度限りの計画タスクの紹介2. コマンド3. 1回限りのスケジュールタスクを作成する4...

Webサービスのリモートデバッグとタイムアウト動作原理の分析

Webサービスのリモートデバッグ.NET では、WEBSERVICE のリモート デバッグ機能はデフ...

Windows での自動展開に Jenkins を使用するチュートリアル図

今日は、Jenkins + powershell スクリプトを使用して、.NET CORE スクリプ...

Centos7 のインストールと Mysql5.7 の設定

ステップ1: MySQL YUMソースを取得するMySQLの公式サイトにアクセスして、RPMパッケー...