【问题标题】:How to use a different path name in ProxyPass than the Tomcat context name如何在 ProxyPass 中使用与 Tomcat 上下文名称不同的路径名
【发布时间】:2009-09-08 12:23:27
【问题描述】:

我正在使用 Tomcat 5.5.9 和 Apache 2.x

我们正在尝试在 ProxyPass 中使用不同的路径名 比 Tomcat 上下文名称。

ProxyPass /path http://localhost:8080/contextname

但是,这不起作用。当这两个相同时 然后一切正常。

我在网上看到的大多数示例的路径也等于 Tomcat 上下文名称。

我在 Tomcat 上下文中使用“context.xml”并执行 没有“server.xml”条目。另外,我使用的是普通的 httd.conf 并且不使用任何 VirtualHost 条目。

【问题讨论】:

  • 调试提示:使用mod_dumpio 转储通过连接来回传输的数据。

标签: apache tomcat mod-proxy


【解决方案1】:

我相信你两者都需要

ProxyPass /path/ http://localhost:8080/contextname/
ProxyPassReverse /path/ http://localhost:8080/contextname/

有什么理由不使用mod_jk

【讨论】:

  • 你好大卫,我确实有 ProxyPass 和 ProxyPassReverse 命令,尽管我没有在我的消息中提到它。至于为什么不使用 mod_jk 我只需要从用户访问 URL 中隐藏 tomcat 端口即可,所以 mod-proxy 似乎是最简单的
  • 修复了解决方案 - 您可能必须在 URI 末尾添加斜杠。这是从我的 conf 文件中复制的。
【解决方案2】:
RewriteEngine on
RewriteRule ^/path$ /path/ [R]
RewriteRule ^/path/(.*) /contextname/$1 [P]

ProxyPass /contextname/ protocol://192.168.15.48:8080/contextname/
ProxyPassReverse /contextname/ protocol://192.168.15.48:8080/contextname/

在这种情况下“协议”=“http”...

【讨论】:

  • 使用mod_rewrite 的替代方法是使用ProxyPassMatch。在任何情况下都无法让它正常工作,非常脆弱,然后我突然想到我可以调整代理的应用程序,以便左右手的 URL 路径对应......
【解决方案3】:

为两个值添加斜线:

ProxyPass /path/ http://localhost:8080/contextname/

【讨论】:

  • 您能解释一下这与 no-trainlish-slash 版本有何不同吗?
【解决方案4】:

您的问题可能是应用程序生成的自引用 URL。除了

,你无能为力
  1. 更改应用或
  2. 重写它吐出的所有内容。

选项 2 可能非常脆弱。 请参阅the tomcat docs 了解更多信息。

【讨论】:

    猜你喜欢
    • 2011-02-06
    • 2012-02-28
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 2013-02-16
    相关资源
    最近更新 更多