nginxでワイルドカードサブドメインを一括管理しつつ、個別にbasic認証をかけたりかけなかったりするやつ
nginxでワイルドカードサブドメインを一括管理しつつ、個別にbasic認証をかけたりかけなかったりするやつ。
未来にまた必要になる筈なので、未来の自分が発見できるようにここに書いておく。
前提として、ワイルドカードdnsおよびワイルドカードssl証明書の設定が済んでいるものとする。
server { listen 443 ssl; server_name ~^(?<subhost>[-a-z0-9]+)\.wildcard\.example\.jp$; root /var/www/wildcard.example.jp/$subhost; set $auth off; set $auth_file /dev/null; if ($subhost = ababa) { set $auth "Restricted"; set $auth_file /var/www/wildcard.example.jp/ababa/.htpasswd; } location / { auth_basic $auth; auth_basic_user_file $auth_file; } location ~ /\. { deny all; } }
これで、あらゆる https://*.wildcard.example.jp/
へのアクセスが /var/www/wildcard.example.jp/*/
へと受け渡され、その上で、 https://ababa.wildcard.example.jp/
配下へのアクセスのみbasic認証がかかる。
root
配下に .htpasswd
を置くのは本当はよくないのだが、ワイルドカードサブドメインがたくさんあり、それぞれをディレクトリ単位で管理したいので、今回は許容する事にした。本当はよくない。