質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.12%

WordPressのREST APIがリクエストエラーで失敗してしまう(Failed to connect to xxx.com port 443: No route to host)

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 642

bws

score 52

環境

  • sakura vps
  • Centos7

dockerでリンクのようにjwilder/nginx-proxyjrcs/letsencrypt-nginx-proxy-companionコンテナを使用してwordpressサイトを公開しています。

追記

nginxコンテナ、php-fpmコンテナにwordpressを手動でインストールしています。

letsencrypt-nginx-proxy-companionを使って複数ドメイン名に無料SSL証明書を適用する

困っている事

問題なくサイトの公開、アクセス、編集など出来ていたのですが、REST APIが使用出来ないことに気がつきました。

そこでHealth Check & Troubleshootingというwordpressのプラグインをインストールして何かエラーが発生していないか確認してみたところ以下のようなエラーが発生していました。
イメージ説明

The REST API encountered an error Performance
The REST API is one way WordPress, and other applications, communicate with the server. One example is the block editor screen, which relies on this to display, and save, your posts and pages.

REST API リクエストはエラーのために失敗しました。
Error: [] cURL error 7: Failed to connect to xxx.com port 443: No route to host

Your site could not complete a loopback request Performance
Loopback requests are used to run scheduled events, and are also used by the built-in editors for themes and plugins to verify code stability.

The loopback request to your site failed, this means features relying on them are not currently working as expected.
エラーが発生しました: (0) cURL error 7: Failed to connect to xxx.com port 443: No route to host

またブラウザで、https://xxx.com/wp-json/wp/v2/posts/でアクセスすると通常ですとJSONのレスポンスがあると思うのですが、こちらの環境ですとサイトのトップページがそのまま表示されてしまいます。

無知ながらもGoogleの検索で調べてみたところ、nginxの設定やネームサーバーの設定が怪しいような気がしたのですが、解決に至りません。どなたか助けていただけませんでしょうか、よろしくおねがいします。

追記1

https://xxx.com/?rest_route=/wp/v2/でアクセスしたところJSONデータを取得することができました!

追記2

https://wordpress.org/support/article/using-permalinks/
リンクの内容からパーマリンクの設定を確認したところhttps://xxx.com/?p=123のデフォルトになっていたので変更したところhttps://xxx.com/wp-json/wp/v2/posts/にアクセスしてJSONデータを受け取ることができるようになりました。
ということでrest apiは使えるようになったのですが、Health Check & Troubleshootingのエラーは変わらず表示されています…

nginxの設定

// wordpress側のdefault.conf
server {
        listen 80;
        server_name localhost;
        root /src/;
        index index.php index.html index.htm;
        client_max_body_size 20m;

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

        location ~* /wp-config.php {
                deny all;
        }

        location ~ \.php$ {
                try_files $uri = 404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass php:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                include       fastcgi_params;
        }

        location ~* \.(css|js|jpg|png|gif|ico)$ {
                expires 30d;
        }

        gzip on;
        gzip_types text/css application/javascript application/json application/font-woff application/font-tff image/gif image/png image/jpeg application/octet-stream;
        gzip_min_length 1000;
        gzip_proxied any;
        gunzip on;
}
# nginx-proxy側の設定

# If we receive X-Forwarded-Proto, pass it through; otherwise, pass along the
# scheme used to connect to this server
map $http_x_forwarded_proto $proxy_x_forwarded_proto {
  default $http_x_forwarded_proto;
  ''      $scheme;
}
# If we receive X-Forwarded-Port, pass it through; otherwise, pass along the
# server port the client connected to
map $http_x_forwarded_port $proxy_x_forwarded_port {
  default $http_x_forwarded_port;
  ''      $server_port;
}
# If we receive Upgrade, set Connection to "upgrade"; otherwise, delete any
# Connection header that may have been passed to this server
map $http_upgrade $proxy_connection {
  default upgrade;
  '' close;
}
# Apply fix for very long server names
server_names_hash_bucket_size 128;
# Default dhparam
ssl_dhparam /etc/nginx/dhparam/dhparam.pem;
# Set appropriate X-Forwarded-Ssl header
map $scheme $proxy_x_forwarded_ssl {
  default off;
  https on;
}
gzip_types text/plain text/css application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
log_format vhost '$host $remote_addr - $remote_user [$time_local] '
                 '"$request" $status $body_bytes_sent '
                 '"$http_referer" "$http_user_agent"';
