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 のイテレータの詳細な説明

推薦する

指定したディレクトリに nginx をインストールする方法の例

会社の要件により、異なる場所にある 2 つの nginx サーバーを同じマシンにインストールする必要...

MySQL 接続で認証失敗エラーが発生する場合の分析と解決方法

[問題の説明]アプリケーション側では、次のエラーが時々表示されます。メソッド 'mysql_...

Web コンテンツ ページを作成するための 9 つの実用的なヒント

コンテンツ1. 読者に留まる理由を与える。ウェブページを面白く魅力的なものにしましょう。しかし、まず...

Linux仮想マシンをWiFiに接続する方法

生活の中で、インターネットはどこにでもあります。インターネットを通じてゲームをしたり、テレビ番組を見...

js の関数の長さはどれくらいですか?

目次序文なぜいくらですか?パラメータの数デフォルトパラメータ残りのパラメータ要約する序文今日は関数の...

シンプルで簡単なJavaScript開発のためのSvelte実装原理の詳細な説明

目次デモ1フラグメントの作成スヴェルトコンポーネント状態を変更できるデモSvelte は長い間存在し...

Linux で MySQL スケジュール タスク バックアップ データを実装する方法

序文バックアップは災害復旧の基礎であり、システム操作エラーやシステム障害によるデータ損失を防ぐために...

Docker を使用してエンタープライズレベルのカスタムイメージを構築する方法

序文退社前に、ある依頼を受けました。基本イメージ規格の変更により、最新の Docker イメージ規格...

この記事では、Vueのフロントエンドページングとバックエンドページングを実装する方法を説明します。

目次1: フロントエンドの手書きページング(データ量が少ない場合) 2: バックエンドのページング、...

Elasticsearchツールcerebroのインストールと使用チュートリアル

Cerebro は、Elasticsearch バージョン 5.x より前の Elasticsear...

フロントエンドの状態管理(パート2)

目次1. 再出発1.1. ストア(司書) 1.2. 状態(書籍) 1.3. アクション(図書貸出リス...

Vue で Alibaba のアイコンフォント ベクター アイコンを使用する方法について

インターネット上には多くのインポート方法があり、公式も3つのインポート方法を提供していますが、インポ...

JSデータ型検出のさまざまな方法の概要

目次背景データ型を決定する方法は何ですか? 1. typeof を使用して基本データ型を決定します。...

nginx rewriteを使用してURLをリダイレクトする方法

最近仕事でnginxの設定を変更する必要が頻繁にあり、nginxでrewriteを使用する方法を学び...

レスポンシブ Web をデザインするにはどうすればいいですか?レスポンシブウェブデザインのメリットとデメリット

最近レスポンシブ デザインについて学んでいて、これについていくつか整理してみました。写真の一部はイン...