nginxで特定ホスト以外からのアクセスをメンテナンス画面にする方法

Apacheで特定ホスト以外からのアクセスをメンテナンス画面にする方法 - 元RX-7乗りの適当な日々 の nginx 版。

nginx.conf でこんな感じですかね。

http {
  server {
    listen 80;
    root /tmp;
    error_page 503 /503.html;

    location / {
      if ($remote_addr ~ ^127\.0\.0\.1$ ) {
        break;
      }
      if (-f "/tmp/503") {
        return 503;
      }
    }
    location /503.html {
    }
  }
}
  • 127.0.0.1 からのアクセスはなにもしない (break で残りの rewrite をキャンセル)
  • /tmp/503 というファイルが存在する場合のみ status code 503 を返す

最後の location /503.html がないと nginx のデフォルトの 503 ページが返ってしまうので、カスタマイズしたページを見せたい場合は要注意。