2012-01-02 137 views
1

我創建了一個AMP Web應用程序,該應用程序最初將由傳統的第三方主機提供。在Windows網絡上的apache - 無法連接到網絡中的外部IP

當我們完成時,客戶決定將其託管在辦公室內的服務器上。該申請僅供員工使用,但這些員工通常不在現場。我沒有參與建立他們的網絡,該網絡至少使用一臺運行Windows Server 2003的服務器。我看到的客戶端機器是XP。

我在server 2003機器上設置了Apache,MySQL和PHP,並安裝了該應用程序。該應用程序基於CodeIgniter框架構建,因此我將base_url設置爲內部IP(192.168 ...),並且我們從網絡內部進行了測試。一切正常。

接下來,我們問他們的網絡人爲Apache打開端口80。我將base_url設置爲外部IP,並從家中進行測試(使用外部IP作爲Web地址),並且工作正常。

但是,當試圖從網絡內使用外部IP訪問應用程序時,它們無法連接。我可以將base_url重置爲網絡IP,並且可以使用網絡IP訪問它,但是當外部連接時應用程序會失敗(因爲整個應用程序使用的base_url指向內部IP)。

它假設我可以讓CodeIgniter確定base_url(通過將變量保留爲空字符串),但是想知道外部IP爲什麼會在網絡中失效並嘗試糾正。

我們正在使用的服務器並不專用於AMP堆棧(事實上,它至少有一個其他應用程序廣播到互聯網,必須使用IIS以及用於辦公掃描儀的FTP服務器) ,所以我想這裏可能會有一些衝突。

我對windows聯網知之甚少。快速搜索表明這可能是因爲NAT,但沒有提供解決方法。

他們的網絡人沒有任何建議,並說一切都應該沒問題。

是否有可能讓網絡內的用戶使用外部IP訪問Apache服務器,如果有,需要做什麼來啓用該服務?

TYIA

+0

好問題,但老實說,這應該是一個[serverfault](http://serverfault.com)問題。 – 2012-01-02 01:08:05

回答

0

這不是Apache相關的,也不是CI相關的。從網絡內部到達外部IP地址通常是不可能的。

坦率地說,我不知道這是什麼原因。我知道這與NAT(網絡地址轉換)如何工作或至少如何實施有關。

對於的詳細概述爲什麼這是,你應該問serverfault這個問題。如果你只是一個必須處理它的程序員,那麼接受NAT通常只能從內部到外部,從外部到內部,而不是內部到內部。

您已經提到您的問題中的解決方案之一 - 不要使用base_url。你也可以簡單地在外部IP地址上運行服務器(不是你公司的IP,但我們可以說是一個數據中心或其他東西)。

+0

「如果你只是一個需要處理它的程序員」 - 是的!我把CI和Apache標籤放在這個問題上只是因爲這個問題提到了兩者,而我認爲這很重要,但是你是對的,這是一個網絡/服務器問題。無論如何,我只是將base_url設置爲空字符串,似乎很好。感謝您的迴應。 – momo 2012-01-02 01:47:10

2

您的客戶端的NAT路由器配置爲轉發其外部接口上到達其與端口80到機器內部,港口80外部IP數據包後,重新編寫源和目的IP地址的數據包。

來自網絡內部,嘗試連接到外部IP地址將被路由到默認路由機器上,路由器的內部接口。該接口是而不是,其被配置爲將分組轉發回網絡

配置應用程序偵聽所有IP地址。確保服務器知道客戶端知道它在幾個主機名下 - 內部IP地址和外部IP地址。

你也許可以重新寫路由器上的NAT防火牆規則來執行用於內部接口的端口轉發爲好,但在家庭和小型企業都使這個現成的殼設備常見任務容易。更昂貴的設備(或自制的* BSD/Linux路由器設備)可以毫不費力地完成這項工作,但它會不必要地將流量添加到路由器中。

+0

+1表示清楚,詳細的答案 – momo 2012-01-02 01:48:12