如何基于http vs https将mod_proxy配置为ProxyPass?

cod*_*aig 9 mod-proxy apache-2.2

我在启用 SSL 的情况下运行 Apache Tomcat。我有 Apache HTTP Server 作为反向代理,所以如果用户点击http://myserver/tomcat/他们将被传递到http://myserver:8080

ProxyPass /tomcat/ http://myserver:8080/
ProxyPassReverse /tomcat/ http://myserver:8080/
Run Code Online (Sandbox Code Playgroud)

我也为 SSL 配置了 Apache HTTP 服务器,所以当用户点击https://myserver/tomcat/ 时,他们应该被传递到https://myserver:8443/

使用当前的 ProxyPass 和 ProxyPassReverse 配置,它们将被重定向到非 ssl URL。如何设置代理传递,以便它根据传入请求重定向到不同的协议和端口?

也就是说,如果有人通过 HTTPS 进入,我如何将他们重定向到我的 tomcat @ https://myserver: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>
Run Code Online (Sandbox Code Playgroud)

现在,当我访问:https://myserver/tomcat/我得到“找不到页面”。在错误日志中,我看到“文件不存在:/var/apache2/htdocs/tomcat”

这是正确的,但我希望请求被路由到在https://myserver:8443/ 上运行的 tomcat 。

猜猜我需要更多地查看虚拟主机,除非某些东西看起来明显错误。

小智 6

为了完整性:如果这是一个选项,最好在 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>
Run Code Online (Sandbox Code Playgroud)


Mik*_*sch 5

您需要通过两个独立的<VirtualHost *:X>指令来做到这一点。当您的HTTP指令进入 inside<VirtualHost *:80>时,您的HTTPS指令进入内部<VirtualHost *:443>。如果您的服务器配置了多个基于地址或基于名称的虚拟主机,则根据需要进行调整。有关完整详细信息,请参阅 Apache 2 文档。

  • 不要忘记在指令上添加 SSLProxyEngine (3认同)