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

Nim*_*ima 12 vps domain apache-2.2

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

p_p*_*r3k 15

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>
Run Code Online (Sandbox Code Playgroud)

您将在此处找到有关基于名称的虚拟主机支持的官方文档

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

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

所有浏览器尚不支持 SNI。在撰写本文时,根据维基百科,这些是这样做的:

  • Internet Explorer 7 或更高版本,Windows Vista 或更高版本(不适用于 XP,甚至 IE 8)
  • Mozilla Firefox 2.0 或更高版本
  • Opera 8.0 或更高版本(必须启用 TLS 1.1 协议)
  • Opera Mobile 至少为 Android 10.1 测试版
  • Google Chrome(Vista 或更高版本,Chrome 6 或更高版本上的 XP,Chrome 5.0.342.1 或更高版本上的 OS X 10.5.7 或更高版本)
  • Safari 2.1 或更高版本(Mac OS X 10.5.6 或更高版本和 Windows Vista 或更高版本)
  • Konqueror/KDE 4.7 或更高版本
  • Apple iOS 4.0 或更高版本中的 MobileSafari
  • Honeycomb (v3.x) 或更新版本上的 Android 默认浏览器
  • 视窗电话 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>
Run Code Online (Sandbox Code Playgroud)

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


Ben*_*enC 7

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

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

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