特定のパスのみBASIC認証をかけないようにする(Apache編)

はじめに

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

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認証がかかっていることを確認する。
test-02

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

おわりに

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

Hugo で構築されています。
テーマ StackJimmy によって設計されています。