PHP curl 无法连接到自己的服务器上的主机


PHP Curl Cannot Connect to Host on Own Server

我有一个PHP脚本,它使用cURL访问也位于我的服务器上的文件(已安装的电子邮件营销程序)。我编写了一个快速脚本来测试我的 cURL 安装,当指向我自己服务器上的文件时它会失败。脚本为:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.mysite.com/test.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
if($contents) {
    echo $contents;
} else {
    $err = curl_error($ch);
    echo $err;
}
curl_close($ch);

当我运行此代码时,它返回一个错误:无法连接到主机

如果我将 URL 更改为 http://www.google.com 或任何其他网站,它就可以正常工作。此外,当我尝试通过另一台服务器上的 cURL 打开特定页面时,它的工作方式就像它应该的那样。我从这些测试中做出的假设是 PHP cURL 已安装并且(有点)工作,并且问题不在尝试打开的页面中。

我认为这可能是端口问题,所以我尝试以相同的结果指定端口(未连接到主机)。我尝试了curl_setopthttp://www.mysite.com:80/来指定我知道要打开的端口。

这让我相信这个问题是我的 apache 安装中的问题,但我不是 apache 专家,我整天都在与 Google 对抗,但无济于事。任何想法可能导致如此特定的cURL失败?

遇到了同样的问题,我的域名无法在服务器上解析,导致CURL请求失败。

我的

问题是由于某些防火墙规则,我的 Web 服务器无法自行解析(Web 服务器前面有一个负载均衡器阻止了来自服务器的流量)。

换句话说,在我的服务器上运行以下命令

curl -I http://www.mywebserver.com结果是:

$ curl -I http://www.mywebserver.com curl: (7) couldn't connect to host

更新服务器上的/etc/hosts 文件以将域名映射到本地 IP 地址解决了问题,我的脚本中的fopencurl再次正常运行。

你能ping www.mysite.com吗?

检查您的/etc/主机 ...也许为www.mysite.com指定了错误的 IP。

尝试在 Web 浏览器中打开http://www.mysite.com/test.php。 如果它有效,那么问题出在cURL上。 如果没有,那么问题要么出在您的网络上,要么出在 apache 配置上。

您可以通过确保 apache 配置在您的系统上运行来检查它。 然后尝试从命令行telnet <apache server ip> 80。 连接后,请尝试执行以下操作:

GET /test.php HTTP/1.1
Host: www.mysite.com
<2 line breaks>

如果您收到来自 apache 的响应,那么这听起来像是网络问题。 确保 mysite.com 解析为您的 apache 服务器的 IP 地址,并且端口 80 流量可以到达您的服务器。 这也可能是您的路由器试图向其自己的 IP 地址发出请求的环回路由问题(假设您的 apache 盒子位于路由网络连接后面,与您所在的连接相同)。

我在远程网络服务器上也遇到了这个问题。在这台机器上运行 curl,我无法访问同一台机器上的 apache 服务器托管的文件。奇怪的是,我可以通过以下方式访问文件

curl -O http://example.com/file1.txt

curl -0 http://sub.example.com/file1.txt

没有用。

我通过将丢失的 DNS 记录添加到计算机上运行的 DNS 服务器来解决它。似乎nslookup等在询问其他人之前先查看本地DNS服务器。当本地DNS服务器回复"找不到"时,curl放弃了。