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

推薦する

Linux環境でIPV6接続をサポートするようにmysql5.6を設定する方法

導入:この記事では主に、Linux システムで IPV6 接続をサポートするように MySQL を構...

VUEはG2チャートを使用した実装を導入します

目次G2チャートについて使用テンプレートで使用される完全なコード (棒グラフ)世界地図を追加するG2...

js を使用して数字推測ゲームを実装する

先週、先生が私に数字当てゲームをするちょっとした宿題を出しました。とても面白いと思ったので、適当に書...

MySQLのどのフィールドがインデックスに適しているかについての簡単な説明

目次1 データベース インデックスを作成するための一般的なルールは次のとおりです。 2. 数千万件の...

VueプロジェクトでReactを書く方法の詳細

jsx/tsxファイルを直接作成できます今回のプロジェクト構成は以下のとおりです。 vueファイルで...

HTML ハイパーリンク タグ_Powernode Java アカデミー

HTML を学習したり使用したりしたことがある人なら、<a> タグについてよく知っている...

MySQL での find_in_set() 関数の使用に関する詳細な説明

まず、例を見てみましょう。記事テーブルにはタイプフィールドがあり、1 見出し、2 おすすめ、3 ホッ...

WindowsでMysql5.7.17のインストールと起動に失敗する問題を解決する

マシンに初めて MySQL をインストールします。オペレーティングシステムはwin7ですmysqlの...

Windows に Docker と docker-compose スイートをインストールするための詳細なチュートリアル

目次導入ダウンロードしてインストールする設定docker-composeをインストールする導入Doc...

Vue フィルターの使用とタイムスタンプ変換の問題

目次1. 概念をすぐに認識する: 2. ローカルフィルター: 3. グローバルフィルター: 4. 拡...

IE 環境での css-vars-ponyfill の使用に関する詳細な説明 (nextjs ビルド)

css-vars-ポニーフィルCSS 変数を使用して Web ページのスキニングを実現すると、互換...

HTML ベースタグ target=_parent の使用の紹介

<base> タグは、ページ上のすべてのリンクのデフォルトのアドレスまたはデフォルトのタ...

HTML タグ dl dt dd 使用方法

基本構造:コードをコピーコードは次のとおりです。 <ダウンロード> <dt>...

Vue3 トランジションアニメーションの落とし穴記録について

目次背景問題の場所さらなる分析要約する背景私のコース「Vue 3 エンタープライズレベルの音楽アプリ...