Nginx でメンテナンスページの On/Off をファイルの有無によって切り替える方法としては、以下の URL で紹介されているような方法などがあります。
Nginxでメンテナンスページに編集なしで即時切り替える方法
ただ、上記の方法だと IP 制限でしか制限できないため確認者の IP アドレスが制限できない場合にちと困ります。
IP 制限の所を BASIC 認証に置き換えたくて、if の中に if ($maintenance = true) { auth_basic ... }
というように auth_basic
ディレクティブを書くと、無情にも nginx: [emerg] "auth_basic" directive is not allowed here
とかって怒られてしまいます。
そんな時のために僕らには ngx_mruby があるのですよ。
以下のように satisfy any
と組み合わせることで /etc/nginx/.htpasswd
ってファイルがある時は、BASIC 認証を有効にし、ファイルが無い時は BASIC 認証を無効にすることが可能です。
satisfy any;
mruby_access_handler_code '
if ( !File.exist?("/etc/nginx/.htpasswd") ) then
Nginx.return Nginx::OK
else
Nginx.return Nginx::HTTP_FORBIDDEN
end';
auth_basic "basic authentication";
auth_basic_user_file /etc/nginx/.htpasswd;
もちろん mruby_access_handlert_code
ディレクティブの中で File.exist で存在確認するファイルを .htpasswd
ではなく、/var/tmp/do_maintenace
とかのファイルにしてもいいでしょう。
[PR]
AMIMOTO だと、簡単に ngx_mruby モジュールを追加できますよ。
AMIMOTO AMI の nginx がダイナミックモジュール版 ngx_mruby に対応しました | 超高速 WordPress AMI AMIMOTO