サイトヘルスステータスでcritical issueが表示される。(WordPress + CentOS8)
WordPressのサイトヘルスステータスをチェックすると2件の致命的な問題があることが表示されていた。
REST API でエラーが発生しました
パフォーマンス
REST API は WordPress や他のアプリケーションがサーバーと通信する手段の1つです。たとえばブロックエディター画面は、投稿や固定ページの表示や保存に REST API を使用しています。
REST API リクエストはエラーのために失敗しました。
エラー: cURL error 7: Failed to connect to www.den-tsu.net port 443: Connection refused (http_request_failed)
サイトでループバックリクエストが完了できませんでした
パフォーマンス
ループバックリクエストは予約イベントの実行に使用されます。またテーマやプラグインの組み込みエディターでは、コードの安定性の確認に使用されます。
サイトへのループバックリクエストは失敗しました。現在、依存する機能は想定どおりに動作していません。
エラー: cURL error 7: Failed to connect to www.den-tsu.net port 443: Connection refused (http_request_failed)
調査
どちらの現象も「cURL error 7: Failed to connect to www.den-tsu.net port 443: Connection refused (http_request_failed)」
(cURLエラー7:www.den-tsu.netポート443への接続に失敗:接続が拒否されました(http_request_failed))ってことなのですが
ちゃんとSSL設定したし、スマホからサイトを見てもちゃんとHTTPSで「この接続は保護されています。」って帰ってくるし、なんだぁ?
サーバ自身から自サイトにHTTPSでアクセスしてみる。。。。「接続を拒否されました」
[root@vm01 ~]# curl -vv https://www.den-tsu.net
* Rebuilt URL to: https://www.den-tsu.net/
* Trying XXX.XXX.XXX.XXX...
* TCP_NODELAY set
* connect to XXX.XXX.XXX.XXX port 443 failed: 接続を拒否されました
* Failed to connect to www.den-tsu.net port 443: 接続を拒否されました
* Closing connection 0
curl: (7) Failed to connect to www.den-tsu.net port 443: 接続を拒否されました
[root@vm01 ~]#
自サイトにIPアドレスでアクセスしてみる。。。正常にSSLで接続できている。
サーバ自身からwww.den-tsu.netの名前解決するとブロードバンドルータのインターネット側のアドレスを返してくるんだった。
で、ローカルアドレス側I/Fにアクセスしてみると正常に接続できました。
[root@vm01 ~]# curl -vv https://192.168.0.150
* Rebuilt URL to: https://192.168.0.150/
* Trying 192.168.0.150...
* TCP_NODELAY set
* Connected to 192.168.0.150 (192.168.0.150) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, [no content] (0):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: CN=den-tsu.net
* start date: Apr 27 10:49:57 2020 GMT
* expire date: Jul 26 10:49:57 2020 GMT
* subjectAltName does not match 192.168.0.150
* SSL: no alternative certificate subject name matches target host name '192.168.0.150'
* Closing connection 0
* TLSv1.3 (OUT), TLS alert, [no content] (0):
* TLSv1.3 (OUT), TLS alert, close notify (256):
curl: (51) SSL: no alternative certificate subject name matches target host name '192.168.0.150'
[root@vm01 ~]#
原因
本環境はブロードバンドルータ配下のLAN(プライベートアドレス側)にサーバを設置している。
サーバ自身から「www.den-tsu.net」の名前解決するとブロードバンドルータのインターネット側のアドレスを返してくる。
でLAN側からBBルータのインターネット側のアドレスに着信してもポート転送されずにルータへのアクセスとなり拒否された。
対処と結果
アクセスをLAN側だけで解決させるためにサーバのhostsファイルに対象のIPアドレスと対のWebサーバのレコードを追加することでクリティカルな問題の警告が表示されなくなりました。
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.XXX.XXX www.den-tsu.net #サーバのLANのアドレス Wordpressにアクセスするときのホスト名