我运行 Apache Tomcat 并启用 SSL。我让 Apache HTTP Server 充当反向代理,因此如果用户点击http://我的服务器/tomcat/它们被传递给http://我的服务器:8080。
ProxyPass /tomcat/ http://myserver:8080/
ProxyPassReverse /tomcat/ http://myserver:8080/
我已经为 SSL 配置了 Apache HTTP 服务器,因此当用户点击https://我的服务器/tomcat/它们应该传递给https://我的服务器:8443/。
使用当前的 ProxyPass 和 ProxyPassReverse 配置,它们将被重定向到非 SSL URL。如何设置代理传递,以便它根据传入请求重定向到不同的协议和端口?
也就是说,如果有人通过 HTTPS 进入,我该如何将他们重定向到我的 tomcat @https://我的服务器:8443?
更新:
@mike-insch
我试过:
NameVirtualHost *:443
<VirtualHost *:80>
ProxyPass /tomcat/ http://myserver:8080/
ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>
<VirtualHost *:443>
ProxyPass /tomcat/ https://myserver:8443/
ProxyPassReverse /tomcat/ https://myserver:8443/
</VirtualHost>
现在当我访问时:https://我的服务器/tomcat/我收到“页面未找到”的错误信息。在错误日志中,我看到“文件不存在:/var/apache2/htdocs/tomcat”
这是正确的,但我希望请求被路由到运行于https://我的服务器:8443/。
我想我需要更多地了解虚拟主机,除非出现明显的错误。
答案1
您需要通过两个独立的<VirtualHost *:X>
指令来执行此操作。您的HTTP
指令位于 内,<VirtualHost *:80>
而您的HTTPS
指令位于 内<VirtualHost *:443>
。如果您的服务器配置了多个基于地址或基于名称的虚拟主机,请根据需要进行调整。有关完整详细信息,请参阅 Apache 2 文档。
答案2
为了完整性:如果可以选择,最好在 Apache 上终止 SSL,而不是让 Tomcat 也处理它。如果 Tomcat 只能从 Apache 访问,那么这样做更简单,而且安全性也一样高。
在此设置中,Apache 将代理 HTTP 和 HTTPS 到http://myserver:8080/
:
NameVirtualHost *:443
<VirtualHost *:80>
ProxyPass /tomcat/ http://myserver:8080/
ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>
<VirtualHost *:443>
ProxyPass /tomcat/ http://myserver:8080/
ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>