access_log off;
resolver 127.0.0.11;
# HTTP 1.1 support
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
proxy_set_header X-Forwarded-Ssl $proxy_x_forwarded_ssl;
proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port;
# Mitigate httpoxy attack (see README for details)
proxy_set_header Proxy "";
server {
        server_name _; # This is just an invalid value which will never trigger on a real hostname.
        listen 80;
        access_log /var/log/nginx/access.log vhost;
        return 503;
}
# www.xxx.com
upstream www.xxx.com {
                                ## Can be connected with "shared" network
                        # nginx
                        server 172.18.0.2:80;
}
server {
        server_name www.xxx.com;
        listen 80 ;
        access_log /var/log/nginx/access.log vhost;
        return 301 https://$host$request_uri;
}
server {
        server_name www.xxx.com;
        listen 443 ssl http2 ;
        access_log /var/log/nginx/access.log vhost;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:!DSS';
        ssl_prefer_server_ciphers on;
        ssl_session_timeout 5m;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;
        ssl_certificate /etc/nginx/certs/www.xxx.com.crt;
        ssl_certificate_key /etc/nginx/certs/www.xxx.com.key;
        ssl_dhparam /etc/nginx/certs/www.xxx.com.dhparam.pem;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /etc/nginx/certs/www.xxx.com.chain.pem;
        add_header Strict-Transport-Security "max-age=31536000" always;
        include /etc/nginx/vhost.d/default;
        location / {
                proxy_pass http://www.xxx.com;
        }
}

# xxx.com
upstream xxx.com {
                                ## Can be connected with "shared" network
                        # nginx
                        server 172.18.0.2:80;
}
server {
        server_name xxx.com;
        listen 80 ;
        access_log /var/log/nginx/access.log vhost;
        return 301 https://$host$request_uri;
}
server {
        server_name xxx.com;
        listen 443 ssl http2 ;
        access_log /var/log/nginx/access.log vhost;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:!DSS';
        ssl_prefer_server_ciphers on;
        ssl_session_timeout 5m;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;
        ssl_certificate /etc/nginx/certs/xxx.com.crt;
        ssl_certificate_key /etc/nginx/certs/xxx.com.key;
        ssl_dhparam /etc/nginx/certs/xxx.com.dhparam.pem;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /etc/nginx/certs/xxx.com.chain.pem;
        add_header Strict-Transport-Security "max-age=31536000" always;
        include /etc/nginx/vhost.d/default;
        location / {
                proxy_pass http://xxx.com;
        }
}

ネームサーバーの設定

value-domainにて以下の設定をしています。

mx @ 10
a @ {ipアドレス}
a www {ipアドレス}
a * {ipアドレス}
txt @ v=spf1 ip4:{ipアドレス} ~all
a redmine {ipアドレス}
a dev {ipアドレス}
a wp {ipアドレス}
a laravel {ipアドレス}
a hexo {ipアドレス}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • CHERRY

    2019/05/24 16:38

    WordPress コンテナ内で、 `ping ホスト名 ` で通信確認すると通信できていますか?

    キャンセル

  • bws

    2019/05/24 17:11

    ありがとうございます!
    php-fpmとnginxのコンテナにwordpressを手動でインストールしています。
    nginxとphpのコンテナ内でpingをしてみたところ両方とも通信できていました!

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • トップ
  • nginxに関する質問
  • WordPressのREST APIがリクエストエラーで失敗してしまう(Failed to connect to xxx.com port 443: No route to host)