Nginx リバース プロキシと負荷分散を実装する方法 (Linux ベース)

Nginx リバース プロキシと負荷分散を実装する方法 (Linux ベース)

ここで nginx のリバース プロキシを試してみましょう。

リバースプロキシ方式とは、インターネット上の接続要求をプロキシサーバーで受け付け、内部ネットワーク上のサーバーに転送し、サーバーから取得した結果をインターネット上の接続要求元のクライアントに返す方式です。このとき、プロキシサーバーは外部からはリバースプロキシサーバーのように見えます。

私たちの Java プロジェクトでは、アクセスはポート 80 経由で行われ、Nginx がそれを受信し、Tomcat サーバーに転送して、サーバーの結果を返します。

ここで nginx.conf ファイルを変更する必要があります。

アップストリームバックエンド{
  #プロキシ IP の重みが大きいほど、受信するトラフィックが多くなります。逆に、server localhost:8084 weight=50;
  サーバー localhost:8088 重み=50;
}

受信したリクエストを転送します:

# / すべての負荷分散 + リバースプロキシの場所 / {
      ルート /data/wwwroot1;
      インデックス index.html index.htm;#index ファイル proxy_pass http://backend;
    }

このようにして、nginx へのリクエストを tomcat に割り当てて転送することができます。ここでは、負荷分散に使用される 2 つの Tomcat サーバーを定義しました。重みを設定することで、アクセス量を制御できます。

具体的な設定コードは以下のとおりです。

#ユーザーnobody;
# ワーカープロセスは通常、CPU の数 * コアの数を設定します。worker_processes 1;
 
#error_log ログ/error.log;
#error_log ログ/error.log 通知;
#error_log ログ/error.log 情報;
 
#pid ログ/nginx.pid;
 
# 接続プロパティイベントを設定する {
  worker_connections 1024;#1 人のワーカーが生成する接続の数}
 
# HTTPサーバーのメインセクションを設定します http {
  mime.types を含めます。
  デフォルトタイプ アプリケーション/オクテットストリーム;
 
  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  # '$status $body_bytes_sent "$http_referer" '
  # '"$http_user_agent" "$http_x_forwarded_for"';
 
  #access_log ログ/access.log メイン;
 
  ファイル送信オン;
  #tcp_nopush オン;
 
  #キープアライブタイムアウト 0;
  キープアライブタイムアウト65;
     
  #gzip 圧縮関数 gzip をオンに設定;
  gzip_min_length 1k;
  gzip_バッファ 4 16k;
  gzip_http_バージョン1.0;
  gzip_comp_レベル6;
  gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
  gzip_vary オン;
   
  #負荷分散バックエンドサーバーリストを設定するアップストリームバックエンド{
    #プロキシ IP の重みが大きいほど、受信するトラフィックが多くなります。逆に、server localhost:8084 weight=50;
    サーバー localhost:8088 重み=50;
  }
   
   
   
  サーバー{
    2022を聴く;
    server_name ローカルホスト;
    文字セット utf-8;
    access_log ログ/wwwroot2.access.log メイン;
    位置 / {
      ルート /data/wwwroot2;
      インデックス index.html index.htm;#インデックスファイル}
  }
  # 仮想ホストセクションサーバー{
    聞く 80;
    server_name ローカルホスト;
    ルート /data/wwwroot1;
    文字セット utf-8;
    #アクセスログ access_log logs/wwwroot1.access.log main;
    # / すべての負荷分散 + リバースプロキシの場所 / {
      ルート /data/wwwroot1;
      インデックス index.html index.htm;#index ファイル proxy_pass http://backend;
    }
 
    エラーページ 404 /404.html;
 
    # サーバーのエラーページを静的ページ /50x.html にリダイレクトします
    #
    エラーページ 500 502 503 504 /50x.html;
    場所 = /50x.html {
      ルートhtml;
    }
 
    # PHP スクリプトを 127.0.0.1:80 で listen している Apache にプロキシします
    #
    #場所 ~ \.php$ {
    # プロキシパス http://127.0.0.1;
    #}
 
    # PHP スクリプトを 127.0.0.1:9000 で待機している FastCGI サーバーに渡します
    #
    #場所 ~ \.php$ {
    #ルートhtml;
    #fastcgi_pass 127.0.0.1:9000;
    # fastcgi_index インデックス.php;
    # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
    #fastcgi_params を含めます。
    #}
 
    # Apacheのドキュメントルートが.htaccessファイルへのアクセスを拒否する
    # nginxのものと一致します
    #
    #場所 ~ /\.ht {
    # すべて拒否;
    #}
  }
 
 
  # IP、名前、ポートベースの設定を組み合わせた別の仮想ホスト
  #
  #サーバー{
  # 8000を聴く;
  # somename:8080 をリッスンします。
  # server_name somename alias another.alias;
 
  # 位置 / {
  #ルートhtml;
  # インデックス index.html index.htm;
  # }
  #}
 
 
  # HTTPS サーバー
  #
  #サーバー{
  # 443 ssl をリッスンします。
  # サーバー名 localhost;
 
  # ssl_certificate cert.pem;
  # ssl_certificate_key cert.key;
 
  # ssl_session_cache 共有:SSL:1m;
  #ssl_session_timeout 5分;
 
  # ssl_ciphers HIGH:!aNULL:!MD5;
  # ssl_prefer_server_ciphers オン;
 
  # 位置 / {
  #ルートhtml;
  # インデックス index.html index.htm;
  # }
  #}
 
}

