2011-12-20 60 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

相關問題