はじめに

BASIC認証を特定のパスのみ除外する設定をしたのでメモをしておく。
前回はApache編だったが、今回のWebサーバはnginxの想定で記載する。

環境

1
2
3
Windows 11 Pro
nginx 1.21.3
Docker Desktop 4.33.1 (161083)

準備

構築するファイル構成

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

.htpasswdファイルの作成

1
htpasswd -c .htpasswd user

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

今回は、 user / user とした。

1
user:$apr1$g.XLMvxM$tztOGmOHd7x1aBflzAgKc0

default.confの作成

1
docker run --rm --entrypoint=cat nginx /etc/nginx/conf.d/default.conf > default.conf 

default.conf

public-htmlの作成

index.html

1
Hello,World

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

1
test file.

キモとなる部分

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

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

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

コンテナの起動

1
docker-compose up -d

テスト

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

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

参考

おわりに

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