WordPressサイトのHTTP Auth導入でJetpackが引き起こす意外な落とし穴

WEB制作の現場でWordPressを扱う方なら、一度は検討したことがあるのが「BASIC認証(HTTP Auth)」の導入です。
制作中のサイトを外部に見せないため、クライアント限定の確認環境を作るため——その理由は様々です。
しかし、私が先日遭遇したのは、そんな便利なHTTP AuthとJetpackという人気プラグインの間で起きた思わぬ衝突でした。
今日はそのトラブルと解決までの道のりを共有したいと思います。
HTTP Authを導入する理由
WordPressは世界中で利用されている反面、攻撃の標的になりやすいCMSです。
そのため制作途中のサイトやステージング環境を外部にさらさないよう、BASIC認証を使うことは非常に一般的な方法です。
たとえばApacheなら、.htaccessに次のように記述します。
apache
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/.htpasswd
Require valid-user
この設定を入れることで、WordPressに到達する前にIDとパスワードを入力する「第1の関所」を設けることができます。
特に管理画面やログインページを保護するには非常に効果的です。
トラブルはJetpackが原因だった
今回、私たちが作業していたのは、とある企業サイトのステージング環境。
ログインページをSiteGuard WP PluginでカスタムURLに変更し、さらにBASIC認証を導入して二重の防御を実装していました。
ところがいざ運用を開始してみると、こんな現象が発生。
- WordPressにBASIC認証でログイン
- 管理画面のトップページや投稿一覧などは正常に閲覧可能
- プラグイン一覧ページ(/wp-admin/plugins.php)を開くと、再度BASIC認証を求められる
- 認証を突破しても「500 Internal Server Error」や「接続がリセットされました」になることも
最初は.htaccessの設定ミスかと思い、書き方を見直しました。
しかし、他の管理画面ページは問題なく表示できる。
にもかかわらず、特定のページだけ再度認証が出るのは非常に不可解でした。
Jetpackの仕組みが原因
調べを進めるうちに、原因はJetpackにあることが判明しました。
Jetpackは非常に多機能で、サイト統計、画像CDN、セキュリティ機能などを提供してくれます。
しかし、その裏側ではREST APIやXML-RPCを利用してWordPress.comと通信しています。
この通信が、BASIC認証の壁に阻まれるのです。
Jetpackは管理画面にアクセスしたとき、WordPress.comと認証連携するためにAjaxやREST APIを叩きます。
BASIC認証が設定されていると、APIコールがすべて401 Unauthorizedで弾かれる。
結果、Jetpackは管理画面内でエラーを引き起こし、ページ遷移時に再認証を要求することになる。
実際、プラグイン一覧ページではJetpack関連のAPI通信が多く行われるため、再認証ループが特に顕著に出ていました。
最終的な解決策
私たちが最終的に取った対処は、Jetpackを無効化することでした。
無効化すると、すべての再認証問題がピタリと止まりました。
管理画面内のページ遷移もスムーズになり、HTTP AuthとWordPressがきちんと共存する形に戻りました。
JetpackとHTTP Authの併用は要注意
ここで強調したいのは、JetpackとHTTP Authの相性の悪さです。
REST APIを利用するプラグイン全般が、BASIC認証による壁に阻まれる。
特にJetpackは外部通信が必須のため、HTTP Authを設定すると、管理画面が不安定になる可能性が非常に高い。
WordPressの管理画面は、思っている以上に裏側でAPI通信が行われています。
HTTP Authを導入する際には、「外部サービスと通信するプラグイン」との併用はリスクがあると心得るべきです。
結論
ステージング環境やクローズド環境で外部連携が不要なら、HTTP Authだけで十分。
本番環境や外部サービスとの連携が必要なら、Jetpackを使う代わりに二段階認証やIP制限を活用するほうが安全で快適。
Jetpackは便利ですが、HTTP Authとの併用は非常に相性が悪いのが現実です。
制作現場では、「便利だからといって何でも入れる」ことが、かえって大きなトラブルにつながるという教訓になりました。
HTTP Authを導入する際は、ぜひJetpackや他の外部通信系プラグインとの関係を再確認してみてください。
同じように悩んでいる方の参考になれば幸いです!