ホームページ 運用・保守 Nginx 負荷分散にnginxを使用する方法

負荷分散にnginxを使用する方法

Jun 03, 2023 am 08:19 AM
nginx

4 層ロード バランシングと 7 層ロード バランシングの比較

7 層ロード バランシングまたは 4 層ロード バランシングは、実際には次の名前に基づいているとよく言われます。 ISO OSI ネットワーク モデルの層 最終的な決定は、nginx が http プロトコルを使用してアプリケーション層で負荷分散操作を実行するため、nginx が 7 層負荷分散と呼ばれることです。たとえば、tcp 層で負荷分散操作を実行する lvs は、層 4 負荷分散と呼ばれます。一般的に、負荷分散には次の分類があります。

負荷分散にnginxを使用する方法

#共通ソフトウェア サポート

負荷分散にnginxを使用する方法

##一般的な負荷分散アルゴリズム

一般的な負荷分散アルゴリズムは次のとおりです。

負荷分散にnginxを使用する方法

負荷分散のデモ例: 通常のポーリング#次に nginx を使用して、通常のポーリングを実行する方法を示します。

負荷分散にnginxを使用する方法

事前の準備

事前に、2 つのポート 7001/7002 で 2 つのサービスを起動して、異なる情報を表示します。デモンストレーションの便宜上、tornado を使用してミラーを作成しました。Docker コンテナーの起動時に渡されるパラメーターは異なり、サービスの表示に使用されます。

[root@kong ~]# docker run -d -p 7001:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "user service 1: 7001"
ddba0abd24524d270a782c3fab907f6a35c0ce514eec3159357bded09022ee57
[root@kong ~]# docker run -d -p 7002:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "user service 1: 7002"
95deadd795e19f675891bfcd44e5ea622c95615a95655d1fd346351eca707951
[root@kong ~]# 
[root@kong ~]# curl http://192.168.163.117:7001
hello, service :user service 1: 7001
[root@kong ~]# 
[root@kong ~]# curl http://192.168.163.117:7002
hello, service :user service 1: 7002
[root@kong ~]#

Start nginx

[root@kong ~]# docker run -p 9080:80 --name nginx-lb -d nginx 
9d53c7e9a45ef93e7848eb3f4e51c2652a49681e83bda6337c89a3cf2f379c74
[root@kong ~]# docker ps |grep nginx-lb
9d53c7e9a45e    nginx           "nginx -g 'daemon ..."  11 seconds ago   up 10 seconds    0.0.0.0:9080->80/tcp                         nginx-lb
[root@kong ~]#

nginx コード スニペット

次の nginx コード スニペットを準備し、nginx/etc に追加します。

