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 によるインターネット サービスのほぼ完璧な再設計

推薦する

CentOS での samba フォルダ共有サーバー構成の詳細な説明

1. はじめに最近、CentOS での開発には多くの不便があることがわかりました。Windows/M...

HTML テーブル マークアップ チュートリアル (2): テーブル境界属性 BORDER

デフォルトでは、テーブルの境界線は 0 ですが、テーブルの境界線を設定できます。基本的な構文<...

LinuxでLVMディスクを拡張する詳細な手順

1.ハードディスクを追加する2. パーティションの状態を確認します: fdisk -l 3. パーテ...

ラベルタグの使用時に発生する問題の分析と解決策

最近何かをするときにラベル タグを使用しました。以前はラベル タグをほとんど使用していなかったため、...

display:olck/none を使用してメニューバーを作成する方法

display:bolck/none によるメニューバーの完成の効果 図 1:まず、完成したエフェク...

Nodeはリクエスト追跡にasync_hooksモジュールを使用します

async_hooks モジュールは、Node.js バージョン 8.0.0 に正式に追加された実験...

Linux viコマンドの知識ポイントと使い方のまとめ

Linux viコマンドの詳しい説明vi エディタは、すべての Unix および Linux システ...

Docker可視化ツールPortainerの導入と中国語翻訳

#docker 検索#docker プルポーター1. イメージを取得した後、中国語パッケージをダウン...

JavaScript でロジック判定コードを最適化する方法

序文日常生活で使用する論理的判断文には、if...else...、switch...case...、...

Reactプロジェクトの新規作成からデプロイまでの実装例

新しいプロジェクトを始めるこの記事では主に、新規プロジェクトを0から1まで取り組むプロセスを記録し、...

Docker コンテナに TensorRT をインストールする際の問題

Ubuntu にインストールされているバージョンをアンインストールします。 sudo apt-get...

Dockerの基本的な手順

目次基本的な指示1. 現在のマシンのコンテナステータスを確認する2. イメージをダウンロードまたは取...

JavaScriptアップロードファイル制限パラメータケースの詳細な説明

プロジェクトシナリオ: 1. アップロードファイルの制限関数: 1. フロントエンド操作による異常な...

Ubuntu 18仮想マシンのクローン作成後に同じIPアドレスになる問題の解決方法

序文最近、仮想マシンを使用して Ubuntu 18.04 をインストールしました。クローン作成後、I...

MySQL タイムスタンプ比較クエリで遭遇する落とし穴と解決策

目次タイムスタンプ比較クエリで遭遇する落とし穴タイムスタンプクエリ範囲の問題タイムスタンプ比較クエリ...