![SSL 站点在 Apache 和 Ubuntu 中未使用正确的 IP](https://linux22.com/image/505042/SSL%20%E7%AB%99%E7%82%B9%E5%9C%A8%20Apache%20%E5%92%8C%20Ubuntu%20%E4%B8%AD%E6%9C%AA%E4%BD%BF%E7%94%A8%E6%AD%A3%E7%A1%AE%E7%9A%84%20IP.png)
我正在尝试设置一个 apache-ubuntu-php 网络服务器。我的网络服务器将托管多个 SSL 站点,每个 SSL 站点都有自己的 IP 地址(除非有更好的方法来实现这一点)。
所以我认为第一步是让 apache 识别至少两个不同的 IP 地址。现在,我有一个网站的 SSL 版本和非 SSL 版本,它们是http://mysite.com和https://mysite.com。虽然我的服务器上目前运行着两个,但我无法让它们使用不同的 IP 地址。目前,它们都使用 IP 1.1.1.1。我购买了第二个 IP 地址 2.2.2.2,但https://mysite.com不会接受它,并且 Firefox 会抱怨错误“ssl_error_rx_record_too_long”。以下是我的 2 个 vhost 文件
在 /etc/apache2/site-enabled/000-默认
#NameVirtualHost 1.1.1.1:80
#<VirtualHost 1.1.1.1:80>
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
/etc/apache2/site-enabled/mysite.com
<VirtualHost 1.1.1.1:80>
ServerAdmin [email protected]
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /srv/www/mysite.com/public_html/
ErrorLog /srv/www/mysite.com/logs/error.log
CustomLog /srv/www/mysite.com/logs/access.log combined
</VirtualHost>
<IfModule mod_ssl.c>
#<VirtualHost 2.2.2.2:443>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /srv/www/mysite.com/public_html/
ErrorLog /srv/www/mysite.com/logs/error.log
CustomLog /srv/www/mysite.com/logs/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/localcerts/www.mysite.com.crt
SSLCertificateKeyFile /etc/ssl/localcerts/www.mysite.com.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</VirtualHost>
</IfModule>
在 mysite.com 中,如果我将 <VirtualHost *:443> 替换为 <VirtualHost 2.2.2.2:443>,Firefox 会抱怨错误“ssl_error_rx_record_too_long”。
因此,当我尝试在第三个 IP 地址上使用另一个 SSL 证书创建并启用 /etc/apache2/site-enabled/mysite2.com 时,Apache 会抱怨“重叠”问题。
有人能告诉我如何启动我的服务器,以便我可以在不同的域上托管多个 SSL 网站吗?我希望 SSL 证书可以在 WinXP、Vista、Win7 和 OSX 等流行操作系统上为 IE 7+、FF 和 Safari 工作。
答案1
我通过调整 /etc/apache2/ports.conf 文件在我的服务器上进行了此项设置,如下所示:
<IfModule mod_ssl.c>
NameVirtualHost *:443
# SSL name based virtual hosts are not yet supported, therefore no
# NameVirtualHost statement here
NameVirtualHost *:443
Listen 443
</IfModule>
然后,您应该能够通过编辑 /etc/apache2/sites-enabled/mysite.com 来使用(省略了一些代码以缩短示例):
<VirtualHost *:443>
ServerName mysite1.com
SSLCertificateFile /etc/ssl/localcerts/www.mysite1.com.crt
SSLCertificateKeyFile /etc/ssl/localcerts/www.mysite1.com.pem
</VirtualHost>
<VirtualHost *:443>
ServerName mysite2.com
SSLCertificateFile /etc/ssl/localcerts/www.mysite2.com.crt
SSLCertificateKeyFile /etc/ssl/localcerts/www.mysite2.com.pem
</VirtualHost>
您可以根据需要设置任意数量的虚拟主机。
编辑:需要第二个意见吗?请点击这里:http://forum.slicehost.com/comments.php?DiscussionID=3244
答案2
我目前无法检查,所以这只是一个大胆的猜测:文件通常按字母顺序读取。当您以相反的顺序读取它们时,您可能会更幸运,例如将 000-default 重命名为 500-default 并使用 400-myhost。我不记得 apache 喜欢将默认主机放在哪里 - 第一个还是最后一个。但从你所说的(重叠)来看,它可能是最后一个