如何将 2 个不同的域名指向 1 个 IP 地址(Apache)?

如何将 2 个不同的域名指向 1 个 IP 地址(Apache)?

我有两个不同的域名,我想将它们托管在同一个私人主机上。我希望它们指向相同的 IP 地址,但内容不同(当然)。我该怎么做?有不同的方法吗?在这种情况下,最好的方法是什么。谢谢。

答案1

您可能想要使用 Apache 的虚拟主机。这是一种在单个 IP 地址上托管多个域的受支持方法。

http://httpd.apache.org/docs/2.2/vhosts/

具体来说,基于名称的虚拟主机:http://httpd.apache.org/docs/2.2/vhosts/name-based.html

答案2

Apache2 支持根据域名提供不同的内容,即使所有这些域名解析到同一个 IP 地址。每个域名由一个虚拟主机,因此得名基于名称的虚拟主机

以下是两个域的示例配置:

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName www.yourfirstdomain.tld
  DocumentRoot /www/yourfirstdomain.tld/
</VirtualHost>

<VirtualHost *:80>
  ServerName www.yourseconddomain.tld
  DocumentRoot /www/yourseconddomain.tld/
</VirtualHost>

您可以在以下位置找到官方文档基于名称的虚拟主机支持

但是,请注意这只适用于纯 HTTP 连接,而不适用于 HTTPS(SSL 上的 HTTP):基于名称的虚拟主机依赖于了解所请求的名称,但在建立加密的 SSL 连接之前,Apache 无法知道此信息。

如果你需要你的设置也使用 HTTPS,你需要依赖 SSL 协议的扩展,称为服务器名称指示(SNI)(RFC4366)。基本上,启用 SNI 的客户端(例如:Web 浏览器)在建立加密的 SSL 连接时会添加额外的纯文本信息,从而允许服务器在 SSL 连接准备好之前知道所请求的名称。

目前并非所有浏览器都支持 SNI。在撰写本文时,根据 Wikipedia 的介绍,以下浏览器支持 SNI:

  • Internet Explorer 7 或更高版本,适用于 Windows Vista 或更高版本(不适用于 XP,甚至 IE 8)
  • Mozilla Firefox 2.0 或更高版本
  • Opera 8.0 或更高版本(必须启用 TLS 1.1 协议)
  • Android 版 Opera Mobile 至少为 10.1 beta 版
  • Google Chrome(Vista 或更高版本、XP 使用 Chrome 6 或更新版本、OS X 10.5.7 或更高版本使用 Chrome 5.0.342.1 或更新版本)
  • Safari 2.1 或更高版本(Mac OS X 10.5.6 或更高版本以及 Windows Vista 或更高版本)
  • Konqueror/KDE 4.7 或更高版本
  • Apple iOS 4.0 或更高版本中的 MobileSafari
  • Honeycomb(v3.x)或更高版本的 Android 默认浏览器
  • Windows Phone 7
  • Maemo 上的 MicroB

托管多个可通过 HTTPS 访问的基于名称的虚拟主机需要您启用 mod_ssl 并添加与上例类似的配置:

Listen 443      
NameVirtualHost *:443

# Accept connections for these vhosts from non-SNI clients
# Clients without SNI will be handled by the first defined vhost.
# If you only want SNI-enabled client, put on instead
SSLStrictSNIVHostCheck off

<VirtualHost *:443>
  ServerName www.yourfirstdomain.tld
  DocumentRoot /www/yourfirstdomain.tld/    
</VirtualHost>

<VirtualHost *:443>
  ServerName www.yourseconddomain.tld
  DocumentRoot /www/yourseconddomain.tld/
</VirtualHost>

请记住,使用 SSL 需要您为您的域名购买 SSL 证书 - 或者生成一些自动签名的证书,并配置 Apache 以使用它们进行 SSL 连接。

相关内容