この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
EC2上で稼働するWordPress環境のBasic認証を.htaccessで設定する機会がありましたので紹介させていただきます。
環境
OS
$ cat /etc/system-release
Amazon Linux release 2 (Karoo)
httpd
$ rpm -q httpd httpd-tools
httpd-2.4.53-1.amzn2.aarch64
httpd-tools-2.4.53-1.amzn2.aarch64
設定
.htpasswd
「htpasswd」コマンドを利用して.htpasswd ファイルの生成を行いました。
htpasswd -c /var/www/html/.htpasswd <user>
.htaccess
- WordPressのインストールパスに存在する.htaccess の前に Basic認証用の設定を追記しました。
- ELBのヘルスチェックで利用する「/wp-json/wp/v2/statuser」と「wp-cron」 を認証対象外としました。
- WordPressのリダイレクトに対応するため、リダイレクトの環境変数を利用しました。
- .htpasswd、.htaccess の参照は禁止しました
AuthUserFile /var/www/html/.htpasswd
AuthGroupFile /dev/null
AuthName "Basic Authentication"
AuthType Basic
require valid-user
Require env noauth REDIRECT_noauth
SetEnvIf Request_URI /wp-json/wp/v2/statuses noauth
SetEnvIf Request_URI /wp-cron.php noauth
<Files ~ "^.(htpasswd|htaccess)$">
deny from all
</Files>
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
(略)
動作確認
curl
コマンドを利用して、HTTPレスポンスコードを確認しました。
Basic認証対象
「/」の参照は 401応答となりました。
curl https://${ELB_FQDN}>/ -o /dev/null -w '%{http_code}\n' -s
401
Basic認証のIDとパスワード文字列を指定する事で、200応答が得られました。
curl https://${ELB_FQDN}>/ -o /dev/null -w '%{http_code}\n' -s -u <ID>:<PASSWORD>
200
認証対象外
Basic認証対象外としたパスは、200応答が得られました。
curl https://{ELB_FQDN}/wp/v2/statuses/ -o /dev/null -w '%{http_code}\n' -s
200
まとめ
一般公開前、開発中のWordPress環境にBasic認証を導入した場合、 ELBなどのヘルスチェックや、WordPress自身のAPI呼び出しの遮断が問題となる場合、今回の設定をお試し下さい。