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

Posted

技术标签:

【中文标题】卷曲错误:没有路由到主机【英文标题】:Curl error : No route to host 【发布时间】:2016-11-30 02:25:04 【问题描述】:

所以我们正在用 php 构建一个 Web 应用程序,并尝试向外部 API 发出请求。问题是我们遇到了 curl 错误:

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

现在有一点背景。

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

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

我还阅读了我必须运行 $ netstat -rn 以获得答案,但我不知道该看什么。

编辑:

甚至不能在没有任何参数和任何东西的情况下发出简单的 get 请求。 但是我可以向https://google.com 和https://facebook.com 提出请求。过几篇再写吧。

【问题讨论】:

这通常是防火墙问题。一些企业环境甚至会阻止生产区的出站流量。 @JeffPuckettII $ sudo ufw status 返回非活动状态。 【参考方案1】:

经过大量调试和测试我的所有代码后,我联系了该服务,我试图使用它的 API。

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

【讨论】:

但是您甚至无法访问 google.com,这有什么关系? @Houman 我能够访问 google.com。 :)【参考方案2】:

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

根据您安装配置文件的网络服务器,该站点将位于 /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 将帮助调试配置文件。

【讨论】:

【参考方案3】:

它适用于我的 apache (httpd)

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

【讨论】:

【参考方案4】:

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

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

    *过滤器

    :输入接受 [10128:1310789]

    :转发接受 [0:0]

    :输出接受 [9631:1361545]

    提交*

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

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

【讨论】:

【参考方案5】:

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

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

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

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

【讨论】:

以上是关于卷曲错误:没有路由到主机的主要内容,如果未能解决你的问题,请参考以下文章

套接字错误 #113 没有路由到 Android 上的主机

bash 脚本中的 ssh“端口 22:没有到主机的路由”错误

Vuzix M100 和 Webrtc 错误:连接失败:EHOSTUNREACH(没有到主机的路由)

Flutter SocketException:操作系统错误:没有到主机的路由,errno = 113,地址 = xxxx,端口 = 42376

卷曲,证书的所有者与主机名不匹配 [关闭]

linux wget的时候提示没有到主机的路由