Apache 基于 IP 的虚拟主机:无法通过 ServerName 访问 .localhost TLD,但可以通过 IP 访问

Apache 基于 IP 的虚拟主机:无法通过 ServerName 访问 .localhost TLD,但可以通过 IP 访问

早上好。

尝试让它工作但我很确定我遗漏了一些东西。

我的虚拟主机配置文件:

<VirtualHost 127.0.0.11:80>
    ServerName test.localhost
    #...
</VirtualHost>

我的 /etc/hosts 文件:

...
127.0.0.11 test.localhost
...

当我去http://127.0.0.11它有效,但是当我去http://测试.localhost但事实并非如此——它返回到我已配置的默认站点<VirtualHost _default_:*>...</VirtualHost>。我已经搜索了几个小时,有点不知所措,希望有人能给我指点一下该看什么。

谢谢。

答案1

看起来所有顶级域名为 .localhost 的域名都映射到 127.0.0.1。当我将虚拟主机 ServerName 更改为“test.local”并相应地更新 /etc/hosts 时,一切正常。

来自RFC2606:

“.localhost” TLD 传统上在主机 DNS 实现中被静态定义为具有指向环回 IP 地址的 A 记录,并保留用于此类用途。任何其他用途都会与广泛部署的假定此用途的代码相冲突。

我假设“环回 IP 地址”是 127.0.0.1。

虽然我能够从http://测试.localhost/并获取正确的数据,实际上,从我的网络浏览器 (chromium) 加载该 URL 是从 127.0.0.1 拉取的,正如我在网络开发人员工具中默认页面的请求标头中观察到的那样。我猜 chromium 不会检查 /etc/hosts 条目中是否有任何对具有 .localhost TLD 的主机的请求...我可以去http://onfasofn3noidsnfd90.localhost并且它仍然映射到托管在 127.0.0.1 上的我的默认网站。

参考文献:

相关内容