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

推薦する

ブラウザでビデオプレーヤーを実装するための基本的な考え方とコード

目次序文ブラウザにおけるオーディオとビデオに関する知識のまとめビデオエンコーディング包装形態オーディ...

JavaScript デザインパターン プロキシパターンの学習

目次概要実装保護エージェント仮想エージェント画像の遅延読み込みを実現する仮想プロキシ概要プロキシ パ...

練習と面接のための Linux シェル スクリプトのヒント 9 つを共有する

予防1) 先頭にインタープリターを追加します: #!/bin/bash 2) 構文のインデントに 4...

Nest.js 環境変数の設定とシリアル化の詳細な説明

環境変数の設定の簡単な説明プログラムは、環境によって異なる環境変数を必要とします。たとえば、実稼働環...

JavaScript の基礎におけるデータ型の詳細な説明

目次1. データ型1.1 なぜデータ型が必要なのか? 1.2 変数のデータ型1.3 データ型の分類2...

HTMLのインライン要素とブロックレベル要素とは何か、またそれらの違いは何ですか

以前の就職面接で面接官が尋ねた質問を覚えています。「インライン要素とは何ですか。ブロックレベル要素と...

JavaScript を使用して簡単なアルゴリズムを実行する方法

目次質問1件2つの方法3 実験結果と考察質問1件ご存知のとおり、 Pycharm 、 IDLE 、 ...

Javascript 操作メカニズム イベントループ

目次1. 4つのコンセプト1. JavaScriptはシングルスレッドです2. タスクキュー3. 同...

ウェブページ作成のヒントのまとめ

序文この記事は主に、日常の Web ページ制作で遭遇する問題解決スキルの一部をまとめ、皆さんの参考と...

Vueプラグインの書き方を説明する記事

目次プラグインとはプラグインの作成プラグインの使用要約するプラグインとはVue フレームワークでは、...

MySQLストレージフィールドタイプのクエリ効率についての簡単な理解

検索パフォーマンスは最速から最遅まで次のとおりです (私が聞いたところによると)。 1 番目: ti...

Windows 上で Zookeeper サーバーを構築するチュートリアル

インストールと設定Apacheの公式ウェブサイトには多くのミラーダウンロードアドレスが用意されており...

Win7 x64 に解凍版の mysql 5.7.18 winx64 をインストールするとサービスが起動できない問題を解決します

今日、mysql の公式サイトから mysql-5.7.18-winx64.zip をダウンロードし...

mysql を解決: エラー 1045 (28000): ユーザー 'root'@'localhost' のアクセスが拒否されました (パスワードの使用: NO/YES)

1. 問題時々Mysqlにログインしてパスワードを入力すると、この状況が発生しますmysql -u...

Vueのライブ放送機能の詳しい説明

最近、会社でたまたま生放送をしていたのですが、今日は私が遭遇した落とし穴を記録します。会社のサーバー...