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. 実践: 重み付き負荷均衡設定を適用し、必要に応じて監視を行います

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