以下是上下文:
这就是我想要的:
以下是用例:
网址“https://www.example.com”==>保持https +删除www确定
网址'test.example.com'==>重定向到https确定
最后一点是我正在努力解决的问题。
这是我的配置:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect / https://example.com/
</VirtualHost>
<VirtualHost *:80>
ServerName test.example.com
ServerAlias www.test.example.com
Redirect / https://test.example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/public/example
SSLEngine on
SSLCertificateFile xxx
SSLCertificateKeyFile xxx
SSLCertificateChainFile xxx
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
</VirtualHost>
<VirtualHost *:443>
ServerName test.example.com
ServerAlias www.test.example.com
SSLEngine on
SSLCertificateFile xxx
SSLCertificateKeyFile xxx
SSLCertificateChainFile xxx
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
JkMount / worker_test
JkMount /* worker_test
</VirtualHost>
所以,似乎我差不多了,但我做错了什么?
答案 0 :(得分:0)
据我所知,您无法为每个IP配置多个https
虚拟主机,就是这样,基于名称的虚拟主机仅限于一个SSL虚拟主机。
此信息来自https://wiki.apache.org/httpd/NameBasedSSLVHosts
通常,在同一IP地址和端口上托管多个SSL虚拟主机是不可能的。这是因为Apache需要知道主机的名称才能选择正确的证书来设置加密层。但是,所请求主机的名称仅包含在HTTP请求标头中,该标头是加密内容的一部分。因此,在加密已经协商之后才可用。这意味着无法选择正确的证书,客户端将收到证书不匹配警告,并且容易受到中间人攻击。
实际上,Apache将允许您配置基于名称的SSL虚拟主机,但它将始终使用首先列出的虚拟主机(在所选IP地址和端口上)的配置来设置加密层。在某些特定情况下,可以为多个虚拟主机使用单个SSL配置。特别是,如果SSL证书适用于所有虚拟主机,则此功能将起作用。例如,这将在以下情况下有效:
所有VirtualHost都在同一个域内,例如:one.example.com和two.example.com。
- 醇>
您拥有该域的通配符SSL证书(通用名称以星号开头的证书:即* .example.com)
我听说过使用SNI实现这种配置,但我从未测试过:SSL with Virtual Hosts Using SNI