运行 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 平滑重启需要这么长时间?)