反向代理 - 理解代理传递 - apache mod_proxy

反向代理 - 理解代理传递 - apache mod_proxy

我在 Linux 服务器上运行 tomcat,我想为此使用反向代理。在阅读了 apacha 中 mod_proxy 的手册后,我不太理解 proxypass 中的 /path。

我做了一个小例子。我的 tomcat 的目录是 /tomcat/webapp。那么下面的配置正确吗?:

<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ProxyRequests Off
ProxyPass /tomcat/webapp         http://127.0.0.1:8080
ProxyPassReverse /tomcat/webapp  http://127.0.0.1:8080
</VirtualHost> 

我将非常感激,我是有经验的人,可以帮助我。

答案1

理论上无论ProxyPass您选择哪个指令,它都会起作用,即使您选择以代理http://example.com:8080/webapp/形式http://example.com/foo/bar/baz/

但是,如果你的应用程序在超链接中使用绝对路径,那么最好在两个页面上都使用相同的 URI 路径。阿帕奇雄猫或者你会遇到类似的问题这个问题。 所以:

  • 如果您的应用程序编写得很好,请选择您最喜欢的 URL 并调整 Tomcat 上的 web 应用程序部署以适应它。
  • 如果你的应用程序写得不好(例如有一些硬编码的路径,如这个问题调整阿帕奇路径以适合硬编码的部署路径。

无论哪种方式你都应该使用:

ProxyPass "/path/to/webapp/" "http://127.0.0.1:8080/path/to/webapp/"

附言: 显然你想在两个端口上运行 Tomcat,最好告诉 Web 应用程序它正在被代理,并且该端口8443是通过 SSL 访问的:

<Connector port="8080"
           proxyName="example.com"
           proxyPort="80"
           redirectPort="443" />
<Connector port="8443"
           proxyName="example.com"
           proxyPort="443"
           scheme="https" secure="true" />

因此 Web 应用程序不会生成从一个端口8443到另一个端口的无用重定向443

相关内容