如何为本地环境设置 hosts 文件?

如何为本地环境设置 hosts 文件?

我正在尝试在本地主机上创建子域,但超出了我的范围...我在我的 Mac OS X 上运行 MAMP,我认为/认为我必须执行以下操作:

(假设我想创建 me.localhost.com 和 you.localhost.com)

(1)编辑/private/etc/hosts

现在,它看起来是这样的:

127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost

那么,我是不是应该这样做:

127.0.0.1       localhost
127.0.0.1       me.localhost.com
127.0.0.1       you.localhost.com
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost

(2) 我假设我根本不需要处理 DNS,因为它是本地的?那么,hosts 文件就够了吗?

(3)然后,我需要编辑 httpd.conf 文件以包含虚拟主机吗?我试过了,但没有成功……

NameVirtualHost *

<VirtualHost *>
DocumentRoot "/Applications/MAMP/htdocs"
ServerName localhost
</VirtualHost>

<VirtualHost *>
DocumentRoot "/Applications/MAMP/htdocs/me.localhost.com"
ServerName me.localhost.com
</VirtualHost>

<VirtualHost *>
DocumentRoot "/Applications/MAMP/htdocs/you.localhost.com"
ServerName you.localhost.com
</VirtualHost>

不确定我是否偏离了基础...非常感谢您的帮助!

答案1

对于本地名称解析:

您需要 localhost.com 吗?在我的环境中:

$ vi /etc/hosts

127.0.0.1       localhost
127.0.0.1       box1 box2 box3

$ ping box1

返回“127.0.0.1”就好了。

在浏览器中,我还可以解析http://box1http://box2, 等等。

在 10.5、10.6 上至少我可以确认 OSX 不会覆盖你的 /etc/hosts,这是上一个答案中提出的问题。

对于 Apache,对于每个新的虚拟主机,添加:

<VirtualHost *:80>

ServerName box1

DocumentRoot /full/path/to/documentroot/

...[etc]

</VirtualHost>

由于您的浏览器将正确将“box1”解析为 127.0.0.1,您的请求将被路由到本地框,其中 apache 将读取标头并发现它是针对“box1”的,并将使用相应的虚拟主机。

或者,您也可以使用其中一个(许多?)工具来自动执行此操作,例如(我与此无关,只是在尝试寻找我正在考虑的不同示例时快速谷歌搜索:http://clickontyler.com/virtualhostx/

答案2

请注意,127.0.0.1 的所有别名都应在一行上指定,否则您会得到奇怪的结果(至少在 Linux 中)。

127.0.0.1 localhost me.localhost.com you.localhost.com

答案3

VirtualHost获取要定义的虚拟主机的名称。<VirtualHost *>定义 catch-all 默认值。因此,应该是

<VirtualHost me.localhost.com>

(我希望您意识到me.localhost.com,严格来说,这是对 TwoCows 命名空间的违反,并且与 完全不同me.localhost。)

不过,我不太确定 OS X 是否会/多久会覆盖/etc/hosts。可能需要使用 Open Directory – 但正如我刚刚意识到的那样,它的手册页 (并在那里添加您的条目​​。man DirectoryService) in Snow Leopard points to a non-existing utility (/Applications/Utilities/Directory Utility.app). I.e., you'd need to use dscl and, probably, go to /Local/Default/Hosts

相关内容