web-dev-qa-db-ja.com

カールエラー:ホストへのルートがありません

PHPでWebアプリケーションを構築していて、外部APIにリクエストを送信しようとしています。問題は、カールエラーが発生することです。

cURLエラー7:external.api.comポート443への接続に失敗:ホストへのルートがありません

背景について少し説明します。

  • Guzzle を使用してリクエストを作成しています。
  • Linuxマシンで実行されているApacheをホストしており、SSLも使用しています。
  • APIもSSLを使用しているため、エラーメッセージにポート443が表示されます。
  • HTTP要求には、認証用の証明書が含まれています。

2つの異なる開発環境で実行できましたが、本番環境では実行できませんでした。問題はApacheの設定にあるのではないかと思います。特定のIPまたはポートにリクエストを送信できるようにしていないかのようです。確認方法がわかりません。/etc/network/interfaceファイルを変更しなければならない可能性があることを読みましたが、そこに何を書き込むかについての情報が見つかりませんでした。

回答を得るために$ netstat -rnを実行する必要があることも読んだのですが、何を見ればよいのかわかりません。

編集:

パラメータや何もない単純なgetリクエストを作成することもできません。それでも https://google.com および https://facebook.com にリクエストを送信できます。いくつかの詳細を書きます。

9
Mihkel Allorg

netstat -aln | grep 443は、ウェブサーバーがそのポートでリッスンしているかどうかを示します。

構成ファイルをインストールしたWebサーバーに応じて、サイトは/etc/nginx/sites-available/default/etc/nginx/sites-available/yourSite/etc/nginx/nginx.confまたはApacheの他の同様のパスになります。

それがどこにあっても、構成ファイルには次のようなものが含まれている必要があります。

server {
listen 80;
listen 443 ssl;
server_name yourSite.com;
root "/path/to/yourSite";

index index.html index.htm index.php;

charset utf-8;

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

location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt  { access_log off; log_not_found off; }

access_log off;
error_log  /path/to/webserver/youSite.error.log error;

sendfile off;

client_max_body_size 100m;

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    fastcgi_intercept_errors off;
    fastcgi_buffer_size 16k;
    fastcgi_buffers 4 16k;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
}

location ~ /\.ht {
    deny all;
}

ssl_certificate     /path/to/yourSite.crt;
ssl_certificate_key /path/to/yourSite.key;
}

このファイルを変更した後、Sudo service nginx reloadまたはSudo service nginx restart(または関連するApacheコマンド)を確認してください。

Sudo service nginx configtestまたはSudo nginx -tは、構成ファイルのデバッグに役立ちます。

1
Ciuc lpgfmk