はじめに
BASIC認証を特定のパスのみ除外する設定をしたのでメモをしておく。
WebサーバはApacheの想定で記載する。
環境
Windows 11 Professional
Docker Desktop 4.33.1(161083)
Apache 2.4.62
準備
構築するファイル構成
├── .htpasswd
├── compose.yml
├── httpd.conf
└── public-html
├── .well-known
│ └── pki-validation
│ └── test.txt
└── index.html
.htpasswdファイルの作成
htpasswd -c .htpasswd user
適当に ID/PASS を設定する。
今回は、 user / user とした。
.htpasswd
は以下。
user:$apr1$g.XLMvxM$tztOGmOHd7x1aBflzAgKc0
httpd.confの作成
docker run --rm httpd:2.4.62 cat /usr/local/apache2/conf/httpd.conf > httpd.conf
public-htmlの作成
index.html
Hello,World
.well-known/pki-validation/test.txt
test file.
キモとなる部分
httpd.conf
に以下の設定を追加している。
# Basic Auth
<Location />
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /usr/local/apache2/.htpasswd
Require valid-user
</Location>
# Specify path is allowed to access without password
<Location /.well-known/pki-validation/>
AuthType None
Require all granted
</Location>
<Location />
で全てのパスに対してBASIC認証を設定している。<Location /.well-known/pki-validation/>
で /.well-known/pki-validation/
以下のパスに対してはBASIC認証を無効にしている。
これで特定のパスに対してBASIC認証を無効にすることができる。
というわけで準備ができたので構築をして試してみる。
構築
今回もローカル環境で構築できるようにDockerを利用する。
compose.yml
services:
apache:
image: httpd:2.4.62
ports:
- "8080:80"
volumes:
- ./httpd.conf:/usr/local/apache2/conf/httpd.conf
- ./.htpasswd:/usr/local/apache2/.htpasswd
- ./public-html:/usr/local/apache2/htdocs
コンテナの起動
docker-compose up -d
テスト
http://localhost:8080
上記はBASIC認証がかかっていることを確認する。
http://localhost:8080/.well-known/pki-validation/test.txt
上記はBASIC認証がかかっていないことを確認する。
おわりに
今回は、Apacheの設定で特定のパスに対してのBASIC認証を無効にする方法を試した。
SSL証明書の認証ファイルを配置する場合でBASIC認証を一部のみ無効にしたい場合に有用な設定となっている。