動かざることバグの如し

近づきたいよ 君の理想に

Nginxで全リクエストをメンテナンスページにリダイレクトする設定

環境

  • nginx 1.14

やりたいこと

メンテナンスするのですべてのリクエストを遮断したい。けどnginx 404のエラーページ出るのは良くないので、用意した静的htmlファイルを表示させたい。

設定

まずnginxの設定を以下。

server {
    listen       80;
    server_name hogehoge.example.com;

    error_page 503 /sorry.html;
    location /sorry.html {
        root /var/www/;
    }
    location / {
        return 503;
    }
}

で、/var/www/sorry.htmlにメンテナンス告知のHTMLページをつくる。最後にsystemctl reload nginxで完璧

どういう仕組みなの

まず

location / {
  return 503;
}

によって全リクエストが503扱いになる。

しかしこのままだとnginx標準のエラーページが表示されてしまう。よって

error_page 503 /sorry.html;

で、エラーページを指定する。第後に

location /sorry.html {
  root /var/www/;
}

を指定することでsorry.htmlでアクセスのみ/var/www/がroot、結果 /var/www/sorry.htmlが表示されるってわけ