【发布时间】:2012-05-16 10:49:06
【问题描述】:
这个问题有多种形式,我花了六个多小时在互联网上搜寻可以解决我问题的答案。到目前为止,我一直没有成功。我使用 MAMP 开发 PHP 应用程序,昨天我从 Snow Leopard 升级到了 Lion,我的本地应用程序立即运行得慢了很多。我相信这是关于 Lion 如何处理 IPv6 的 DNS 查找问题。我尝试了以下步骤来解决问题:
- 已将我的主机文件中的所有条目更改为不再使用 .local TLD
- 将我的主机文件中的所有条目放在单独的行中
- 确保我的主机文件具有正确的编码
- 向我的主机文件中的所有本地条目添加了 IPv6 条目
- 已安装 dnsmasq(可能没有正确完成)
- 将我的所有主机文件条目放在 fe80::1%lo0 localhost 行之前
这解决了一些问题,但还有一个问题我还没有弄清楚。在我们的 PHP 应用程序中,我们这样定义 SOAP 端点:
api:8080/contract/services/SomeService?wsdl
在每台服务器上,主机文件中都有一个“api”条目,它指向 SOAP API 的 IP 地址。因此,当我想指向我们的开发服务器时,我将主机文件更改为如下所示:
132.93.1.4 接口
(不是真实IP)
在主机文件中对 api 条目的 DNS 查找仍然每次需要 5 秒。当我 ping api 时,结果立即返回。但是,当我 ssh api 时,大约需要 5 秒钟才能连接到服务器。这意味着当我加载我的 PHP 应用程序时,任何 SOAP 查询都需要 5 秒 + 无论实际查询需要多长时间,这使得本地开发完全不可能。我意识到我们定义端点的方式可能不是最好的设计决策,但这是我必须使用的。
从我读过的其他问题来看,我相信它首先尝试在 IPv6 中查找“api”,失败,然后在 /etc/hosts 中查找。我尝试使用 dnsmasq 切换此顺序,但没有运气。有谁知道如何强制它先读取 /etc/hosts 或完全跳过 IPv6?
更新:我将主机文件中的条目更改为 api.com、api.foo 以及带有“.”的任何内容在里面,它立即做出了反应。不过,我还是想找一个不需要改名“api”的解决方案。
【问题讨论】:
-
我唯一成功的解决方案是使用带有“。”的 api 指针。在里面。因此,我没有将主机文件中的“api”指向 API 机器的 IP 地址,而是使用“api.dev”。
-
感谢您的提问。 os x 10.8.2 和 MAMP 2.1.1 基本上是同样的问题。通常的 IPv6 技巧(带有选项卡)不起作用。到目前为止,我唯一的解决办法:关闭 WiFi。
标签: php dns osx-lion mamp ipv6