这个问题已经以多种形式提出,我花了六个多小时在互联网上搜寻可以解决我的问题的答案。到目前为止,我一直没有成功。我使用 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”的解决方案。