負荷分散に nginx を使用するための 2 つのモジュール:
アップストリームモジュールの解釈 nginx の負荷分散機能は、ngx_http_upstream_module モジュールに依存します。サポートされているプロキシ メソッドは、proxy_pass (通常、リバース プロキシに使用)、fastcgi_pass (通常、動的プログラムとの対話に使用)、memcached_pass、proxy_next_upstream、fastcgi_next_pass、memcached_next_pass です。 アップストリーム モジュールは http{} タグ内に配置する必要があります。 モジュールの書き込み: アップストリームバックエンド{ ip_ハッシュ; サーバー backend1.example.com 重み=5; サーバー backend2.example.com:8080; サーバーbackup1.example.com:8080バックアップ; サーバーbackup2.example.com:8080バックアップ; } 例1: 上流ダイナミック ゾーンupstream_dynamic 64k; サーバー backend1.example.com 重み=5; サーバー backend2.example.com:8080 fail_timeout=5s slow_start=30s; サーバー 192.0.2.1 max_fails=3; サーバー backend3.example.com を解決します。 サーバーbackup1.example.com:8080バックアップ; サーバーbackup2.example.com:8080バックアップ; } 構文の説明: Nginxはデフォルトで4つのスケジューリングアルゴリズムをサポートしています
サーバーモジュールの書き方 サーバーIPのスケジュールステータス server ディレクティブは、バックエンド サーバーの IP アドレスとポートを指定し、負荷分散スケジュールにおける各バックエンド サーバーのステータスを設定することもできます。
fail_timeout、max_fails 回の失敗後にサービスを一時停止するまでの時間。 JD.com は 3s、ChinaCache は 3s で、ビジネス ニーズに応じて構成されます。日常業務では 2 ~ 3 秒が妥当です。 サーバーがドメイン名に接続する場合、イントラネット上に DNS サーバーが必要になるか、ロード バランサーの hosts ファイルでドメイン名の解決が実行されます。サーバーは IP ポートまたは IP plus ポートに直接接続することもできます。 長い接続キープアライブ アップストリームバックエンド{ サーバー backend2.example.com:8080; サーバーbackup1.example.com:8080バックアップ; キープアライブ100; } このディレクティブは、各ワーカー プロセスがアップストリーム サーバーにキャッシュできるアイドル接続の最大数を設定します。 位置 / { # キープアライブをサポート プロキシ_http_バージョン 1.1; proxy_set_header 接続 ""; proxy_pass http://バックアップ; }
接続プールの構成に関する推奨事項
アイドル接続プールが小さすぎるため、接続が不十分であり、継続的に接続を確立する必要があります。 ロケーションモジュールの解釈 ロケーション機能: ディレクティブに基づいて URI を設定します。 基本的な構文: 構文: location [ = | ~ | ~* | ^~ ] uri { ... } 場所 @name { ... } デフォルト: - コンテキスト: サーバー、場所
マッチングは優先度に基づいて行われ、nginx 構成ファイルに従って実行されるわけではありません。 公式の例: 場所 = / { [ 構成A ] } 位置 / { [ 構成 B ] } 場所 /documents/ { [ 構成 C ] } 場所 ^~ /images/ { [ 構成 D ] } 場所 ~* \.(gif|jpg|jpeg)$ { [ 構成 E ] } 結論は:
テスト例: 位置 / { 401 を返します。 } 場所 = / { 402 を返します。 } 場所 /documents/ { 403 を返します。 } 場所 ^~ /images/ { 404 を返します。 } 場所 ~* \.(gif|jpg|jpeg)$ { 500を返します。 } テスト結果(重点): [root@lb01 conf]# curl -I -s -o /dev/null -w "%{http_code}\n" http://10.0.0.7/ 402 [root@lb01 conf]# curl -I -s -o /dev/null -w "%{http_code}\n" http://10.0.0.7/index.html 401 [root@lb01 conf]# curl -I -s -o /dev/null -w "%{http_code}\n" http://10.0.0.7/documents/document.html 403 [root@lb01 conf]# curl -I -s -o /dev/null -w "%{http_code}\n" upload/2022/web/1.gif 404 [root@lb01 conf]# curl -I -s -o /dev/null -w "%{http_code}\n" upload/2022/web/1.gif 500 結果の要約: 一致の優先順位は、=>^~ (正規表現を無視して固定文字列に一致) > 完全に等しい >~* > 空 >/ です。 作業するときは、先頭に「=」を付けてください Proxy_pass モジュールの説明 proxy_pass ディレクティブは ngx_http_proxy_module モジュールに属し、リクエストを別のサーバーに転送できます。 書き方: 例1: アップストリーム blog_real_servers { サーバー 10.0.0.9:80 重み=5; サーバー 10.0.0.10:80 重み=10; サーバー 10.0.0.19:82 重み=15; } サーバー{ 聞く 80; サーバー名 blog.etiantian.org; 位置 / { proxy_pass http://blog_real_servers; proxy_set_header ホスト $host; } }
実際のフロントエンドIPを受信するようにバックエンドサーバーを構成する 構成は次のとおりです。 log_format commonlog '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; rs_apache ノードの httpd.conf 構成 ログフォーマット "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{U ser-Agent}i\"" 結合された変更ログ Apache ログフォーマット "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b" 共通 proxy_passに関連する最適化パラメータ
健康チェック Nginx は、ロード (アップストリーム) 中に重要なヘルス チェック メカニズムを提供する health_check ステートメントを提供します (注: このステートメントは、場所のコンテキストで設定する必要があります)。 サポートされているパラメータは次のとおりです。
デフォルト値を使用した簡単なセットアップは次のとおりです。 位置 / { proxy_pass http://backend; ヘルスチェック; } アプリケーションでは、ヘルスチェック専用の API (/api/health_check) を定義し、HTTP ステータス コード 200 のみを返すことができます。 2 つのチェック間の間隔値を 1 秒に設定します。したがって、health_check ステートメントの構成は次のようになります。 health_check uri="/api/health_check" 間隔; マッチング方法 http { サーバー{ ... 位置 / { proxy_pass http://backend; health_check 一致 = ようこそ; } } マッチ歓迎{ ステータス 200; ヘッダー Content-Type = text/html; body ~ "nginx へようこそ!"; } } 試合例
完全な nginx インスタンス [root@lb01 conf]# cat nginx.conf ワーカープロセス 1; イベント { ワーカー接続 1024; } http { mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; ファイル送信オン; キープアライブタイムアウト65; #blog lb by oldboy at 201303 アップストリーム blog_real_servers { サーバー 10.0.0.9:80 weight=1 max_fails=1 fail_timeout=10s; サーバー 10.0.0.10:80 weight=1 max_fails=2 fail_timeout=20s; } サーバー{ 聞く 80; サーバー名 blog.etiantian.org; 位置 / { proxy_pass http://blog_real_servers; proxy.conf をインクルードします。 } } } [root@lb01 conf]# cat proxy.conf proxy_set_header ホスト $host; proxy_set_header X-Forwarded-For $remote_addr; プロキシ接続タイムアウト 90; プロキシ送信タイムアウト 90; プロキシ読み取りタイムアウト 90; プロキシバッファサイズ 4k; プロキシバッファ 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; 拡張機能 リクエストにはGET、HEAD、POSTメソッドのみ使用できます。 ## これらのリクエストメソッドのみを許可する ## $request_method !~ ^(GET|HEAD|POST)$ の場合 { 444を返します。 } 実際の戦闘 URI と場所に基づいて静的データと動的データを分離します。 最終的な実装:
[root@lb01 conf]# cat nginx.conf ワーカープロセス 1; イベント { ワーカー接続 1024; } http { mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; ファイル送信オン; キープアライブタイムアウト65; #blog lb by oldboy at 201303 アップストリームstatic_pools { サーバー 10.0.0.9:80; } アップストリームダイナミックプール{ サーバー 10.0.0.10:80; } アップストリームアップロードプール{ サーバー 10.0.0.9:80; } サーバー{ 聞く 80; サーバー名 blog.biglittleant.cn; 位置 / { proxy_pass http://static_pools; proxy.conf をインクルードします。 } 場所 /static/ { proxy_pass http://static_pools; proxy.conf をインクルードします。 } 場所 ~* \.(gif|jpg|jpeg)$ { proxy_pass http://static_pools; proxy.conf をインクルードします。 } 場所 /dynamic/ { proxy_pass http://dynamic_pools; proxy.conf をインクルードします。 } 場所 /アップロード/ { proxy_pass http://upload_pools; proxy.conf をインクルードします。 } } } AppleとAndroidの携帯電話に異なるアドレスを実装する サーバー{ 聞く 80; サーバー名 blog.etiantian.org; 位置 / { ($http_user_agent ~* "android") の場合 { proxy_pass http://android_pools; } ($http_user_agent ~* "iphone") の場合 { proxy_pass http://iphone_pools; } proxy_pass http://pc_pools; extra/proxy.conf をインクルードします。 } access_log オフ; } 参照ドキュメント nginx-proxy_pass 公式サイト 負荷分散モジュールの解釈に nginx を使用する方法に関するこの記事はこれで終わりです。より関連性の高い nginx 負荷分散コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: vue keepAlive キャッシュクリア問題事例の詳細な説明
この記事の冒頭で、以前書いた入門記事の間違いを訂正したいと思います。初心者を再び誤解させないように、...
この記事の例では、どこにでも移動できるフローティングボタンを実現するためのVueの具体的なコードを共...
目次1. 操作要素1.1. 要素コンテンツの変更1.2. innerText と innerHtml...
MySQLは独立した書き込み分離を設定します。コードに次のものを書くと問題が発生する可能性があります...
1. ファイアウォール設定ファイルを変更する # vi /etc/sysconfig/iptable...
目次echartの初期化アプリベースチャートコンポーネントhtml CS app-base-char...
目次1. Dockerはリモートアクセスを可能にする2. Intellij IDEAにDockerプ...
インデックス拡張: InnoDB は、プライマリ キー列をそのインデックスに追加することで、各セカン...
目次安定導入手ぶれ補正シーン1(マウスの動き込み)手ぶれ補正シーン2(キーボードのキー)関数のスロッ...
目次ブラウザカーネルJavaScript エンジンV8エンジンJavaScript がどのように実行...
基本的な紹介前回の記事では、CSS3 のフレックスボックスを紹介しました。今日は、CSS3 のもう ...
とても嬉しいです。この問題に遭遇したとき、私はDockerコンテナのプロセス原理について話さなければ...
インターネット上には Linux サーバーを監視するためのツール、コンポーネント、プログラムが多数あ...
類似の構造:コードをコピーコードは次のとおりです。 <div></div>&...
質問Nginx は $remote_addr を実際の IP アドレスとして受け取りますが、実際には...