ALBに登録したターゲットグループのターゲット(EC2)に対するヘルスチェックを行う際に、ターゲット側のnginxの設定で少し詰まったので記録。
前提
-
ターゲットグループ
- ALBから
HTTP:80
でリクエストを受け付けている
- ALBから
-
EC2
- アプリケーションサーバーをポート8080で起動している
- ヘルスチェックのパスは
/api/ping
- サーバー内からは
http://localhost:8080/api/ping
でアクセス可能 - 今回はサーバー内でアプリが正常に起動した状態をもってhealthyとしています
ターゲットグループのヘルスチェック設定
- プロトコル :
HTTP
- パス :
/ping
デフォルト設定について
-
HealthCheckProtocol
: ヘルスチェックのプロトコル。ALBの場合はHTTPまたはHTTPS (デフォルトはHTTP) -
HealthCheckPort
: ヘルスチェックのポート。(デフォルトはターゲットグループで設定しているポート) -
HealthCheckPath
: ヘルスチェックのパス。(デフォルトは/
)
EC2のnginx設定
nginx.conf
server {
listen 80 default_server;
# Health Check By ALB
location = /ping {
access_log off;
proxy_pass http://localhost:8080/api/ping;
}
}
- ターゲットグループの設定により、ターゲットに対して
http://{private-ip}/ping
へGETリクエストが送信されます(private-ip
はターゲットの内部IP) - NginxはHostヘッダ
private-ip
をdefault_server
に向けます(他にserver_name {private-ip}
の設定を行っていない場合) -
http://localhost:8080/api/ping
へリダイレクトされます
これにより設定が完了し、ターゲットEC2のアプリケーションのping結果を元にヘルスチェックができるようになりました。