Nginx の負荷分散と動的および静的分離の原理と構成

Nginx の負荷分散と動的および静的分離の原理と構成

1. Nginxは負荷分散の原則を実装する

Nginxはリバースプロキシを通じて負荷分散を実装します


Nginx サーバーはフロントエンドとして使用され、Tomcat サーバーはバックエンドとして使用され、Web ページの要求は Nginx サービスによって転送されます。

ただし、すべての Web 要求を転送するのではなく、静的ページ要求は Nginx サーバー自体によって処理され、動的ページ要求はバックエンドの Tomcat サーバーに転送されて処理されます。

Tomcat は軽量なアプリケーション サーバーであり、受け入れ可能なトラフィックの量が不足する可能性があるため、複数の Tomcat サーバーが必要であり、 Nginx を使用して重みを構成して処理する Tomcat サーバーを選択するという負荷分散戦略が必要です

Nginx サーバー

1.ホームページで完全一致を使用する

2. 静的ページは通常のマッチングを使用して自分で処理します

3. 動的ページは正規表現を使用して、jspで終わるリクエストを照合し、proxy_passを使用してTomcatサーバーに転送します。

2. Nginxの動的および静的分離の原則

サーバーは、静的リソースと動的リソースの両方を含むクライアントからのリクエストを受信します。静的リソースは Nginx によって提供され、動的リソースは Nginx によってバックエンドに転送されます。

Nginx の静的処理の利点

  • NginxはTomcatよりも静的ページの処理がはるかに効率的です
  • Tomcatのリクエスト量が1000倍だとすると、Nginxのリクエスト量は6000倍になる。
  • Tomcatのスループットは毎秒0.6M、Nginxのスループットは毎秒3.6Mです。
  • Nginxの静的リソース処理能力はTomcatの6倍です

3. Nginx + Tomcat の動的および静的分離、負荷分散構成手順

環境準備:

Nginx サーバー: 192.168.121.13

Tomcat サーバー 1: 192.168.121.12:8080 192.168.121.12:8081

Tomcat サーバー 2: 192.168.121.10

1. Nginxロードバランシングサーバーを導入する

まず、nginx-1.12.0.tar.gz圧縮パッケージを/optディレクトリにアップロードします。systemctl stopfirewalld.service 
systemctl は、firewalld.service を無効にします。 
強制0を設定する

yum インストール -y pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

ユーザー追加 -M -s /sbin/nologin nginx
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/

nginx-1.12.0をインストールします
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--ファイル付きAIO\
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http_flv_module \ で始まる
--http_ssl_module を使用する

作成 && インストール

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

vim /lib/systemd/system/nginx.service
[ユニット]
説明=nginx
後=ネットワーク.ターゲット
[サービス]
タイプ=フォーク
PIDファイル = /usr/local/nginx/logs/nginx.pid
実行開始=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
プライベートTmp=true
[インストール]
WantedBy=マルチユーザー.ターゲット

chmod 754 /lib/systemd/system/nginx.service
systemctl nginx.service を起動します
systemctl で nginx.service を有効にする

2. 2つのTomcatアプリケーションサーバーを展開する

必要なインストール パッケージは次のとおりです。
apache-tomcat-9.0.16.tar.gz  
jdk-8u201-linux-x64.rpm 
#scp apache-tomcat-9.0.16.tar.gz [email protected]:/opt #必要な圧縮パッケージをTomcat1からTomcat2サーバーにアップロードします。もちろん、圧縮パッケージを/optディレクトリに直接プルすることもできます。systemctl stop firewalld.service 
systemctl は、firewalld.service を無効にします。 
強制0を設定する

rpm -qpl jdk-8u201-linux-x64.rpm
rpm -ivh jdk-8u201-linux-x64.rpm 
java バージョン

vim /etc/profile.d/java.sh
JAVA_HOME=/usr/java/jdk1.8.0_201-amd64 をエクスポートします。
エクスポート CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$JAVA_HOME/bin:$PATH をエクスポートします

ソース /etc/profile.d/java.sh
java バージョン

cd /opt
vim の abc.java
パブリッククラスabc {
  パブリック静的void main(String[] args){
    System.out.println("Hello World!")
  }
}

