如何强制Apache使用IPv4

时间:2012-11-04 06:07:16

标签: php macos apache ipv6 ipv4

我想使用PHP超全局$_SERVER['REMOTE_ADDR']在IPv4中获取客户端IP地址。但是,当我在本地主机上测试它时,它会返回一个类似::1的IPv6地址。

我使用的是Mac OS默认的Apache服务器。这有关系吗?如果是这样,我可以知道如何强制它使用IPv4格式吗?

2 个答案:

答案 0 :(得分:3)

你不能将每个ipv6地址映射到等效的ipv4地址..

您还需要调整ipv6的代码..

答案 1 :(得分: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。荷兰已经有至少四家为其用户提供IPv6的ISP。等

如果您现在不在项目中为IPv6提供支持,那么即使不是更快,也有可能在1年或2年内出现问题。