テスト結果によると、ポート 80 のアドレスにアクセスすると、表示される結果は基本的に 50-50 になります。

ランダムアクセスも

上記の 2 つのスクリーンショットは、2 つの Tomcat サーバーのテスト ファイルに対応しています。

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

以下もご興味があるかもしれません:
  • Linux システムでの nginx サーバーのインストールと負荷分散構成の詳細な説明
  • Linux で Nginx ロード バランシングを使用して複数の Tomcat を構成する方法
  • Linux で nginx ロード バランシングを構築する方法
  • Linuxシステム構成の詳細な説明 nginx ロードバランシング
  • Linux での Nginx 負荷分散構成の使用例の詳細な説明。

<<:  MySQLのファジークエリの要約

>>:  Web 開発 js 文字列連結プレースホルダーと conlose オブジェクト API の詳細な説明

推薦する

ポップアップ効果を実現するにはjsを使用します

この記事の例では、ポップアップ効果を実現するためのjsの具体的なコードを参考までに共有しています。具...

タブステータスバーの切り替え効果を実現するための js と jQuery

今日は、タブ バーをクリックして切り替えるという目的を実現するために、js と jQuery を使用...

Dockerのクイックガイド

Docker は、安全で繰り返し可能な環境でソフトウェアを自動的にデプロイする方法を提供し、コンピュ...

流星効果を実現する JavaScript キャンバス

この記事では、JavaScriptキャンバスで流星の特殊効果を表示するための具体的なコードを参考まで...

Vueでlessを使用する問題を解決する

1. less依存関係をインストールします: npm install less less-loade...

MySQL データをエクスポートする際の secure-file-priv 問題の解決方法

エラー 1290 (HY000) : MySQL サーバーは –secure-file-priv オ...

複数の無関係なテーブルからデータをクエリし、MySQL でページングする方法

MySQL 複数の無関係なテーブルクエリデータとページング機能要件主キーと外部キーの関連付けがない ...

CentOS 8 に htop をインストールする方法のチュートリアル

システムをインタラクティブに監視したい場合は、htop コマンドが最適な選択肢の 1 つです。 ht...

MySQL 8.0 のメモリ関連パラメータの概要

理論的には、MySQL によって使用されるメモリ = グローバル共有メモリ + max_connec...

Linux でファイルをあいまい検索するのに適したコマンドは何ですか?

1. はじめにこの記事では、主に Linux システムでコマンドライン ツールを使用してファイルを...

MySQLデータベースが大きすぎる場合にバックアップと復元を行う方法

コマンド: mysqlhotcopyこのコマンドは、ファイルをコピーする前にテーブルをロックし、不完...

MySQL の文字セットの不一致によって発生する異常な接続テーブルの解決方法

目次1. 解決策2. MySQLの文字セット文字セット検証ルール次のように簡単なテーブルクエリを実行...

ウェブ開発で遭遇した問題と経験

<br />以下は開発中に遭遇した問題と、そこから得た経験です。デバッグに時間がかかりま...

モバイルデバイスで 1 ピクセルの境界線の問題を解決するいくつかの方法 (5 つの方法)

この記事では、モバイルデバイス上の 1 ピクセルの境界線の問題を解決する 5 つの方法を紹介します。...

Vueはダイアログのカプセル化を実装します

目次Vue2 ライティングVue3プラグインのバージョンの記述Vue3 動的コンポーネントの記述書き...