[root@localhost?opt]#javac abc.java #JDK環境が正常に設定されているかどうかを検出するために使用されます [root@localhost?opt]#java abc
「こんにちは世界」

cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
Apache Tomcat 9.0.16 を実行します。

##Tomcat を起動します##
ローカルのtomcat
netstat -natp | grep 8080


動的および静的分離構成

(1) Tomcat1サーバーの設定 mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ ページ言語="java" インポート="java.util.*" ページエンコーディング="UTF-8"%>
<html>
<ヘッド>
<title>JSP test1 ページ</title> #test1 ページとして指定</head>
<本文>
<% out.println("動的ページ 1、http://www.test1.com");%>
</本文>
</html>


vim /usr/local/tomcat/conf/server.xml
#ホスト名がlocalhostとして設定されているため、以前のHOST設定を削除する必要があります <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <コンテキスト docBase="/usr/local/tomcat/webapps/test" パス="" 再ロード可能="true">
 </コンテキスト>
</ホスト>

シャットダウン 
ローカルのtomcat 

(2) Tomcat2サーバーの設定 mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test

vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ ページ言語="java" インポート="java.util.*" ページエンコーディング="UTF-8"%>
<html>
<ヘッド>
<title>JSP test2 ページ</title> #test2 ページとして指定</head>
<本文>
<% out.println("動的ページ 2、http://www.test2.com");%>
</本文>
</html>


vim /usr/local/tomcat/tomcat1/conf/server.xml
#以前のHOST構成を削除します <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <コンテキスト docBase="/usr/local/tomcat/tomcat1/webapps/test" パス="" 再ロード可能="true" />
</ホスト>

シャットダウン 
ローカルのtomcat1/bin/startup.sh 


vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ ページ言語="java" インポート="java.util.*" ページエンコーディング="UTF-8"%>
<html>
<ヘッド>
<title>JSP test3 ページ</title> #test3 ページとして指定</head>
<本文>
<% out.println("動的ページ 3、http://www.test3.com");%>
</本文>
</html>


vim /usr/local/tomcat/tomcat2/conf/server.xml
#以前のHOST構成を削除します <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <コンテキスト docBase="/usr/local/tomcat/tomcat2/webapps/test" パス="" 再ロード可能="true" />
</ホスト>

シャットダウン 
ローカル

Nginx 負荷分散モード

rr 負荷分散モード:

各リクエストは、時系列順に異なるバックエンド サーバーに割り当てられます。最大失敗回数 (max_fails、デフォルトは 1) を超えると、失敗時間 (fail_timeout、デフォルトは 10 秒) 内に、ノードの失敗重みは 0 になります。失敗時間が経過すると、正常に戻ります。または、すべてのノードがダウンした場合は、すべてのノードが有効に復元され、検出を継続します。一般的に、rr は重みに応じて均等に分散できます。

least_conn 最小接続数:

現在接続が最も少ないサーバーにクライアント要求を優先的にディスパッチします。

ip_hash 負荷分散モード:

各リクエストはアクセス IP のハッシュ結果に従って割り当てられるため、各訪問者は固定のバックエンド サーバーにアクセスし、セッションの問題を解決できます。ただし、ip_hash は負荷の不均一を引き起こします。一部のサービスはより多くのリクエストを受け取りますが、他のサービスはより少ないリクエストを受け取ります。したがって、ip_hash モードの使用は推奨されません。セッション共有の問題は、nginx の ip_hash の代わりにバックエンド サービスのセッション共有を使用することで解決できます。

公平な(サードパーティ)負荷分散モード:

リクエストはバックエンド サーバーの応答時間に基づいて分散され、応答時間が短いリクエストが優先されます。

url_hash (サードパーティ) 負荷分散モード:

ip_hash アルゴリズムと同様に、URL のハッシュ結果に応じて各リクエストを分散し、各 URL が同じバックエンド サーバーに送信されるようにしますが、分散が不均一になるという問題も発生します。このモードは、バックエンド サーバーがキャッシュされている場合に適しています。

要約する

