如果这是一个初级问题,请原谅,但我急需一些建议。
我想在同一台服务器上运行两个网站,例如foo.org
和bar.info
。两者都应可通过 http 和 https 访问。我的目录/etc/apache2/sites-enabled
包含文件foo
和bar
。
这两个文件如下所示(省略了一些日志条目):
富
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.foo.org
DocumentRoot /var/www/dir
ServerAlias foo.org foo.de www.foo.de
RewriteEngine On
RewriteOptions inherit
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName www.foo.org
DocumentRoot /var/www/dir
ServerAlias www.foo.de
RewriteEngine On
RewriteOptions inherit
# # SSL Specific options
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
</VirtualHost>
酒吧
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName blog.bar.info
DocumentRoot /var/www/bar/blog
ServerAlias www.blog.bar.info
RewriteEngine On
RewriteOptions inherit
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName analytics.bar.info
DocumentRoot /var/www/bar/analytics
# ServerAlias
RewriteEngine On
RewriteOptions inherit
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName blog.bar.info
DocumentRoot /var/www/bar/blog
RewriteEngine On
RewriteOptions inherit
# # SSL Specific options
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
</VirtualHost>
主要问题是,当访问https://foo.org,现已重定向至https://blog.bar.info。
使用 http 似乎运行良好。
我的错误是什么?另外:如何确保一个网站永远不会重定向到另一个网站?
编辑:该ports.conf
文件包含:
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz
NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
答案1
当您说“重定向”时,您的意思是它只是提供错误的内容,而客户端浏览器中的 URL 不会改变,对吗?我猜您的配置中没有指令NameVirtualHost *:443
- 在您拥有的 Debian 配置结构中,这应该在 中ports.conf
。
不过,要小心这个设置。仅使用自签名 SSL 证书运行测试就没问题,但如果在互联网上开放时没有考虑到这一点,就会给您带来问题。
您需要以下三项中的一项才能使其在向公众公开时正常运行而不会出现错误:
- 一份涵盖两个域名的 SSL 证书。这称为 SAN 或 UCC 证书,其费用比两份涵盖两个不同域名的常规证书要高。
- 每个 SSL 站点都有不同的 IP 地址,每个站点都有自己的证书。
- 确保访问您网站的所有客户端浏览器都支持 TLS SNI,这样您就可以在同一 IP 地址上为每个网站配置不同的证书。在 2014 年 Windows XP 开始逐渐消失之前,不要指望大多数公共网站都能做到这一点。
编辑:
为了使客户端在尝试访问未<VirtualHost>
配置 SSL 的站点时收到错误,您需要修改 443 上的默认虚拟主机。
要加载的第一个<VirtualHost *:443>
块充当“默认”角色,为ServerName
与ServerAlias
另一个<VirtualHost *:443>
块中的名称不匹配的所有请求提供服务。因此,让我们创建一个“默认”块,它只提供错误,而对其他已配置站点的请求仍会得到正确的处理。
创建一个以字母表中较早
/etc/apache2/sites-available
名称或类似名称命名的文件,内容如下:0-ssl-default
<VirtualHost *:443> ServerName default-ssl-catch-all <Location /> Order allow,deny Deny from all </Location </VirtualHost>
使用 启用该功能
a2ensite 0-ssl-default
,然后重新启动 Apache。
答案2
在您的 www.foo.org 端口 443 配置中,您需要配置 ServerAlias 以包含 foo.org 的条目
ServerAlias foo.org foo.de www.foo.de