我有 2 台服务器:app1.example.biz 和 app2.example.biz 我需要执行以下操作,使用 apache2 作为反向代理,将来自互联网的所有流量重定向到相应的服务器并使用 SSL。我所做的配置允许我将 app1.example.biz 重定向到 https app1.example.biz,然后我就可以访问该服务器。问题是我无法对 app2.example.biz 执行相同操作,当我输入 app2.example.biz 时,它会将我重定向到 https app1.example.biz!!PS:我无法发布两个以上的超链接,因为我是新用户,但我的配置是正确的。
<VirtualHost *:80>
ServerName app1.example.biz/
Redirect / https app1.example.biz/
</VirtualHost>
<VirtualHost *:443>
ServerName app1.example.biz
ServerAlias app1.example.biz
ProxyPass / http app1.example.biz/
ProxyPassReverse / http app1.example.biz/
SSLEngine on
SSLCertificateFile /etc/ssl/servwiki.crt
SSLCertificateKeyFile /etc/ssl/servwiki.key
SSLVerifyClient none
</VirtualHost>
#<VirtualHost *>
# ServerName app2.example.biz/
# Redirect / https app2.example.biz/
#</VirtualHost>
<VirtualHost *>
ProxyPreserveHost On
ServerName app2.example.biz
ServerAlias app2.example.biz
ProxyPass / http app2.example.biz/
ProxyPassReverse / http app2.example.biz/
SSLEngine on
SSLCertificateFile /etc/ssl/servwiki.crt
SSLCertificateKeyFile /etc/ssl/servwiki.key
SSLVerifyClient none
</VirtualHost>
我尝试过:1 / 使用 NameVirtualHost:80 和 NameVirtualHost:443 2 / 像这样命名每个虚拟主机 3 / 添加
<VirtualHost *>
ServerName www.example.biz
DocumentRoot /usr/local/apache/htdocs
#SSLEngine on
#SSLCertificateFile /etc/ssl/servwiki.crt
#SLCertificateKeyFile /etc/ssl/servwiki.key
#SSLVerifyClient none
</VirtualHost>
这解决了将 http app1.example.biz 和 http app2.example.biz 重定向到相应服务器的问题,但它不能与 ssl 一起工作!
请帮忙
答案1
据推测,您的第二个虚拟主机配置缺失:443
(我不确定这是否只是复制/粘贴错误)。
您将要面对的下一个问题是,您需要能够处理 SSL/TLS 上的多个主机。为此,您需要服务器在 SSL/TLS 握手期间出示该主机名的有效证书,前发送任何 HTTP 请求/响应。可以使用以下技术之一完成:
- 使用单个 IP 地址和单个证书,该证书对您想要同时服务的所有主机都有效。这可以通过具有多个主题备用名称条目(
app1.example.biz
和app2.example.biz
)的证书(有时称为 UCC)或通配符证书(例如*.example.biz
,但不鼓励使用它们)来实现。 - 如果可以,请为每个主机使用不同的 IP 地址。在这种情况下,不要依赖
NameVirtualHost
HTTPS,而是在每个虚拟主机条目中设置 IP 地址,并使用其证书配置每个虚拟主机部分。 - 使用单个 IP 地址和多个证书,但您的客户端需要支持服务器名称指示扩展。(例如,Windows XP 上的任何 IE 版本、某些移动客户端和 Java 6 均不支持此功能。)如何在 Apache Httpd 上配置它,请参阅这一页。