我有一个虚拟服务器,我想将它指向两个域,都指向不同的站点。
例如,example1.com转到/var/www/example1。example2.com去/var/www/example2.
我可以用 VirtualHosts 做到这一点:
<VirtualHost *:80>
ServerName example1.com
DocumentRoot "/var/www/example1"
</VirtualHost>
<VirtualHost *:80>
ServerName example2.com
DocumentRoot "/var/www/example2"
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是与领先的www. 为了启用对 的支持www,我刚刚添加了一个ServerAlias:
<VirtualHost *:80>
ServerName example1.com
ServerAlias www.example1.com
DocumentRoot "/var/www/example1"
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗?
我的第二个问题涉及 SSL。我也想example2.com通过 SSL 访问:https://example2.com. 我已经颁发了证书等,但我如何在我的httpd.conf文件中实现这一点?目前我有一个临时的解决方法。我刚刚将服务器的 main 更改DocumentRoot为指向 this /var/www/example2。我知道 SSL 位于不同的端口上,因此 VirtualHost 定义不会对其进行解释,因此我已将其作为快速解决方法。但是,我想知道这样做的最佳方法是什么?
是 - ServerAlias 是实现这一目标的标准方法。有时更喜欢选择 www.myserver.com 作为“最喜欢的”身份并使用“myserver.com”作为别名,但它确实没有什么不同,除非您在某些时候规范化(将链接转换为首选的链接)URL .
2.
编辑:似乎我误解了 OP 问题,所以这几乎无关紧要
简短回答 (用于在一台 apache 服务器上托管多个 SSL 站点)
最简单的解决方案是基于 IP 的虚拟主机...支持所有浏览器 - 向您的 ISP 询问第二个 IP 地址。所以每个 SSL 证书有 1 个 IP。请参阅下面的示例配置。
服务器名称指示 - 不是 XP 或旧的 safari,或旧的 android - 仅适用于 1 个 IP - http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI
长答案(男孩,我确实被这个答案带走了......;-)这是一个关于 SSL 和名称虚拟主机的快速入门......
基于名称的虚拟主机,是一种基于客户端(即 Web 浏览器等)提供的“主机”标头在网站之间共享 Web 服务器的策略。
这是一个 HTTP 1.1 扩展,为了使用它,apache 读取请求的内容并解析标头,即它看起来像这样;
GET /index.htm HTTP/1.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20100101 Firefox/8.0
Host: www.google.co.uk <-- apache checks this value
Run Code Online (Sandbox Code Playgroud)
但是,通过SSL 连接中使用的TLS 握手,服务器在发送 Host 标头之前使用 SSL 证书中的“通用名称”字段来标识自己。
因此(使用传统... SSL v1、旧浏览器等、Windows XP)每个 IP 地址只能有 1 个 SSL 身份,因为服务器做的第一件事就是将自己标识为 www.amazon.com,它无法更改然后...
基本上差异是这样的,在正常的http://myserver.com请求中
client: hello server
server: hello client
client: please give me web XXX
server: here is websiteXXX
Run Code Online (Sandbox Code Playgroud)
但是对于 https:// 请求,它更像是这样;
client: hello server
server: I am website XXX
client: ok, go ahead and give me website XXX
server: here is websiteXXX
Run Code Online (Sandbox Code Playgroud)
所以基本上,对于“支持所有浏览器”,包括粗暴的旧解决方案,您需要向您的 ISP 询问另一个公共 IP 地址,然后将您的第二个虚拟主机绑定到第二个 ip 而不是第一个...
然而,有一些替代方案允许在一个 IP 地址上使用多个 SSL 身份,这些身份适用于大多数现代浏览器,例如 SNI 或通配符证书。
但是,使用Server Name Indication,您可以在握手过程中告诉服务器您想要哪个主机,并且服务器可以提供正确的证书。看起来服务器将回退到默认 cert,因此当您拥有“主要”SSL 站点和不太重要的站点时,这可能是一个很好的策略,您可以接受一些用户请求丢失。
基本上,添加 SSL 虚拟主机的指令是相似的,除了您添加的只是普通的虚拟主机,而不是 NameVirtualHosts。
#if not done elsewhere in httpd.conf incldue these
Listen 443
LoadModule ssl_module modules/mod_ssl.so
#this does work for wildcard SSL certs like *.myserver.com (and SNI???)
NameVirtualHost *:443
<VirtualHost 1.1.1.1:443>
SSLEngine On
ServerName address1.com
DocumentRoot /var/www/adderss2
SSLCertificateFile /etc/httpd/conf/domaina_ssl/zimbra.zmb.moc.crt
</VirtualHost>
<VirtualHost 1.1.1.2:443>
SSLEngine on
ServerName address2.com
DocumentRoot /var/www/adderss2
SSLCertificateFile /etc/apache2/ssl/apache.pem
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32402 次 |
| 最近记录: |