mod_proxy:将路径从原始请求传递到代理应用程序

mod_proxy:将路径从原始请求传递到代理应用程序

我正在努力反向代理在 Apache 后面的封闭端口上的 Tomcat 服务器中运行的应用程序。为了方便起见,假设我想反向代理请求'http://我的域名/apps/my_app/' 到 Tomcat 应用程序 'http://localhost:8082/my_app/' 在远程服务器上。使用 Apache vhost.conf 文件中的以下代理设置,一切正常:

ProxyRequests       off
ProxyPass /apps/    http://localhost:8082/
ProxyPassReverse /apps/  http://localhost:8082/

除了应用程序的一部分,它会生成一个要在客户端执行的 Java webstart 文件,并且需要连接到 Tomcat 应用程序'http://localhost:8082/my_app/webstart'(在远程服务器上)。

问题的关键在于这种连接显然不起作用,因为 a) 对 localhost 的请求将相对于客户端计算机进行解释,并且 b) 即使它指向远程服务器,端口 8082 也已关闭。

因此,我弄清楚了 ProxyPreserveHost 如何提供帮助,以便将原始请求的主机名传播到 Java webstart 请求:

ProxyRequests       off
ProxyPreserveHost   on
ProxyPass /apps/    http://localhost:8082/
ProxyPassReverse /apps/  http://mydomain/

这几乎可以正常工作(即使代理 Tomcat 应用程序中的内部重定向也可以通过 ProxyPassReverse 设置正常工作)。还有一个问题:Java webstart 文件使用的 URL 缺少“/apps/”部分,并将尝试连接到“http://mydomain/my_app/webstart', 代替 'http://mydomain/apps/my_app/webstart',这显然会失败,因为只有以 /apps/ 开头的请求才会被反向代理。显然,代理应用程序无法“看到”完整的原始 URL('http://我的域名/apps/my_app/'),但只有被代理处理过滤掉的部分('http://我的域名/my_app/')。

我是否忘记了任何代理设置,可以让 Apache 将路径从原始 URL 传递到代理应用程序?

亲切的问候,

罗恩

答案1

代理后端根本看不到原始请求;这就是代理的全部意义所在。

您可能需要以下内容:

ProxyPass /apps/ http://localhost:8082/apps/
ProxyPassReverse /apps/ http://localhost:8082/apps/

并使 tomcat 应用程序在该上下文中可用。

相关内容