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 の詳細な説明

推薦する

CSS で高さが不明な垂直中央揃えを実装する

この記事では主に、高さが不明な垂直方向の中央揃えを CSS で実装する方法を紹介し、皆さんと共有しま...

js は複数の画像を zip にパッケージ化します

目次1. ファイルをインポートする2. HTMLページ3. メインコード4. 画像をbase64に変...

MySQL サーバー 5.7.20 のインストールと設定方法のグラフィック チュートリアル

この記事ではMySQL 5.7.20のインストールと設定方法を記録し、皆さんと共有します1. MyS...

MySQLの文字セットを変更する方法

1. MySQLの文字セットを確認する '%char%' のような変数を表示します。...

VMware 仮想マシンの NAT モードを構成する方法

この記事では、VMware仮想マシンのNAT構成プロセスを詳しく説明します。具体的な内容は次のとおり...

VMware kali仮想マシン環境の設定方法

1|0 カーネルをコンパイルする(1)uname -rコマンドを実行してカーネルバージョンを表示しま...

アコーディオン効果を実現するネイティブ js

実際のWebページ開発でも、アコーディオンは頻繁に登場します。簡単なアコーディオンを作ったのですが、...

MySQL DATE_FORMAT関数の使用

タオバオが、ダブル11に最も多くの注文をした2人のユーザー、ユーザー1:「ショッピングの皇帝、陳哈哈...

ドメイン名、ポート、異なるIPに基づくnginx仮想ホスト設定の実装

1. nginx仮想ホストの設定仮想ホストを使用すると、実行する Web サイトごとに個別の Ngi...

Jupyter Notebook で JavaScript を実行する方法

その後、VSC で Jupyter Notebook を使用する方法も追加しました...アナコンダを...

Centos7 での Mysql5.7.19 の詳細なインストールチュートリアル

1. ダウンロード公式サイトからmysql-5.7.19-linux-glibc2.12-x86_6...

よく使われる HTML タグとその特徴の完全なリスト

まず、HTML タグのいくつかの特性を知っておく必要があります。 1. 「<keyword&g...

要素 el-table テーブルの二次カプセル化 (テーブルの高さの調整付き)

序文会社でのインターンシップ中、フロントエンド開発にはvue+element-uiフレームワークを使...

IDEA が MySQL ポート番号占有に接続できない問題の解決方法

コマンドラインでMYSQLに正常にログインでき、NavicatもMySQLに正常に接続できますが、I...

Javascript Bootstrapのグリッドシステム、ナビゲーションバー、カルーセルの詳細な説明

目次ブートストラップと関連コンテンツの紹介グリッドシステムネストされた列列オフセット列の並べ替えナビ...