GitHub ActionsからWP REST APIにアクセスできない問題の解決策

プログラミング・コーディング

image

はじめに

GitHub Actionsが使えるようになってから、リポジトリ内にあるプロジェクトを自動でビルドやサーバーにデプロイができるようになり、WEBサイトの制作から公開までのフローが非常にスムーズになりました。

しかし、ひとたびエラーが発生すると、解決するのにそれなりに時間がかかることも多々あります。

今回はGitHub ActionsからレンタルサーバーにインストールしたWordPressのWP REST APIにアクセスできない際の解決策をご紹介します。

本記事で紹介する点

  • GitHub Actions でのビルド時にレンタルサーバーにインストールしたWordPressからのWP REST APIの取得に失敗

結論

  • WP REST APIの取得でエラーを吐いていたら、Wordpressがインストールされているサーバーの設定を見直す
  • Xseverの場合、デフォルトで海外IPからのWP REST APIへのアクセうがブロックされている

最終的にやりたいこととしては以下になります。

  • Xserver上にインストールしたWordpressをヘッドレス化し、コンテンツ管理
  • フロント側はWP REST APIを使ってjsフレームワークで構築
  • ソースコードはGitHubで管理し、GitHub Actionsで自動ビルド→デプロイ

WP REST APIを使って記事や各種設定を読み込み、Astroで構築しビルドしたら、記事が静的ページで吐き出されるという仕組みを作りました。

吐き出された静的ページを手動でアップロードするのも面倒なので、GitHub Actions でビルドからサーバーにアップロードするまでフローを自動化することにしました。

GitHub Actions でのビルド時にエラー

ローカルでは難なくビルドできているのにも関わらず、GitHub Actionsの方でビルドするとエラーになってしまいます。

Error: 5 [ERROR] [build] Failed to call getStaticPaths for src/pages/[slug].astro
Unexpected token < in JSON at position 0

WordPress側のコンテンツはjson形式で取得しているのですが、そのjsonファイルに不備があるとのこと。

(jsonファイルで使えない記号「<」が含まれている)

その影響でWP REST APIを使ったページ生成に失敗しています。

試しにcurlコマンドを走らせてみると403エラーが返っていることがわかりました。

つまりGitHub ActionsからWP REST APIで吐き出されているjsonにアクセスできてない状況です。

(jsonにアクセスできないていないことで、403 forbiddenのHTMLを取得してしまっている)

【解決】XserverのWordPressセキュリティ設定が原因

Xserverではデフォルトで国外IPアドレスからWP REST APIへのアクセスをブロックする設定になっているようです。

公式サイト:https://support.xserver.ne.jp/manual/man_server_wpsecurity.php

Xserverのサーバーパネルから、REST API アクセス制限OFFにすることでアクセスができるようになります。

WordPressセキュリティ設定 > 対象のドメインを選択 > REST API アクセス制限をOFF

ブラウザでURLを打ち込んでアクセスが出来ていたので、レンタルサーバー側でブロックされているとは思いませんでした。

GitHub が海外のサービスのため、国外IPアドレスからのアクセスとなり、ブロックされていたようです。

まとめ

今回使用しているフレームワークやサービスに限らず、レンタルサーバーにインストールしたWordPressのWP REST APIに外部のサービスやサーバーなどからアクセス出来ない場合はレンタルサーバー側の設定を疑ってみると良いかもしれません。