卷曲错误:没有到主机的路由


Curl error : No route to host

因此,我们正在用PHP构建一个web应用程序,并试图向外部API发出请求。问题是我们得到了一个卷曲错误:

cURL错误7:无法连接到external.api.com端口443:没有到主机的路由

现在有一点背景。

  • 我们正在使用Guzzle进行请求
  • 我们在Apache上托管,Apache在Linux机器上运行,我们也在使用SSL
  • API也在使用SSL,因此错误消息中的端口443
  • HTTP请求包括用于身份验证的证书

我已经设法让它在两个不同的开发环境中运行,但没有在生产环境中运行。我怀疑问题出在Apache的配置上,好像我们还没有让它可以向特定的IP或端口发出请求。我不知道如何检查它。我读到我可能需要更改文件/etc/network/interface,但我还没有找到任何关于在那里写什么的信息。

我也读过我必须运行$ netstat -rn才能得到答案,但我不知道该在那里找什么。

编辑:

甚至不能在没有任何参数和任何东西的情况下发出简单的get请求。但我可以向https://google.com和https://facebook.com.几天后会写更多。

在对我的所有代码进行了大量调试和测试之后,我联系了服务,我正在尝试使用其API。

他们是一家欧洲服务提供商,拥有欧洲IP白名单。我们的生产服务器在美国,在他们将我们的IP列入白名单后,一切都正常了。

它为我的apache(httpd)工作

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

netstat -aln | grep 443将显示您的Web服务器是否正在侦听该端口。

根据您安装配置文件的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 reloadsudo service nginx restart(或相关的apache命令)。

sudo service nginx configtestsudo nginx -t将帮助调试配置文件。

搜索了大约一整天后,我发现问题出在iptables规则中。在我的案例中,解决方案是按照如下方式恢复iptables规则:

  1. 创建一个包含以下文本的文件:

    *过滤

    :输入接受[10128:110789]

    :转发接受[0:0]

    :输出接受[9631:1361545]

    提交*

  2. 运行命令:sudo iptables-restore < /path/to/your/previously/created/file

如果这是一个iptables问题,这将有望解决您的问题。

今天我要面对同样的问题,就像那样我使用curl http://localhost:8080来检查我的tomcat是否可以工作

这是错误Failed to connect to ::1: No route to host

我终于解决了。很明显,这是你的Apache tomcat的问题。所以你必须先检查日志。如果你发现你的端口被使用了,找到那个球场并杀死它。然后重新启动你的tomcat。

通过端口查找课程:netstan -lnp | grep port杀伤过程:kill -9 ****