假设我有以下 VirtualHost
<VirtualHost demo.example.com:80>
ServerAdmin webmaster@WPQA
DocumentRoot /var/www/demo
ServerName demo.example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost example.com:443>
ServerAdmin webmaster@WPQA
DocumentRoot /var/www
ServerName example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
SSLCertificateChainFile /etc/apache2/ssl/intermediate.crt
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
我正在尝试绕过 SSL demo.example.com
,但是子域名返回的内容与相同example.com
。
我在这里做错什么了吗?
答案1
您的配置文件在端口 80 上设置了 demo.example.com(因此仅限 HTTP),并在端口 443 上设置了 example.com(仅限 HTTPS)。
请注意,即使你在 443 上设置它们,你也会遇到两个问题:
您不能在 example.com 和 demo.example.com 之间共享证书。典型/普通证书将覆盖空白域名和 www。(即 example.com 和 www.example.com),因此 demo.example.com 将被视为不相关,并将在浏览器中显示 SSL 错误。一种解决方案是购买通配符证书 *.example.com,这要昂贵得多,或者您需要为 demo.example.com 单独购买证书。
如果你获得了单独的证书,那么要托管 example.com 和 demo.example.com,你将需要使用名为服务器名称指示,不幸的是,它不适用于 IE/Windows XP 用户。这就是为什么它不经常使用的原因。您可以了解有关使用 Apache 设置 SNI 的更多信息这里。通配符域名不存在这个问题,但正如我之前提到的,缺点是它们更昂贵。
答案2
您的虚拟主机配置应该是:
<VirtualHost *:80>
ServerAdmin webmaster@WPQA
ServerName demo.example.com
ServerAlias demo.example.com
DocumentRoot /var/www/demo
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
*
请注意该行通配符的使用<VirtualHost *:80>
。我还设置了ServerAlias
以及ServerName
。