我的托管服务提供商为我设置了一个基于 Ubuntu 的虚拟专用服务器,该服务器具有三个公共 IP。我想按如下方式为这些 IP 分配主机名(我使用 Dyn 作为我的 DNS):
- example.com -> IP_1
- www.example.com -> IP_1
- test.example.com->IP_2
- admin.example.com->IP_3
www.example.com 将是生产站点。test.example.com 将是站点的最新版本,用于测试,admin.example.com 将公开许多站点管理服务(例如 SSH、rsyncd)。www 和 test 都将被锁定到端口 80。test 和 admin 都只接受来自特定 IP 的流量。
我对 DNS 处理的主机名和服务器的主机名(在服务器的命令行上运行“hostname”时看到)之间的区别有点困惑。服务器的主机名在哪里发挥作用?
我猜 Apache 2 并不关心hostname
实用程序返回的内容,因为我可以为每个 VirtualHost 指定监听 IP:PORT。但是,如果机器的主机名为“randomname”,那么在通过“foo.mydomain.com”连接到我的服务器时,我是否应该注意其他服务(或限制)?
答案1
主机名可以轻松区分服务器。请参阅RFC-1178 为您的计算机选择名称了解更多详情。对于您正在做的事情,服务器的主机名实际上并不重要。在您的例子中,您的主机将托管多个 FQDN(完全限定域名)以启用服务。您可以使用附加 DNS CNAME 或 A 记录添加更多。
由于您的网站规模较小,因此所有这些域名都指向单个主机。像 google.com 这样的大型服务有多个 IP 地址,由多个服务器支持。在某些情况下,IP 地址可能属于多个服务器前面的负载平衡器。
对于 Apache 服务器,您应该使用基于 IP 的虚拟主机。您可以使用 Apache ACL 和/或防火墙来限制访问。如果可以,我会同时使用这两种方法。
如果您添加邮件服务器,则应应用其他规则。邮件服务器的 FQDN 应与服务器公布的名称相同。此外,IP 地址应具有返回该 FQDN 的 PTR 记录。
答案2
服务器主机名无关紧要。对于 Apache 来说,您的浏览器将获取一个 http 数据包,并在数据包中放置一个 http 主机标头,该标头将包含您要访问的主机名。然后,Apache 将获取数据包并检查主机标头,并根据以下信息确定将请求发送到哪个虚拟主机
servername or serveralias
对于其他事物,通常它只是建立直接 IP 连接,因此无论您的主机名解析为什么,它都只会与该端口上的该 IP 建立连接。
答案3
如果您运行任何外发邮件服务器,您的 smtp helo 问候语和 fqdn 主机名应该匹配,以避免垃圾邮件过滤器。