【问题标题】:curl: Ran on Different Servers Returned Different IP Addressescurl:在不同的服务器上运行返回不同的 IP 地址
【发布时间】:2012-01-24 14:00:41
【问题描述】:

我一直在努力弄清楚为什么我在 PHP 中使用 curl 库的页面在我的开发机器上工作但在我的远程服务器上却失败了。一种怀疑是它与curl 是否支持 SSL 有关,如one of the comments here 所示:

如果您的 curl 安装没有使用 SSL 支持编译,那么当您试图找出 curl_exec() 未能失败或执行其他任何操作的原因时,您会碰壁...

所以,我运行this script 来了解我的开发机器远程服务器 是否支持 SSL。我的 dev machineremote server 都产生了以下内容(看起来都支持 SSL):

CURL_VERSION_IPV6 匹配 CURL_VERSION_KERBEROS4 不匹配 CURL_VERSION_SSL 匹配 CURL_VERSION_LIBZ 匹配

但是,当我在我的远程服务器(我的脚本失败的那个服务器)上的命令行运行curl 时,我得到了以下结果(即curl 挂起):

curl -v http://<my-domain>/blog/press-release/
* About to connect() to <my-domain> port 80
*   Trying 66.201.45.235... 

相同的curl 命令行在我的开发机器上运行良好,尽管它返回了不同的IP 地址:

curl -v http://<my-domain>/blog/press-release/
* About to connect() to <my-domain> port 80 (#0)
*   Trying 10.3.1.207... connected

请...请帮忙?还有其他方法可以找出我的 dev machineremote server 上安装的 curl 之间的区别吗? 他们为什么返回不同的地址?

【问题讨论】:

  • 检查 /etc/hosts. &lt;my-domain&gt; 可能设置为不同的 IP 地址,以便在您的开发服务器上进行测试。

标签: php command-line curl


【解决方案1】:

域名(如my-domain.com)通过DNS解析为IP地址。

当程序尝试按名称访问网络设备时,操作系统会联系它配置的 DNS 服务器,并要求它提供与提供的名称相对应的 IP 地址。然后,DNS 服务器将响应一个 IP 地址(或一组 IP 地址 - 可以配置一个名称以解析多个 IP 地址)或一条错误消息,本质上是“我找不到姓名”。操作系统还将有一个hosts file,它是静态配置的域到 IP 映射的列表。如果在主机文件中与请求的域匹配,则不会联系 DNS 服务器,而是使用配置的 IP。

企业 LAN 通常会有自己的内部 DNS 服务器来控制内部域,如果它收到对该域成员的请求,它将返回该主机的 LAN IP 地址,而不是 WAN IP 地址.

我对您的问题的猜测是正在发生以下两种情况之一:

  • 您的开发服务器上的主机文件有一个相关域的配置条目,该条目位于您的网络内部。我这样说是因为您在开发机器上获得的地址解析为位于通常为 LAN 保留的范围内的 IP 地址
  • 您尝试联系的计算机位于您自己的域中,托管在您的开发计算机所在的网络中,并且您的 LAN 有一个控制您的域的 DNS 服务器,供您的开发计算机用于 DNS 查找。

无论哪种方式,您需要解决的实际问题是您尝试联系的主机不接受来自66.201.45.235 地址上的广域网连接,这就是互联网所看到的 IP 地址。这可能是因为服务器配置、防火墙、NAT 或许多其他因素中的任何一个。

这不太可能与 SSL 相关 - cURL 正在尝试连接到端口 80,该端口用于未加密的 HTTP 连接,并且不需要 SSL。

您应该联系您的网络管理员来解决问题。

【讨论】:

  • 非常感谢。这很清楚,绝对值得+1票!我只是给出了我可能为你触发的所有分数。 :)
猜你喜欢
  • 2012-04-24
  • 2019-10-22
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
相关资源
最近更新 更多