はじめに
BASIC認証を特定のパスのみ除外する設定をしたのでメモをしておく。
前回はApache編だったが、今回のWebサーバはnginxの想定で記載する。
環境
Windows 11 Professional
nginx 1.21.3
Docker Desktop 4.33.1 (161083)
準備
構築するファイル構成
├── .htpasswd
├── compose.yml
├── default.conf
└── public-html
├── .well-known
│ └── pki-validation
│ └── test.txt
└── index.html
.htpasswdファイルの作成
htpasswd -c .htpasswd user
適当に ID/PASS を設定する。
今回は、 user / user とした。
user:$apr1$g.XLMvxM$tztOGmOHd7x1aBflzAgKc0
default.confの作成
docker run --rm --entrypoint=cat nginx /etc/nginx/conf.d/default.conf > default.conf
public-htmlの作成
index.html
Hello,World
.well-known/pki-validation/test.txt
test file.
キモとなる部分
default.conf
に以下の設定を追加している。
root /usr/share/nginx/html;
index index.html index.htm;
location / {
+ auth_basic "Restricted Content";
+ auth_basic_user_file /etc/nginx/.htpasswd;
}
+ location /.well-known/pki-validation/ {
+ auth_basic off;
+ allow all;
+ }
locationディレクティブに/.well-known/pki-validation/
を追加し、
auth_basic off;
でBASIC認証を無効にしている。allow all;
で全てのアクセスを許可している。
これで特定のパスに対してBASIC認証を無効にすることができる。
というわけで準備ができたので構築をして試してみる。
構築
今回もローカル環境で構築できるようにDockerを利用する。
compose.yml
services:
nginx:
image: nginx:1.27.1
ports:
- "8080:80"
volumes:
- ./default.conf:/etc/nginx/conf.d/default.conf
- ./public-html:/usr/share/nginx/html
- ./.htpasswd:/etc/nginx/.htpasswd
コンテナの起動
docker-compose up -d
テスト
http://localhost:8080
上記はBASIC認証がかかっていることを確認する。
http://localhost:8080/.well-known/pki-validation/test.txt
上記はBASIC認証がかかっていないことを確認する。
参考
- nginx | DockerHub
https://hub.docker.com/_/nginx
おわりに
今回は、nginxの設定で特定のパスに対してのBASIC認証を無効にする方法を試した。
Apache編と同様に、nginxでも特定のパスに対してBASIC認証を無効にすることができる。
前回と同じく、SSL証明書の認証ファイルを配置する場合でBASIC認証を一部のみ無効にしたい場合に有用な設定となっている。