我想使用PHP超全局$_SERVER['REMOTE_ADDR']
獲取IPv4中的客戶端IP地址。但是,當我在本地主機上測試它時,它將返回一個IPv6地址,如::1
。如何強制Apache使用IPv4
我使用Mac OS默認的Apache服務器。這是相關的嗎?如果是這樣,我可以知道如何強制它使用IPv4格式嗎?
我想使用PHP超全局$_SERVER['REMOTE_ADDR']
獲取IPv4中的客戶端IP地址。但是,當我在本地主機上測試它時,它將返回一個IPv6地址,如::1
。如何強制Apache使用IPv4
我使用Mac OS默認的Apache服務器。這是相關的嗎?如果是這樣,我可以知道如何強制它使用IPv4格式嗎?
它始終是決定哪些協議客戶端使用,而不是服務器。客戶端通過查找主機名來確定可用的協議。這通常意味着它會在/ 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的支持,那麼很有可能在一年或兩年內出現問題,如果不早一點的話。
數字更新。截至2015年1月的前三名:比利時的30.5%現在擁有IPv6接入,德國的12.6%和美國的11%。 –
你不能地圖每一個IPv6地址爲等效的IPv4地址..
您需要調整您的代碼對IPv6以及..
這不是一個「格式」...連接在IPv6回送中傳入,而不是IPv4。 ':: 1'是正確的地址。 IPv4和IPv6地址不僅僅是同一網絡節點的地址格式。 – Brad
我們有2012年,將近2013年。開始熟悉IPv6的時間... – glglgl