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

推薦する

Dockerに関するよくある質問

Docker はポートを IPv6 にのみマッピングし、IPv4 にはマッピングしません。 dock...

CentOS7.x のアンインストールとインストール MySQL5.7 の操作手順とエンコード形式の変更方法

1. MySQL 5.7 のアンインストール1.1查看yum是否安裝過mysql CD yum li...

HTML入力で値が変更されたときにリスナーイベントを追加することの簡単な分析

達成される効果多くの場合、入力ボックスの値の変化をリアルタイムで監視し、ブラウザを誘導してウェブサイ...

MySQL ステートメントを使用して、さまざまな整数が占めるバイト数とその最大値と最小値を調べる例

直接コード: タイプとして「bigint unsigned」、バイトとして「8」、max_numとし...

HTML印刷関連の操作と実装の詳細な説明

原則的にはwindow.print()メソッドを呼び出すことですが、このメソッドは現在のページ全体を...

WIN2008 サーバーのコマンド ラインを使用して IIS7 コンポーネントをインストールおよびアンインストールする方法

注意: .NET FrameWork はコア モードで実行できないため、コア インストール モードの...

MySQLデータベースの基礎知識と操作のまとめ

この記事では、例を使用して、MySQL データベースの基本的な知識と操作について説明します。ご参考ま...

goaccess を使用して nginx ログを分析する詳細な方法

最近、goaccess を使って nginx ログを分析したいのですが、nginx ログの設定形式が...

AngularパイプラインPIPEの紹介と使い方

序文PIPE、パイプラインと翻訳されます。 Angular パイプは、HTML コンポーネントで宣言...

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

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

シンプルなカレンダー効果を実現する js

この記事では、シンプルなカレンダー効果を実現するためのjsの具体的なコードを参考までに共有します。具...

Linux で XFS パーティション形式のルート ディレクトリを縮小する方法

目次序文システム環境現在のシステムパーティションレイアウトデータのバックアップレスキューモードに入る...

CSS 動的読み込みバー効果のサンプルコード

CSS変数の知識を使って、追加したコードとコメントを直接投稿します <!DOCTYPE htm...

MySQL テーブル内の重複データを検索して削除する方法の概要

時々、データベース テーブルに重複したデータが大量に保存されます。これらの重複データはリソースを浪費...

Linux で rc.local ファイルがない場合の完璧なソリューション

新しい Linux ディストリビューションには rc.local ファイルがなくなりました。サービス...