VNCTST games 開発日誌

ゲーム開発日誌

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 を置くのは本当はよくないのだが、ワイルドカードサブドメインがたくさんあり、それぞれをディレクトリ単位で管理したいので、今回は許容する事にした。本当はよくない。