我需要在单个 Apache 服务器上配置多个 SSL 证书。我已经知道我需要多个外部 IP 地址,因为我无法使用 SNI(此服务器上仅运行 Apache 2.2.3)。
我以为我已经正确配置了一切,但不幸的是,事情并没有按应有的方式进行(或者我应该说,没有按我期望的方式进行)...
在我的 httpd.conf 中我有:
NameVirtualHost *:80
NameVirtualHost *:443
假设我的公共 IP 是 12.0.0.1,私有 IP 是 192.168.0.1。
当我在虚拟主机中使用公共 IP 时,将显示我的默认网站,而不是我的虚拟主机中定义的网站,例如:
<VirtualHost 12.0.0.1:443>
ServerAdmin [email protected]
ServerName blablabla.site.com
DocumentRoot /data/sites/blablabla.site.com
ErrorLog /data/sites/blablabla.site.com-error.log
#CustomLog /data/sites/blablabla.site.com-access.log common
SSLEngine On
SSLCertificateFile /etc/httpd/conf/ssl/blablabla.site.com.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl/blablabla.site.com.key
SSLCertificateChainFile /etc/httpd/conf/ssl/blablabla.site.com.ca-bundle
<Location />
SSLRequireSSL On
SSLVerifyDepth 1
SSLOptions +StdEnvVars +StrictRequire
</Location>
</VirtualHost>
当我在虚拟主机中使用私有 IP 时,一切都正常运行(显示在我的虚拟主机中定义的网站),例如:
<VirtualHost 192.168.0.1:443>
...same as above...
</VirtualHost>
我的服务器正在监听所有接口:
[root@grbictwebp02 httpd]# netstat -tulpn | grep :443
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 5585/httpd
我做错了什么?如果我无法让它工作,我就无法继续在另一个公共 IP 上添加第二个 SSL 证书...
如果需要更多信息请告诉我!
答案1
您需要使用绑定到服务器的 IP 地址来配置虚拟主机。
听起来你有一个 NAT 设备,它将你的公共 IP 转换为你的服务器已分配给网络接口的私有 IP。NAT 发生后,该数据包中没有公共 IP 的记录,因此映射需要在你的私有 IP 上进行。
(如果两个公共 IP 都通过 NAT 连接到同一个私有 IP,则需要进行更改 - 每个公共 IP 对应一个不同的私有 IP。)
答案2
您说的“不工作”是什么意思?Apache 错误日志中有任何错误吗?请发布完整的 VirtualHost 声明。
将您的问题陈述为:“我执行了以下步骤,在此处添加了以下配置,然后执行了此操作,我原本期望它会这样做。但它说了这样的话。出了什么问题?”您的帖子写得越清楚,您自己找到答案的机会就越大。
答案3
你应该先删除
NameVirtualHost
行。NameVirtualHost 用于使用主机名分隔虚拟主机 - 由于您没有这样做,因此应该删除这些行。您还需要为虚拟主机指定端口,如下所示:
<VirtualHost 192.168.0.1:443>
您的私有主机可以工作而公共主机却不行的原因是,当您使用 NameVirtualHosts 并且您的服务器无法确定您想要哪个主机时,它将始终使用列出的第一个主机,因为这是默认主机。