ApacheでBasic認証が効かない(原因と解決メモ)

症状

Basic認証を入れたのに、ブラウザで パスワード入力ダイアログが出ない。
curl -I でも 200 OK のまま。

curl -I https://new.example.com/
# HTTP/1.1 200 OK

原因

<Directory> で認証をかけていたが、<Directory> は URLではなく実フォルダに対して効く設定。
Laravel+リライトなどの影響で、Apacheがそのリクエストを そのDirectoryにマッチさせられず、認証が発動しなかった。

<Directory /var/www/html/example-new/public>
  AuthType Basic ...
</Directory>

解決方法

<Directory> をやめて、URLに対して確実に効く <Location> で認証をかけたら直った。

<Location "/">
  AuthType Basic
  AuthName "Restricted Area"
  AuthUserFile /etc/httpd/.htpasswd-new
  Require valid-user
</Location>

反映:

sudo httpd -t && sudo systemctl restart httpd

成功判定(401になればOK):

curl -I https://new.example.com/ | egrep -i 'HTTP/|WWW-Authenticate'
# HTTP/1.1 401 Unauthorized

補足

<Location "/">/ 配下すべてに認証がかかる(サイト全体保護)。
移行中のステージング用途なら安全。

タイトルとURLをコピーしました