Nginxによる負荷分散設定ガイド(Windows環境)

システム開発のスキルアップには知識の積み重ねが欠かせません。IISのデプロイを習得した後、次に直面したのがNginxの設定。特に大規模サイトでは負荷分散のためにNginxを導入するケースが多いため、今回はWindows環境でのインストールと基本設定を紹介します。

1. ダウンロードとインストール

公式サイトから安定版(例:nginx-1.10.2)をダウンロードします。ダウンロード後、解凍したフォルダをD:\NGINXに配置し、nginx.exeを直接実行します。ただし、インストールは一瞬で終わり、成功したか分かりにくいです。デフォルトでは80番ポートを使用するため、ブラウザでhttp://localhostにアクセスして動作確認します。何も表示されない場合は、logs\error.logを確認してください。以下はよくあるエラーです。

2016/12/03 21:29:23 [emerg] 6940#1604: bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)

このエラーの主な原因は以下の通りです。

  • ファイアウォールがブロックしている(本環境ではオフ)
  • 他のアプリケーション(例:IIS)が80番ポートを使用している

IISを停止してからnginx.exeを実行すると、エラーが解消されhttp://localhostでNginxの初期ページが表示されます。

2. 負荷分散の設定

2.1 バックエンドサーバーの準備

テスト用にIIS上で2つのWebサイトをホストします。

  • MVCアプリケーション:ポート8080
  • WebFormsアプリケーション:ポート8082

ホストファイル(C:\Windows\System32\drivers\etc\hosts)にカスタムドメインを追加します。

127.0.0.1 admin.cuiyw.com

IISのサイトバインディングでホスト名を「admin.cuiyw.com」に設定します。

2.2 Nginx設定ファイルの編集

設定ファイルconf\nginx.confを以下のように変更します。

worker_processes  4;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    # アップストリームクラスターの定義
    upstream backend_cluster {
        server 127.0.0.1:8080 weight=1;
        server 127.0.0.1:8082 weight=1;
    }

    server {
        listen       8081;
        location / {
            proxy_pass http://backend_cluster;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_connect_timeout    600;
            proxy_read_timeout       600;
            proxy_send_timeout       600;
        }
    }
}

この設定ではNginxが8081ポートで待ち受け、リクエストをbackend_cluster(8080と8082)に均等に分散します。

3. よくあるエラーと対処

設定中に発生しやすいエラー例を以下に示します。

# ポート競合
[emerg] bind() to 0.0.0.0:80 failed (10013: ...)

# 設定ファイルの構文ミス
[emerg] invalid number of arguments in "proxy_pass"

# ワーカーコネクション不足
[alert] 1024 worker_connections are not enough

# アップストリームタイムアウト
[error] upstream timed out (10060: ...)

# ファイルディスクリプタ制限
[error] maximum number of descriptors supported by select() is 1024

エラーが発生したら、まずlogs\error.logを確認し、原因を特定します。

4. 動作確認

ブラウザでhttp://admin.cuiyw.com:8081にアクセスすると、リクエストごとにMVCサイトとWebFormsサイトが交互に表示されます。

タグ: nginx Load Balancing Windows Server IIS Web Server Configuration

5月25日 07:01 投稿