システム開発のスキルアップには知識の積み重ねが欠かせません。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サイトが交互に表示されます。