NginxではリクエストのHostヘッダとserver_nameが一致しなかった場合、一番最初に読み込まれたVirtualHostの設定が適用される。
default_serverを記述することでデフォルトのVirtualHostを設定することができる。
ELBのヘルスチェックはデフォルトのVirtualHostに対してリクエストが行われる。
デフォルトのVirtualHostをそのままサービスに使用すると下記現象が発生する。
・サービスのアクセスログとELBヘルスチェックのアクセスログが混ざる
・IP制限やBasic認証を行うとELBからも見られなくなる →OutOfServiceになる
・設定ファイルが複雑になる
「デフォルトのVirtualHostとサービスのVirtualHostを分ける」ことで解決する。
[1]デフォルト用のVirtualHostを作成する
(1)設定ファイルを作る
/etc/nginx/conf.d/000-default.conf
server { listen 80 default_server; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } }
(2)ファイルを作成する
echo "index" > /usr/share/nginx/html/index.html
[2]サービス用のVirtualHostを作成する
(1)設定ファイルを作る
/etc/nginx/conf.d/001-domain.com.conf
server { listen 80; server_name www.domain.com; server_name domain.com; ...