0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Xserver上でWordPressをヘッドレスCMS運用するときにREST APIが機能しない件

Posted at

はじめに

最近弊社では、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)の設定を確認・変更できます。

  1. サーバーパネルにログイン
  2. 「WAF設定」へ進む
  3. 対象ドメインのWAFを一時的に無効化
  4. REST APIへのアクセスを再度確認

セキュリティ面の懸念があるため、必要に応じてWAF設定を微調整しましょう。

3. REST APIの国外アクセス制限とCIツールの通信エラーについて

Xserverの「WordPressセキュリティ設定」には、REST APIへの国外IPアドレスからのアクセスを制限する機能があります。
この機能が有効になっていると、以下のような状況でAPI通信が失敗します。

  • GitHub Actionsでのビルド時にWordPressからデータ取得できない
  • VercelやNetlifyなど海外ホスティングサービスからのREST APIアクセスが拒否される
  • 403 ForbiddencURL error 28 が発生する

制限の解除手順

  1. Xserverサーバーパネル にログイン
  2. 「WordPressセキュリティ設定」をクリック
  3. 対象ドメインを選択
  4. 「REST API アクセス制限」タブを開く
  5. 「国外IPアドレスからのアクセス制限」を [OFF] に設定
  6. 「設定変更」ボタンをクリックして保存

この機能はセキュリティ強化には有効ですが、CI/CDやJamstack構成を採用するプロジェクトでは支障となる場合があります。
セキュリティを維持しつつ、必要なサービス(GitHub、Vercel、Netlifyなど)だけをホワイトリストに追加する機能は現時点で提供されていないため、一時的または恒久的にOFFにする判断が求められます。

補足:国外アクセス制限を外す場合の追加のセキュリティ対策案

国外制限を解除する代わりに、以下のようなセキュリティ対策の導入も検討すると良いと思います。

  • Basic認証やAPIキーによるアクセス制限
  • プラグインによる不要なRESTエンドポイントの無効化
  • functions.php によるREST APIアクセスのカスタマイズ制御

これらを組み合わせることで、国外アクセスを許可しても一定のセキュリティを保つことが可能です。

さいごに

桜の季節もあっという間に過ぎてしまいそうですね。
開発でも遅れを取らないよう、私自身も引き続きスピード感を持って取り組んでいきたいと思います!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?