在我的服务器上使用 SSL 时遇到了一些问题。我只需要将它用于此机器上的两个域中的一个。我有两个 IP,并且我正在使用 DNS 上的 A 记录将域指向不同的 IP。
这是我的httpd.conf:
NameVirtualHost XX.XX.XXX.X1:80
NameVirtualHost XX.XX.XXX.X2:80
NameVirtualHost XX.XX.XXX.X2:443
<VirtualHost XX.XX.XXX.X1:80>
ServerName domain1.com
ServerAlias .*
WSGIScriptAlias / /home/domain1/domain1.wsgi
</VirtualHost>
<VirtualHost XX.XX.XXX.X2:80>
ServerName domain2.me
DocumentRoot /var/www/domain2
</VirtualHost>
<VirtualHost XX.XX.XXX.X2:443>
ServerName www.domain2.me
DocumentRoot /var/www/domain2
ServerAdmin [email protected]
SSLEngine ON
SSLCertificateFile /etc/apache2/ssl/domain2.me.ssl/domain2.me.crt
SSLCertificateKeyFile /etc/apache2/ssl/domain2.me.ssl/domain2.me.key
SSLCACertificateFile /etc/apache2/ssl/domain2.me.ssl/gd_bundle.crt
</VirtualHost>
希望可以发现一些明显的错误。以下是两个要点的链接,其中包含我尝试过的其他配置。第一个只是尝试使用 apache 附带的 snakeoil 证书:
基本上,当我拉起页面时,会出现“页面不可用”的情况https://www.domain2.me。
提前致谢。
更新:问题是 iptables 没有配置为接受端口 443 上的流量。我接受 EightBitTony 的回答,因为在我修复 iptables 之后,他的配置就能完美运行。
答案1
这个设置对我来说很有效(并且它是默认的 Debian 东西,几乎没有变化)。
在 ports.conf 中
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>
这和你的很相配。
然后,对于我的每个虚拟主机(非 SSL),
<VirtualHost *:80>
ServerName domain.example:80
DocumentRoot "/some/path/to/html"
UseCanonicalName Off
<Directory "/some/path/to/html">
... stuff ....
</Directory>
</VirtualHost>
和 SSL
<VirtualHost *:443>
ServerName ssl-domain.example:443
UseCanonicalName Off
DocumentRoot "/some/path/to/ssl-html"
<Directory "/some/path/to/ssl-html">
... stuff ...
</Directory>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
</VirtualHost>
我认为您应该使用UseCanonicalName Off
,以便服务器根据客户端传递的详细信息生成 URL,这样它就可以获得正确的端口和名称。完整详细信息这里。
最后,您需要确保相关的 SSL 模块已启用,我认为在您的情况下确实如此(但是为了完整性,在这里这样做)。
更新:除了监听正确的端口之外,您还需要确保 iptables 没有阻止或丢弃端口 443 上的 SSL 流量。