nginx.confの記述について。バックエンドのWebサーバーがダウンしている場合
解決したいこと
Dockerで複数のウェブサーバーコンテナを実行しています。
Nginxコンテナをリバースプロキシとして運用し、いろいろなドメイン、サブドメイン、サブディレクトリでのアクセスに対し各サイトへルーティングする仕組みを作りたいです。
nginx.confのlocationブロックは以下の表記です。site_14はサービス名・コンテナ名です。
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass "http://site_14:80";
}
site_14コンテナが正常に起動している場合はこの設定で正しくルーティングされています。
しかし、運用上すべてのウェブサーバーコンテナが起動しているとは限らない想定です。
一部は停止していることがある場合、nginx全体が起動に失敗します。
上記の場合、site_14コンテナが停止している場合、
nginxの新規起動や、nginx -s reloadコマンドなどが失敗します。
自分で試したこと
バックエンドのウェブサーバーが一部ダウンしていても有効なnginx.confの書き方を模索しました。
以下のように、変数を使って間接的に指定することで、起動時ではなくリクエスト時にバックエンドの解決を試みるとの情報を得て上手く行きました。
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
set $upstream_site14 "http://site_14:80";
proxy_pass $upstream_site14;
}
ここからが問題です。
サブディレクトリの場合の問題
サブディレクトリにルーティングしたいサイトの場合に上手く行きません。
location /subdir1 {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
set $upstream_site21 "http://site_21:80";
proxy_pass $upstream_site21;
}
ブラウザからアクセスするとNot Foundになります。
どのように修正するのが正しいか、知恵をお貸し下さい。