为多个域提供服务的单个 IP 服务器的 /etc/hosts 条目

为多个域提供服务的单个 IP 服务器的 /etc/hosts 条目

运行 Ubuntu 10.04

我的服务器使用 Apache2 中的命名虚拟主机为 3 个不同的域提供服务。我目前使用不同的命名虚拟服务器将 www 301 重定向到非 www 等效服务器。它正在工作,但我不明白我的 /etc/hosts 文件的正确条目,我认为这给我尝试设置 Varnish 带来了问题。

我知道我需要 localhost 线路

127.0.0.1       localhost localhost.localdomain

我是否也应该在这里列出每个域名?例如

127.0.0.1       localhost localhost.localdomain example1.com example2.com example3.com

服务器 IP 的条目怎么样?我需要以下行吗?

< IP.Of.Server >      example1.com example2.com example3.com

另外,我是否应该在每一行列出 www.example.com 和 example.com,以便它们进入 Apache 并且它可以处理 301 redir?

答案1

我假设这是为了测试,否则您将设置正确的 DNS 记录,而不是您的hosts文件。

您想要的是将每个用来调用 Web 服务器的名称解析为您服务器的 IP 地址。

如果您从服务器本身进行测试,那么您可以让所有内容指向 127.0.0.1,但当然也可以让它指向您服务器的实际 IP 地址。

如果您从另一台机器进行测试,那么您当然希望每个名称都能解析为服务器的真实 IP 地址。

语法很简单:

IP.of.server        www.domain.name domain.name
IP.of.server        www.otherdomain.name otherdomain.name
IP.of.server        www.anotherdomain.name anotherdomain.name
IP.of.server        www.yetanotherdomain.name yetanotherdomain.name

...等等。


更新:

当然,ErikA 说的完全正确。修改文件hosts不是服务器工作所需;它仅在您需要在没有适当的 DNS 记录的情况下进行测试时才有用,或者您想要覆盖它们以将 fe 连接到测试服务器而不是生产服务器。

答案2

您需要使用 hosts 文件的唯一原因是您没有正常运行的 DNS 环境,或者您需要出于测试目的暂时覆盖某些 DNS 名称。

修改 hosts 文件是不是使用名称虚拟服务器所需。

答案3

IP 条目应为 Apache 正在监听的内容。因此,如果您有<VirtualHost 1.2.3.4:80>,则主机条目应以 开头1.2.3.4

如果你正在监听所有接口,那么你真幸运!你可以选择一个!而且127.0.0.1它工作得很好。

至于右侧的部分,它必须与您在地址栏中输入的内容相匹配。因此,如果您希望能够在地址栏中输入www.example.com并发生某些事情,那么您将需要在您的 hosts 文件中使用该名称来告诉您的计算机这意味着哪个 IP。Apache 只能在流量到达那里时处理重定向;因此需要 hosts 文件条目。

我相信我不必说这只适用于开发设置。主机-IP 地址映射应由 DNS 服务器完成,而不是静态文件。

答案4

显然,无论 DNS 如何,你总是需要修复 hosts 文件 - 否则,当你在高负载下重新启动 apache 时,它​​需要长达 90 秒的时间才能真正停止并重新启动(请参阅为什么 httpd 平滑重启需要这么长时间?

相关内容