http {
upstream nginx_lb {
  server 192.168.163.117:7001;
  server 192.168.163.117:7002;
}
server {
  listen    80;
  server_name www.liumiao.cn 192.168.163.117;
  location / {
    proxy_pass http://nginx_lb;
  }
}

/nginx/conf.d/default.conf のdefault.conf を変更する方法

コンテナに vim をインストールすることで効果を得ることができます。ローカルで変更して docker cp 経由で渡すことも、sed で直接変更することもできます。 vim をコンテナにインストールする場合は、次の方法を使用します。

[root@kong ~]# docker exec -it nginx-lb sh
# apt-get update
...省略
# apt-get install vim
...省略

変更前

# cat default.conf
server {
  listen    80;
  server_name localhost;
  #charset koi8-r;
  #access_log /var/log/nginx/host.access.log main;
  location / {
    root  /usr/share/nginx/html;
    index index.html index.htm;
  }
  #error_page 404       /404.html;
  # redirect server error pages to the static page /50x.html
  #
  error_page  500 502 503 504 /50x.html;
  location = /50x.html {
    root  /usr/share/nginx/html;
  }
  # proxy the php scripts to apache listening on 127.0.0.1:80
  #
  #location ~ \.php$ {
  #  proxy_pass  http://127.0.0.1;
  #}
  # pass the php scripts to fastcgi server listening on 127.0.0.1:9000
  #
  #location ~ \.php$ {
  #  root      html;
  #  fastcgi_pass  127.0.0.1:9000;
  #  fastcgi_index index.php;
  #  fastcgi_param script_filename /scripts$fastcgi_script_name;
  #  include    fastcgi_params;
  #}
  # deny access to .htaccess files, if apache's document root
  # concurs with nginx's one
  #
  #location ~ /\.ht {
  #  deny all;
  #}
}
#

変更後

# cat default.conf
upstream nginx_lb {
  server 192.168.163.117:7001;
  server 192.168.163.117:7002;
}
server {
  listen    80;
  server_name www.liumiao.cn 192.168.163.117;
  #charset koi8-r;
  #access_log /var/log/nginx/host.access.log main;
  location / {
    #root  /usr/share/nginx/html;
    #index index.html index.htm;
    proxy_pass http://nginx_lb;
  }
  #error_page 404       /404.html;
  # redirect server error pages to the static page /50x.html
  #
  error_page  500 502 503 504 /50x.html;
  location = /50x.html {
    root  /usr/share/nginx/html;
  }
  # proxy the php scripts to apache listening on 127.0.0.1:80
  #
  #location ~ \.php$ {
  #  proxy_pass  http://127.0.0.1;
  #}
  # pass the php scripts to fastcgi server listening on 127.0.0.1:9000
  #
  #location ~ \.php$ {
  #  root      html;
  #  fastcgi_pass  127.0.0.1:9000;
  #  fastcgi_index index.php;
  #  fastcgi_param script_filename /scripts$fastcgi_script_name;
  #  include    fastcgi_params;
  #}
  # deny access to .htaccess files, if apache's document root
  # concurs with nginx's one
  #
  #location ~ /\.ht {
  #  deny all;
  #}
}
#

nginx コンテナを再起動します

[root@kong ~]# docker restart nginx-lb
nginx-lb
[root@kong ~]#

結果を確認します

ポーリングが次の順序で実行されていることがはっきりとわかります:

[root@kong ~]#curl
hello、サービス :ユーザー サービス 1: 7001

[root@kong ~]#curl
hello、サービス :ユーザー サービス 1: 7002
[root@kong ~]#カール
こんにちは、サービス:ユーザーサービス1:7001
[root@kong ~]#カール
こんにちは、サービス:ユーザーサービス1:7002
[root@kong ~]

##ロード バランシングのデモンストレーション例: ウェイト ポーリング

#これに基づいて、ウェイト ポーリングを実行するにはウェイトを追加するだけで済みます

#default.conf を変更します

負荷分散にnginxを使用する方法#default.conf を次のように変更します

# cp default.conf default.conf.org
# vi default.conf
# diff default.conf default.conf.org
2,3c2,3
<   server 192.168.163.117:7001 weight=100;
<   server 192.168.163.117:7002 weight=200;
---
>   server 192.168.163.117:7001;
>   server 192.168.163.117:7002;
#

nginx コンテナを再起動します

[root@kong ~]# docker restart nginx-lb
nginx-lb
[root@kong ~]#

結果の確認

1/3 と 2/3 の比率で投票結果が行われていることがわかります:

[root @kong ~]#curlhello、サービス :ユーザー サービス 1: 7001

[root@kong ~]#curl

hello、サービス :ユーザー サービス 1: 7002

[root@kong ~] #カール
こんにちは、サービス:ユーザーサービス1: 7002

[root@kong ~]

#

以上が負荷分散にnginxを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Stock Market GPT

Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

PHPを使用してQ&Aコミュニティプラットフォームの開発方法PHPインタラクティブコミュニティの収益化モデルの詳細な説明 PHPを使用してQ&Aコミュニティプラットフォームの開発方法PHPインタラクティブコミュニティの収益化モデルの詳細な説明 Jul 23, 2025 pm 07:21 PM

1. PHP開発の質問と回答コミュニティにおけるLaravel MySQL VUE/Reactの組み合わせの最初の選択は、生態系の成熟度と高開発効率のため、Laravel MySQL Vue/Reactの組み合わせの最初の選択肢です。 2。高性能では、キャッシュ(REDIS)、データベース最適化、CDN、非同期キューへの依存が必要です。 3.入力フィルタリング、CSRF保護、HTTPS、パスワード暗号化、許可制御を使用してセキュリティを行う必要があります。 4。オプションの広告、メンバーのサブスクリプション、報酬、委員会、知識の支払い、その他のモデル、コアはコミュニティトーンとユーザーのニーズに合わせることです。

nginxの「オープンファイルが多すぎる」エラーの原因は何ですか? nginxの「オープンファイルが多すぎる」エラーの原因は何ですか? Jul 05, 2025 am 12:14 AM

nginxが「ToomyopenFiles」エラーを経験する場合、通常、システムまたはプロセスがファイル記述子の制限に達したためです。ソリューションには、次のものが含まれます。1。Linuxシステムのソフト制限とハードリミットを増やし、nginxの関連パラメーターを設定するか、/etc/security/limits.confでユーザーを実行します。 2. NginxのWorker_Connections値を調整して、予想されるトラフィックに適応し、過負荷の構成を確認します。 3.システムレベルのファイル記述子の上限を増やし、file-max、edit /etc/sysctl.confを編集し、変更を適用します。 4. open_lの使用など、ログとリソースの使用を最適化し、不要なファイルハンドルの使用量を削減します

NGINXとPHPサービスの組み合わせを構成するためにMACOSを使用してPHP Nginx環境を構築する方法 NGINXとPHPサービスの組み合わせを構成するためにMACOSを使用してPHP Nginx環境を構築する方法 Jul 25, 2025 pm 08:24 PM

MAC環境の構築におけるHomebrewの中心的な役割は、ソフトウェアのインストールと管理を簡素化することです。 1. Homebrewは、依存関係を自動的に処理し、複雑な編集プロセスとインストールプロセスを簡単なコマンドにカプセル化します。 2。ソフトウェアのインストールの場所と構成の標準化を確保するために、統一されたソフトウェアパッケージエコシステムを提供します。 3.サービス管理機能を統合し、BrewServicesを介してサービスを簡単に開始および停止できます。 4.便利なソフトウェアのアップグレードとメンテナンス、およびシステムのセキュリティと機能を改善します。

Kubernetesを使用してPHP環境を一貫した生産とローカルコンテナ構成標準に保つ方法 Kubernetesを使用してPHP環境を一貫した生産とローカルコンテナ構成標準に保つ方法 Jul 25, 2025 pm 06:21 PM

PHP環境と生産の間の矛盾の問題を解決するために、コアはKubernetesのコンテナ化とオーケストレーション機能を使用して環境の一貫性を実現することです。特定の手順は次のとおりです。1。すべてのPHPバージョン、拡張機能、依存関係、Webサーバー構成を含む統一されたDockerイメージを構築して、開発と生産で同じ画像が使用されるようにします。 2. KubernetesのconfigMapとSecretを使用して、非感受性および敏感な構成を管理し、ボリュームマウントまたは環境可変噴射を介したさまざまな環境構成の柔軟な切り替えを実現します。 3.統一されたKubernetes展開定義ファイル(展開やサービスなど)を介してアプリケーションの動作の一貫性を確保し、バージョンコントロールに含める。 4。

ロケーションブロック(名前付き場所)で @とはどういう意味ですか? ロケーションブロック(名前付き場所)で @とはどういう意味ですか? Jul 09, 2025 am 01:49 AM

nginx構成では、ロケーションブロック内の @シンボルを使用して、指定された場所を定義します。これらは内部で使用されているエンドポイントであり、クライアントリクエストによって直接一致することはできません。通常、ERROR_PAGE、try_files、または書き換えディレクティブを介して呼び出されます。 1。命名場所は @で始まります。たとえば、location@notfoundは直接リクエストに応答するのではなく、他の構成部品からトリガーします。 2。カスタムエラー処理、内部ルーティング、バックエンドエージェントのバッキングによく使用されます。 3.たとえば、try_filesと組み合わせて、静的ファイルが存在しない場合は@backendに転送します。 4。メモには、直接アクセスされず、紛争の命名を避け、記述名を使用します。名前付きの場所には含まれます

PHPを使用してeコマースバックエンド収益化PHP eコマースシステムアーキテクチャと利益戦略を開発する方法 PHPを使用してeコマースバックエンド収益化PHP eコマースシステムアーキテクチャと利益戦略を開発する方法 Jul 25, 2025 pm 06:33 PM

1. PHP Eコマースバックエンドの主流のフレームワークには、Laravel(高速開発、強力な生態学)、Symfony(エンタープライズレベル、安定した構造)、YII(優れたパフォーマンス、標準化されたモジュールに適しています)が含まれます。 2。テクノロジースタックには、MySQL Redisキャッシュ、RabbitMQ/Kafkaメッセージキュー、NGINX PHP-FPM、およびフロントエンド分離を装備する必要があります。 3.高並行性アーキテクチャを階層化し、モジュラー、データベースの読み取りおよび書き込み分離/分散データベース、キャッシュとCDNで加速し、タスクの非同期処理、ロードバランスとセッションの共有、徐々にマイクロサービス、および監視とアラームシステムの確立を行う必要があります。 4.複数の収益化パスには、製品価格の差額またはプラットフォームコミッション、サイト広告、SaaSサブスクリプション、カスタマイズされた開発およびプラグインマーケット、API接続が含まれます

リロード前に構文エラーをNGINX構成をテストする方法は? リロード前に構文エラーをNGINX構成をテストする方法は? Jul 13, 2025 am 01:06 AM

NGINX構成を変更した後、最初に構文をテストしてからサービスをリロードする必要があります。 1. nginx-Tを使用して、構成ファイルの構文を確認します。プロンプト「Syntaxisok」と「testissuccessful」がプロンプトされた場合、それは正しいことを意味します。エラーがある場合、特定の問題行が表示されます。 2.構成ファイルのアクセス許可が高い場合、sudonginx-tを使用して実行する必要があります。 3.テストが実際にロードされていることを確認してください。 Nginx-T-C/path/to/your/nginx.confを介してパスを指定するか、メインプロセスでPS-EF | grepnginxを介して使用される構成ファイルを表示できます。 4。テストに合格したら、sudonginx-sreloadオーバーロードサービスを実行して、新しい構成を有効にします

PHP環境設定のMongoDBサポートをMongoデータベースに構成する方法 PHP環境設定のMongoDBサポートをMongoデータベースに構成する方法 Jul 23, 2025 pm 06:54 PM

MongoDBをサポートするPHP環境を構成するために、コアステップはMongoDBのPHPドライバーをインストールして有効にして、PHPアプリケーションがMongoDBデータベースと通信できるようにすることです。 1. MongoDBPHPドライバーをインストールすると、PECLを使用してインストールすることをお勧めします。 PECLがない場合は、最初にPHP開発パッケージと関連するコンピレーションツールをインストールする必要があります。 2。PHP.iniファイルを編集し、拡張機能= mongodb.so(または.dll)を追加して拡張機能を有効にします。 3. WebサーバーまたはPHP-FPMサービスを再起動して、構成を有効にします。 4.拡張機能がphpinfo()またはphp-mを介して正常にロードされているかどうかを確認します。よくある質問には、PECLコマンドの欠落、コンピレーションエラー、Php.iniが含まれます

See all articles