卷曲错误:无主机

时间:2016-07-26 12:24:28

标签: php apache ssl curl guzzle

因此,我们正在使用PHP构建Web应用程序,并且我们正在尝试向外部API发出请求。问题是我们收到卷曲错误:

  

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

现在有点背景知识。

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

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

我还读过我必须运行$ netstat -rn才能找到答案,但我不知道该怎么看。

修改

甚至无法在没有任何参数和任何内容的情况下制作简单的获取请求。 但我可以向https://google.comhttps://facebook.com提出请求。会写一些更多。

5 个答案:

答案 0 :(得分: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将有助于调试配置文件。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

    *过滤器

    :输入接受[10128:1310789]

    :前向接受[0:0]

    :输出接受[9631:1361545]

    提交*

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

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

答案 3 :(得分:0)

它对我来说适用于 apache (httpd)

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

答案 4 :(得分:-1)

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

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

最后我要解决它。显然,这是您的Apache tomcat的问题。 因此,您必须首先检查日志。如果您发现您的端口已被使用,请找到该路线并将其杀死。然后重新启动您的tomcat。

通过端口netstan -lnp | grep port查找路线 杀死路线:kill -9 ****