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

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

我运行 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>

相关内容