LoginSignup
1
2

More than 5 years have passed since last update.

Nginxでメンテナンス中でも別ポートからアクセス可能にする方法

Posted at

概要

Nginxでメンテナンス画面を表示させてかつ、
特定のポートからは普通に画面表示させる方法を調べました。

Nginxでメンテナンス画面を表示させる方法は
「Nginxでお手軽にメンテナンス画面を表示する方法」を参考にしました。

やりたいこと

  • /var/tmpにmaintというファイルがあればメンテナンス中とする
  • メンテナンス中はポート443でアクセスされると強制的にmaintenance.htmlを表示
  • メンテナンス中でなければポート1443でアクセスされると強制的にno_maintenance.htmlを表示

confファイルの設定内容

xxx.conf
server {
  listen       443;
  listen       1443;
・・・
  root /var/www/xxx/public;
  set $maint "";
  set $maint_page "/maintenance.html";
  # maintファイルがあればメンテ中
  if (-e /var/tmp/maint) {
    set $maint MAINT;
  }
  set $maint "${maint}${server_port}";

  # 無限ループを防止
  if ($uri ~ "/maintenance.html") {
    set $maint "";
  }
  if ($uri ~ "/no_maintenance.html") {
    set $maint "";
  }
  if ($uri ~ "/maintenance.jpg") {
    set $maint "";
  }

  # メンテ中で443アクセスの場合は503を返却
  if ($maint = MAINT443) {
    return 503;
  }
  # メンテ中ではなく1443アクセスの場合は503を返却
  if ($maint = 1443) {
    set $maint_page "/no_maintenance.html";
    return 503;
  }
  error_page 503 "${maint_page}";
・・・
}

ifが並んで見づらいですが、Nginxはifを入れ子にできず論理演算子も書けないのでこういう書き方になっています。

(参考:「Nginxで複数条件のIF文を書く方法がすごいw」)

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2