nginxで認証必須にする

nginxでBASIC認証を通過していなければ何も出来ないようにする方法。

# /etc/nginx/conf.d/default.conf
server {
  listen 443 default ssl;
  server_name hoge.com;

  # SSL証明書
  ssl_certificate     /etc/nginx/conf.d/ssl/server.crt;
  ssl_certificate_key /etc/nginx/conf.d/ssl/server.key;

  # BASIC認証
  auth_basic Restricted;
  auth_basic_user_file /etc/nginx/userpass;

  # 認証が通っていれば /=/... に内部リダイレクト
  location / {
    if ( $remote_user != "" ) {
      rewrite /(.*) /=/$1 last;
      break;
    }
  }

  # 認証必須領域
  location /=/ {
    # 以下は内部リダイレクト専用領域
    # 外部からアクセスすると 404 を返す
    internal;

    location /=/app/ {
      ... 中略 ...
    }
  }

  ... 中略 ...
}

nginx-1.9.5で確認。以前はif($remote_user=""){break;}をlocationごとに書いてたけど、これでいけるっぽい。