WordPress 6.4 にしたら REST API エラーがでた

WordPress
この記事は約6分で読めます。
この記事は最終更新日より 1 年以上経過しています。
画像やリンクが無効になっている可能性もあるのでご了承下さい。

はじめに

 2023/11/08、WordPress が 6.4 に更新があるだとか言うのでいつも通りに速攻更新。
 更新完了後にダッシュボードを開いたらレスポンスがヤバいくらい激重になったりした。
 そこで管理画面の ツール 以下にある サイトヘルス を開いたところ、件のエラーが発生していた。

REST API でエラーが発生しました

REST API は WordPress や他のアプリケーションがサーバーと通信する手段の1つです。たとえば、ブロックエディターの画面は投稿や固定ページの表示や保存のために REST API を使用しています。

REST API のテスト時に、エラーが発生しました:

REST API エンドポイント: https://example.com/wp-json/wp/v2/types/post?context=edit
REST API レスポンス: (http_request_failed) cURL error 28: Operation timed out after 10001 milliseconds with 0 out of -1 bytes received

 本件は WordPress 6.4.1 にて修正され、正常に動作するようになったことを確認した。

Version 6.4.1
On November 9, 2023, WordPress 6.4.1 was released to the public. Installation/Update Information To ...

原因を探る

 WordPress 6.4 にした事がそもそもの原因なのだがそういう事では無く、なんでこうなるのかを調べてみた。

 エラーの出ている環境をまるっと検証環境にコピーして動作させてみると同エラーは発生しないようで。
 cURL のエラーなのだからそのバージョンを見てみると libcurl のバージョンが問題になっていると判断出来る。

本番環境 @CentOS 7
% /bin/curl --version
curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.53.1 zlib/1.2.7 libidn/1.28 libssh2/1.8.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz unix-sockets

テスト環境 @RockyLinux 9
% /bin/curl --version
curl 7.76.1 (x86_64-redhat-linux-gnu) libcurl/7.76.1 OpenSSL/3.0.7 zlib/1.2.11 brotli/1.0.9 libidn2/2.3.0 libpsl/0.21.1 (+libidn2/2.3.0) libssh/0.10.4/openssl/zlib nghttp2/1.53.0-DEV
Release-Date: 2021-04-14
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli GSS-API HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets

 バージョンというよりも対応しているプロトコルと機能にも差異がある。

ちょっと対応しようとしてみる

 cURL のバージョンないし、対応プロトコルに問題があるのなら、自前でビルドしたlibcurl 8.4.0 に差し替えてみたらどうなるか試してみた。(実際にはやっちゃだめ)

本番環境 @CentOS 7
% /usr/local/curl/bin/curl --version
curl 8.4.0 (x86_64-pc-linux-gnu) libcurl/8.4.0 OpenSSL/3.0.10 zlib/1.2.7 brotli/1.0.9 zstd/1.5.4 libidn2/2.3.4 libssh2/1.10.0 nghttp2/1.58.0-DEV ngtcp2/0.20.0-DEV nghttp3/0.16.0-DEV
Release-Date: 2023-10-11
Protocols: dict file ftp ftps gopher gophers http https imap imaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli HSTS HTTP2 HTTP3 HTTPS-proxy IDN IPv6 Largefile libz NTLM SSL threadsafe TLS-SRP UnixSockets zstd

% sudo echo '/usr/local/curl/lib' > /etc/ld.so.conf.d/libcurl
% sudo ldconfig
% sudo systemctl restart php-fpm nginx

 こうすることで WordPress 側の REST API エラーの発生は止まる。

 しかし、これをやるともっと大きな問題に繋がる感じになるのでやらない方が良い
 そもそも /usr/lib/usr/lib64 なんかのライブラリをオーバーライドするような事はしない方が良い。

 なぜなら yum (pycurl.so) が動かなくなるから。

There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

   /usr/lib64/python2.7/site-packages/pycurl.so: undefined symbol: CRYPTO_num_locks

Please install a package which provides this module, or
verify that the module is installed correctly.

ならば現状の対応はどうするか

 素直に WordPress 6.3 系に戻すか、REST API にエラーがあってもそのまま修正が来ることを待つか。
 若しくはそもそもの OS をバージョンアップしてしまおうというお話になる。

 流石にCentOS 7 はライブラリも古くて運用するにも面倒な事が増えてきているから OS をなんとかすることも考えておくかなと。
 そもそもバージョンアップを踏まえた上で RockyLinux 9 をテスト環境にしていたような気がするが、長いことさぼりすぎた気がしないでもない。

 とりあえず筆者は WordPress 6.3.2 に戻して様子見する事とした。

著者プロフィール
ぶっち

本格的に PC へ触れ始めてたのは 1990 年位から。
興味は PC 全般。OS は Windows と Linux などを嗜む。
プログラマやネットワークエンジニアを経てフリーに活動している 40 代も後半に入ったおじさんです。

ぶっちをフォローする

コメント

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.