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


9

我有启用了SSL的Apache Tomcat。我让Apache HTTP Server充当反向代理,因此如果用户点击http:// myserver / tomcat /,我将被传递给http:// myserver:8080

ProxyPass /tomcat/ http://myserver:8080/
ProxyPassReverse /tomcat/ http://myserver:8080/

我也为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>

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

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

猜猜我需要更多地看一下虚拟主机,除非看起来有些明显的错误。


我认为您不需要NameVirtualHost此处的指令。另外,您需要添加适当的指令以在您的<VirtualHost *:443>部分中启用S​​SL 。
Mike Insch

Answers:


5

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


所以我添加了以下内容:NameVirtualHost *:443
codecraig 2011年

3
不要忘记在指令上添加SSLProxyEngine
Ryan

6

出于完整性考虑:如果可以选择,最好在Apache处终止SSL,而不是让Tomcat处理。如果仅从Apache可以访问Tomcat,这将变得更简单且安全性也要降低。

在此设置中,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>

1
如果这样做,则无需在两个VirtualHosts中都重复代理指令。您可以将它们拉到服务器上下文中。
阿米特·奈杜
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.