我在 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
。