2026年9月7日
2026年9月7日
Nginxでアップストリームの重みを設定する方法(weight)
ステップ1: Nginxのアップストリーム設定でweightを適用する
はじめに
Nginxは、ウェブサーバーとしてだけでなく、効果的な負荷均衡を行うためにも広く利用されています。特に、複数のバックエンドサーバー間でトラフィックを分散させる必要がある場合、upstreamディレクティブを使用して負荷均衡を実現します。しかし、全てのバックエンドサーバーが同じ重みを持っていると、一部のサーバーに過度の負担がかかったり、パフォーマンス低下を招く可能性があります。そこでweightオプションを利用することで、各サーバー間で負荷分散をより効果的に管理することができます。
症状・背景
- ベースとなるウェブサイトやアプリケーションが複数のバックエンドサーバーに分散されている場合
- 各サーバーのリソース利用率が異なるため、パフォーマンスを最大化したい場合
- サーバーのメンテナンスを行いたいが、他のサーバーへの負担がかからないようにしたい場合
ステップ2: weightオプションを使用したupstream設定
ステップ1: upstreamディレクティブの定義
# 2つのサーバーに負荷を分散させる例
upstream backend {
server 192.168.1.101;
server 192.168.1.102 weight=3;
}
この設定では、weight=3が指定されたサーバー192.168.1.102に対してより多くのリクエストが転送されます。
ステップ2: locationブロックでupstreamを使用する
# locationブロック内でupstreamを参照して負荷均衡を行う例
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
}
}
この設定では、/へのリクエストは上記で定義したbackend upstreamに転送されます。
ステップ3: weightオプションの応用
# 4つのサーバー間で負荷を分散させる例
upstream backend {
server 192.168.1.101;
server 192.168.1.102 weight=3;
server 192.168.1.103 weight=2;
server 192.168.1.104 weight=1;
}
この設定では、各サーバーに異なる重みが与えられ、転送されるリクエストの割合も変わります。
ステップ4: 実践/トラブルシュート/監視
# Nginxを再起動して変更を適用する
sudo systemctl restart nginx
注意事項
weightが0に設定されたサーバーは無効化され、リクエストは転送されません。- 重みの値は1以上でなければなりません。0や負数は有効ではありません。
- Nginxは定期的にバックエンドサーバーの状態をチェックしますが、
weight変更後も手動でnginx -s reloadコマンドで再読み込みを行ってください。
まとめ
1. weight: バックエンドサーバー間での負荷分散を効果的に実現するためのオプション
2. upstream設定: Nginxがバックエンドサーバーにリクエストをどのように転送するかを定義します
3. locationブロック: リクエストを特定のupstreamグループに転送します
4. 実践: 重み付き負荷均衡設定を適用し、必要に応じて監視を行います
関連記事: