我有两个不同的域名,我想将它们托管在同一个私人主机上。我希望它们指向相同的 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 连接。