例外パスを設けたWordPress用のBasic認証を.htaccessで設定してみた
WordPress環境のBasic認証、ヘルスチェックなど特定のパスを例外とした設定を「.htaccess」で設定してみました。
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呼び出しの遮断が問題となる場合、今回の設定をお試し下さい。