画像やリンクが無効になっている可能性もあるのでご了承下さい。
はじめに
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 にした事がそもそもの原因なのだがそういう事では無く、なんでこうなるのかを調べてみた。
エラーの出ている環境をまるっと検証環境にコピーして動作させてみると同エラーは発生しないようで。
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 に戻して様子見する事とした。
コメント