2011-12-20 59 views
0

我一直在努力找出为什么我的网页,其中使用curl库在PHP中的工作我开发机器上,但没有我的远程服务器上。一个怀疑的是,它涉及到curl是否具有SSL支持,在one of the comments here表示:卷曲:不同服务器上的冉返回不同的IP地址

如果卷曲的安装不是SSL支持编译你会打你的头靠在墙上,试图找出为什么当curl_exec()失败失败或做别的......

所以,我跑this script找出SSL是否支持我的两个开发机器远程服务器上。我的两个开发机器远程服务器产生以下(貌似都支持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 

请......请帮助?任何其他方式来找出我的开发机远程服务器上安装curl之间的差异? 他们为什么会返回不同的地址?

+0

检查/ etc/hosts。 ''可能设置为一个不同的IP地址,用于在您的开发服务器上进行测试。 – pgl 2011-12-20 16:08:29

回答

2

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

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

公司局域网通常会有自己的内部DNS服务器来控制一个内部域,如果它获得该域成员的请求,它将返回该主机的局域网IP地址,而不是WAN IP地址。

我对你的问题的猜测是,一两件事情正在发生:

  • 的主机您的开发服务器上的文件具有相关领域,这是内部的你网络中的配置项。我这样说是因为你在开发机器上得到的地址解析为一个IP地址,这个IP地址通常保留在局域网中
  • 你试图联系的机器位于你自己的域中,托管在你的开发机器的网络中驻留,并且您的LAN具有一个DNS服务器,用于控制您的域,由您的开发机器用于DNS查找。

无论哪种方式,你需要解决的实际问题是,你正在试图联系不接受对66.201.45.235地址,这是在互联网看到的就是它的IP地址从广域网连接的主机。这可能是因为服务器配置,防火墙,NAT或其他许多事情中的任何一种。

这不可能是与SSL相关的任何事情 - cURL正试图连​​接到端口80,该端口用于未加密的HTTP连接,并且不需要SSL。

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

+0

非常感谢。这是非常明确的,绝对值得超过+ 1票!我只是给了我可能为你引发的所有问题。 :) – moey 2011-12-20 16:57:54

相关问题