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

推薦する

詳細なアイデアを備えたシンプルな計算機の HTML 実装

コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...

Linux dateコマンドの知識ポイントのまとめ

使用法: date [オプション]... [+フォーマット]または: date [-u|--utc|...

インデックスを設計する際の原則は何ですか? インデックスの障害を回避するにはどうすればよいでしょうか?

目次主キーインデックス頻繁にクエリされるフィールドのインデックスを作成する大きなフィールドのインデッ...

IPとポートが接続可能かどうかを検出する方法

Windows コマンドテルネット形式: telnet IP ポート場合: テルネット 191.1....

MySQLで最新のトランザクションIDを照会する方法

前に書いた内容: ビジネス ロジックの判断を行うために、最新のトランザクション ID を表示する必要...

LinuxにMySQLをインストールするための詳細なチュートリアル

すべてのプラットフォーム用の MySQL ダウンロードは、MySQL ダウンロードから入手できます。...

CSS3で実装されたダイナミックな星空の背景

結果:実装コードhtml <link href='https://fonts.goog...

広告を閉じる効果を実現するJavascript

参考までに、Javascript を使用して広告を閉じる方法に関するケース スタディを示します。詳細...

Vueのref属性の詳細な説明

要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS....

spring-boot と docker-java に基づいて Docker コンテナの動的な管理と監視を実装します [完全なソース コードのダウンロード付き]

Docker入門Docker はオープンソースのアプリケーション コンテナ エンジンです。従来の仮...

ブラウザ間の hr 区切り文字の違い

Webページを作るときに、区切り線hrを使うことがありますが、IE6やIE7で表示するのは非常に苦痛...

WeChatミニプログラム開発のためのコンポーネント設計仕様

WeChat ミニプログラム コンポーネント設計仕様コンポーネントベースの開発という考え方は、私の開...

Vue3 の父子値転送に関する簡単な説明

目次父から息子へ: 1. 親コンポーネントのサブコンポーネントタグに、サブコンポーネントに渡されるデ...

LDAP ユーザー認証を使用するように Linux を構成する方法

私は CentOS に実装された LDAP ユーザー管理を使用しています。これはインターネット上のほ...