2012-11-04 78 views
1

我想使用PHP超全局$_SERVER['REMOTE_ADDR']獲取IPv4中的客戶端IP地址。但是,當我在本地主機上測試它時,它將返回一個IPv6地址,如::1如何強制Apache使用IPv4

我使用Mac OS默認的Apache服務器。這是相關的嗎?如果是這樣,我可以知道如何強制它使用IPv4格式嗎?

+5

這不是一個「格式」...連接在IPv6回送中傳入,而不是IPv4。 ':: 1'是正確的地址。 IPv4和IPv6地址不僅僅是同一網絡節點的地址格式。 – Brad

+1

我們有2012年,將近2013年。開始熟悉IPv6的時間... – glglgl

回答

2

它始終是決定哪些協議客戶端使用,而不是服務器。客戶端通過查找主機名來確定可用的協議。這通常意味着它會在/ etc/hosts中查看名稱是否在那裏定義。如果不是,那麼它將使用DNS請求來解析名稱。

在Mac OS X上,名稱localhost在/ etc/hosts中定義,並且因爲它同時包含IPv4(127.0.0.1)和IPv6地址(:: 1),所以客戶端被告知它可以同時使用兩者。如果您想僅使用IPv4進行測試,則可以爲/ etc/hosts添加一個名稱。如果是用於部署,那麼你必須確保DNS服務器只回復IPv4地址。而且你必須調整你的Apache配置以匹配正確的主機名。

但是,這只是解決問題:你需要能夠處理IPv6地址

IPv6正在世界各地採用,並且在本地主機上顯示的IPv6地址僅僅是一個很小的例子。我所做的所有數據中心都爲託管服務器提供IPv6。羅馬尼亞近10%的家庭都使用IPv6。美國幾乎有2%的家庭擁有IPv6。荷蘭已經有至少四家ISP向其用戶提供IPv6。等

如果您現在不在項目中提供對IPv6的支持,那麼很有可能在一年或兩年內出現問題,如果不早一點的話。

+0

數字更新。截至2015年1月的前三名:比利時的30.5%現在擁有IPv6接入,德國的12.6%和美國的11%。 –

3

你不能地圖每一個IPv6地址爲等效的IPv4地址..

您需要調整您的代碼對IPv6以及..