LoginSignup
5
5

More than 5 years have passed since last update.

[Nginx] Nginx + ngx_mruby で BASIC 認証の On/Off を即座に切り替える

Last updated at Posted at 2017-02-28

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

5
5
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
5
5