【问题标题】:Do I need to use ProxyPassReverse if I'm using mod rewrite?如果我使用 mod rewrite,是否需要使用 ProxyPassReverse?
【发布时间】:2011-12-29 14:04:59
【问题描述】:

我正在使用 mod rewrite 来屏蔽我的应用程序的上下文根。例如,

RewriteRule ^/directory/(.*) balancer://appcluster/directory/$1 [P]

应用集群如下所示:

<Proxy balancer://appcluster>
BalancerMember http://localhost:8080/App route=app_01 keepalive=On loadfactor=1 ttl=300 min=3 smax=5 max=15

ProxySet lbmethod=byrequests stickysession=JSESSIONID|jsessionid timeout=120 nofailover=On
</Proxy>

我需要使用ProxyPassReverse 吗?我曾经使用它,因为我的旧网络服务器代码如下所示:

ProxyPass /App balancer://appcluster lbmethod=byrequests stickysession=JSESSIONID|jsessionid timeout=120 nofailover=On

ProxyPassReverse /App http://localhost:9013/App

【问题讨论】:

    标签: apache mod-rewrite mod-proxy


    【解决方案1】:

    ProxyPassReverse 用于在 Apache 将其发送到浏览器之前更改应用程序 (appcluster) 发送到 Apache 的标头。例如,如果应用程序位于http://localhost:9013/,并尝试将浏览器重定向到/new_location/,那么它将以http://localhost:9013/new_location/ 的重定向和位置标头进行响应,Apache 将接收并发送它关闭到浏览器。问题是,浏览器(假设它在其他地方)然后尝试向http://localhost:9013/new_location/ 发送请求,并得到一个错误。

    ProxyPassReverse 所做的是截取这些标头,并重写它们,以使它们与正在执行代理的 Apache 服务器的外观相匹配。因此,如果我的 apache 服务器托管 http://myhost.com/ 并且我有一个 ProxyPass/ 指向 http://localhost:9013/App,如果位于 localhost:9013 的应用程序返回重定向到 http://localhost:9013/App/new_location/,我将需要使用 @ 987654335@ 以便 Apache 在将请求发送回浏览器之前将其重写为 http://myhost.com/new_location/

    如果您不发出重定向,这不会成为问题,但如果返回 301/302 重定向,将它放在那里并没有什么坏处。至于 mod_rewrite,RewriteRule 适用于发往 App 的请求,而不是来自 App 的响应。所以它们是相互排斥的事件。

    【讨论】:

    • 那么我的代理传递反向是以下内容:ProxyPassReverse /App/directory localhost:9013/App/directory ?
    • 我认为你所拥有的是正确的。虽然我见过人们以这样的方式使用它,其中右侧的 url 是外部域而不是 localhost。我的 Jboss 部署使用 ProxyPassReverse 就像你拥有它一样,它们重定向就好了。
    • 关于 ProxyPassReverse 及其需求的非常好的解释。 @jon lin .. 谢谢
    • 我想在浏览器中保留 url,下面的所有 example.xyz/us/en/search 都应该代理到 example.us/us/en/search。我有以下规则。 ProxyPassMatch "^/(.{2,3})/(.{2,3})/(.*)/?$" "example.$1/$1/$2/$3" ProxyPassReverse "^/(.*)$" "example.xyz/$1"除了 404 之外,url 正在更改为 example.us/us/en/search。
    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2017-10-03
    • 2021-08-12
    • 2018-12-27
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多