はじめに
最近弊社では、WordPressを「ヘッドレスCMS」として利用し、フロントエンドにはNext.jsやNuxtなどのモダンなフレームワークを採用するケースが増えてきています。
このような構成では、WordPressのREST APIを通じてデータを取得するのが基本ですが、Xserver上では初期設定のままだとREST APIが使えず、想定通りに動作しないという落とし穴がありました。
そこで今回は、その原因と具体的な解決策についてまとめておきたいと思います。
前提環境
- サーバー: Xserver
- CMS: WordPress(ヘッドレス構成)
- フロントエンド: Next.js
- データ取得: REST API(例:
https://example.com/wp-json/wp/v2/posts
)
発生した問題
WordPressのREST APIエンドポイントにアクセスしようとしたところ、以下のようなエラーが返されました。
403 Forbidden
404 Not Found
サーバーやAPIの設定ミスを疑いましたが、原因は別のところにありました。
原因
Xserverでは、セキュリティ対策として一部のREST APIエンドポイントへのアクセスが制限されていることがあります。
特に、以下のようなケースで制限がかかっていました。
-
.htaccess
によるREST APIやXML-RPCのブロック - WAF(Web Application Firewall)の影響で不正アクセスと判定される
- 「REST APIの国外アクセス制限」が有効になっている
解決策
1. .htaccess
の設定確認
まずは、WordPressルートディレクトリにある .htaccess
に、以下のような記述がないか確認しましょう。
<Files "xmlrpc.php">
Order Deny,Allow
Deny from all
</Files>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-json/ [NC]
RewriteRule .* - [F,L]
</IfModule>
これらの設定はREST APIやXML-RPCへのアクセスをブロックしています。
ヘッドレス構成でREST APIを使いたい場合は、該当部分をコメントアウトするか削除しましょう。
2. WAF設定の確認
Xserverの「サーバーパネル」から、以下の手順でWAF(Web Application Firewall)の設定を確認・変更できます。
- サーバーパネルにログイン
- 「WAF設定」へ進む
- 対象ドメインのWAFを一時的に無効化
- REST APIへのアクセスを再度確認
セキュリティ面の懸念があるため、必要に応じてWAF設定を微調整しましょう。
3. REST APIの国外アクセス制限とCIツールの通信エラーについて
Xserverの「WordPressセキュリティ設定」には、REST APIへの国外IPアドレスからのアクセスを制限する機能があります。
この機能が有効になっていると、以下のような状況でAPI通信が失敗します。
- GitHub Actionsでのビルド時にWordPressからデータ取得できない
- VercelやNetlifyなど海外ホスティングサービスからのREST APIアクセスが拒否される
-
403 Forbidden
やcURL error 28
が発生する
制限の解除手順
- Xserverサーバーパネル にログイン
- 「WordPressセキュリティ設定」をクリック
- 対象ドメインを選択
- 「REST API アクセス制限」タブを開く
- 「国外IPアドレスからのアクセス制限」を [OFF] に設定
- 「設定変更」ボタンをクリックして保存
この機能はセキュリティ強化には有効ですが、CI/CDやJamstack構成を採用するプロジェクトでは支障となる場合があります。
セキュリティを維持しつつ、必要なサービス(GitHub、Vercel、Netlifyなど)だけをホワイトリストに追加する機能は現時点で提供されていないため、一時的または恒久的にOFFにする判断が求められます。
補足:国外アクセス制限を外す場合の追加のセキュリティ対策案
国外制限を解除する代わりに、以下のようなセキュリティ対策の導入も検討すると良いと思います。
- Basic認証やAPIキーによるアクセス制限
- プラグインによる不要なRESTエンドポイントの無効化
-
functions.php
によるREST APIアクセスのカスタマイズ制御
これらを組み合わせることで、国外アクセスを許可しても一定のセキュリティを保つことが可能です。
さいごに
桜の季節もあっという間に過ぎてしまいそうですね。
開発でも遅れを取らないよう、私自身も引き続きスピード感を持って取り組んでいきたいと思います!