Nginx の負荷分散と動的および静的分離の原理と構成に関するこの記事はこれで終わりです。Nginx の負荷分散と動的および静的分離に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 動的および静的分離のための Apache または Tomcat を使用した Nginx の基本構成例
  • Nginx+uWsgi を使用して Python の Django フレームワーク サイトの動的部分と静的部分を分離する
  • nginx + tomcatリバースプロキシと動的および静的分離のシンプルな実装
  • 静的Tomcatと動的Tomcatを分離するnginxの詳細な説明
  • nginxは負荷分散と動的および静的分離を実現します
  • 動的および静的分離を実装するための Nginx サンプル コード
  • Nginx+Apache の動的および静的分離の導入の詳細な例
  • 動的および静的分離を実現する nginx のサンプルコード
  • Nginx は動的と静的の分離を実装します 例の説明
  • Nginx の動的および静的分離実装ケースのコード分析
  • Springmvc nginxで動的と静的の分離を実現するプロセスの詳細な説明
  • 負荷分散と動的および静的分離操作を実現するDocker NginxコンテナとTomcatコンテナ
  • 負荷分散と動的・静的分離を実現するNginx+Tomcatの原理の分析
  • nginx が動的と静的の分離を実装する方法の例
  • インストールから設定までの nginx の詳細な手順 (インストール、セキュリティ設定、ホットリンク防止、動的および静的分離、HTTPS 設定、パフォーマンスの最適化)
  • Nginx+Tomcat 負荷分散と動的および静的分離クラスタの実装
  • 動的および静的分離を実現するサーバー負荷分散 nginx+tomcat
  • Nginx の動的および静的分離構成の実装と説明

<<:  CSSは、他のレイヤーを変更せずに、多層ネスト構造の最外層を回転させる効果を実現します。

>>:  Facebook によるインターネット サービスのほぼ完璧な再設計

推薦する

JavaScript 配列と非配列オブジェクトのディープ クローンとシャロー クローンの原則の詳細な説明

目次シャロークローニングとディープクローニングとは何ですか? 1. アレイのクローンを作成する1.1...

設定ファイルを書いてMyBatisを簡単に使う方法

設定ファイルを書いてMyBatisを簡単に使う方法マイバティス3.xここでは MyBatis につい...

Linux で Squid プロキシ サーバーを構築するための完全な手順

序文この記事では、Linux で Squid プロキシ サーバーを設定することに関する関連コンテンツ...

nginx での listen ディレクティブの例の分析

プロットレビュー前回の記事では、ロケーション命令の解析プロセスを分析しました。この内容を簡単に確認し...

CentOS8でのDockerの使い方の詳しい説明

1. CentOS8でのDockerのインストール カール https://download.doc...

WeChatアプレットは写真の撮影とアルバムからの写真の選択を実現します

この記事では、WeChatアプレットで写真を撮ったり、アルバムから写真を選択したりするための具体的な...

プレーヤー機能を実現するためのvue + element uiのサンプルコード

効果画像のない表示は単なる空虚な言葉です。 1. オーディオをベースにし、elementUI と組み...

1 つの記事で JSON (JavaScript Object Notation) を理解する

目次JSONが登場JSON構造JSONオブジェクトJson オブジェクトと JavaScript オ...

Dockerコンテナでyumを呼び出すときのエラーの解決方法

dockerfile またはコンテナ内で yum を実行すると、エラーが報告され、ソースが見つかりま...

Vue での親子コンポーネント通信と、sync を使用して親子コンポーネント データを同期する

目次序文子コンポーネントは親コンポーネントにデータを渡す1. 親コンポーネントから子コンポーネントに...

VueのID認証管理とテナント管理の詳細な説明

目次概要ボタンレベルの権限アイデンティティ認証管理R/U 権限権限の更新テナント管理テナント切り替え...

Linuxのwatchコマンドの使用

1. コマンドの紹介watch コマンドは、指定されたコマンドを定期的に実行し、実行結果を全画面に表...

Vue3 における provide と inject の使用法と原則

序文:親コンポーネントと子コンポーネント間でデータを渡す場合、通常は props と emittin...

W3C チュートリアル (8): W3C XML スキーマのアクティビティ

XML スキーマは、DTD に代わる XML ベースのものです。 XML スキーマは、DTD に代わ...