はじめに

BASIC認証を特定のパスのみ除外する設定をしたのでメモをしておく。
WebサーバはApacheの想定で記載する。

環境

1
2
3
Windows 11 Pro
Docker Desktop 4.33.1(161083)
Apache 2.4.62

準備

構築するファイル構成

1
2
3
4
5
6
7
8
├── .htpasswd
├── compose.yml
├── httpd.conf
└── public-html
    ├── .well-known
    │   └── pki-validation
    │       └── test.txt
    └── index.html

.htpasswdファイルの作成

1
htpasswd -c .htpasswd user

適当に ID/PASS を設定する。

今回は、 user / user とした。

.htpasswdは以下。

1
user:$apr1$g.XLMvxM$tztOGmOHd7x1aBflzAgKc0

httpd.confの作成

1
docker run --rm httpd:2.4.62 cat /usr/local/apache2/conf/httpd.conf > httpd.conf

httpd.conf

public-htmlの作成

index.html

1
Hello,World

.well-known/pki-validation/test.txt

1
test file.

キモとなる部分

httpd.conf に以下の設定を追加している。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 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

1
2
3
4
5
6
7
8
9
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

コンテナの起動

1
docker-compose up -d

テスト

http://localhost:8080
上記はBASIC認証がかかっていることを確認する。
test-02

http://localhost:8080/.well-known/pki-validation/test.txt
上記はBASIC認証がかかっていないことを確認する。
test-01

おわりに

今回は、Apacheの設定で特定のパスに対してのBASIC認証を無効にする方法を試した。
SSL証明書の認証ファイルを配置する場合でBASIC認証を一部のみ無効にしたい場合に有用な設定となっている。