Apache 2.2->2.4 обновляет прерванный сквозной [PT] после mod_rewrite

Наш сервер был обновлен с Apache 2.2.32->2.4.20, и с этим изменением мои mod_rewrites больше не проходят через конечные точки Tomcat.

Вот конфигурация Tomcat Load Balancer:

<Location /balancer-manager>
    SetHandler balancer-manager
</Location>

<Proxy balancer://tomcatHttpCluster>
    BalancerMember http://localhost:9946 loadfactor=100
</Proxy>

И переписать правило интереса:

RewriteCond %{REQUEST_METHOD} POST [NC]
RewriteRule ^/catalog/preferences$ /ac/rest/preferences [B,PT,L,QSA]

А также конфигурация Location, которая применяется ко всем / ac запросам:

<Location /ac/>
    ProxyPass balancer://tomcatHttpCluster/ac/ stickysession=JSESSIONID
    ...
</Location>

Если я перейду прямо к конечной точке / ac Tomcat, это сработает. Журнал Apache:

mod_rewrite.c(477): [client 10.20.3.63:50485] 10.20.3.63 - - [tesla/sid#caa5f8]  [rid#f75c230/initial] pass through /ac/rest/preferences
mod_proxy_balancer.c(73): [client 10.20.3.63:50485] canonicalising URL //tomcatHttpCluster/ac/rest/preferences
mod_lbmethod_byrequests.c(95): AH01207: proxy: Entering byrequests for BALANCER (balancer://tomcathttpcluster)
mod_lbmethod_byrequests.c(142): AH01208: proxy: byrequests selected worker "http://localhost:9946" : busy 0 : lbstatus 0
mod_proxy_balancer.c(614): [client 10.20.3.63:50485] AH01172: balancer://tomcathttpcluster: worker (http://localhost:9946) rewritten to http://localhost:9946/ac/rest/preferences
proxy_util.c(1783): AH00924: worker http://localhost:9946 shared already initialized
proxy_util.c(1825): AH00926: worker http://localhost:9946 local already initialized
mod_proxy.c(1159): [client 10.20.3.63:50485] AH01143: Running scheme balancer handler (attempt 0)
mod_proxy_ajp.c(738): [client 10.20.3.63:50485] AH00894: declining URL http://localhost:9946/ac/rest/preferences
mod_proxy_http.c(1903): [client 10.20.3.63:50485] HTTP: serving URL http://localhost:9946/ac/rest/preferences
proxy_util.c(2158): AH00942: HTTP: has acquired connection for (localhost)
proxy_util.c(2212): [client 10.20.3.63:50485] AH00944: connecting http://localhost:9946/ac/rest/preferences to localhost:9946
proxy_util.c(2421): [client 10.20.3.63:50485] AH00947: connected /ac/rest/preferences to localhost:9946
mod_proxy_http.c(1374): [client 10.20.3.63:50485] Status from backend: 200
mod_proxy_http.c(1048): [client 10.20.3.63:50485] Headers received from backend:
mod_proxy_http.c(1051): [client 10.20.3.63:50485] Server: Apache-Coyote/1.1
mod_proxy_http.c(1051): [client 10.20.3.63:50485] Content-Type: application/json
mod_proxy_http.c(1051): [client 10.20.3.63:50485] Content-Length: 218
mod_proxy_http.c(1051): [client 10.20.3.63:50485] Date: Fri, 28 Oct 2016 00:32:26 GMT
mod_proxy_http.c(1646): [client 10.20.3.63:50485] start body send
proxy_util.c(2173): AH00943: http: has released connection for (localhost)
mod_proxy_http.c(1791): [client 10.20.3.63:50485] end body send
mod_proxy_balancer.c(669): [client 10.20.3.63:50485] AH01176: proxy_balancer_post_request for (balancer://tomcathttpcluster)

НО. Если я пытаюсь использовать URL перезаписи - перезапись происходит... тогда ничего:

mod_rewrite.c(477): [client 10.20.3.63:50457] 10.20.3.63 - - tesla/sid#c6a5f8rid#dc2a110/initial RewriteCond: input='GET' pattern='GET' [NC] => matched
mod_rewrite.c(477): [client 10.20.3.63:50457] 10.20.3.63 - - tesla/sid#c6a5f8rid#dc2a110/initial rewrite '/catalog/preferences' -> '/ac/rest/preferences'
mod_rewrite.c(477): [client 10.20.3.63:50457] 10.20.3.63 - - tesla/sid#c6a5f8rid#dc2a110/initial forcing '/ac/rest/preferences' to get passed through to next API URI-to-filename handler

Я не эксперт по Apache (до сих пор!), Но я попытался изменить флаги mod_rewrite на [R], и это сработало нормально. Я не могу сделать это изменение на сервере, потому что этот код не находится под моим контролем. Я предполагал, что флаг перезаписи [PT] отправит переписанный URL обратно через mod_proxy_balancer и вуаля, но этого, похоже, не происходит.

Есть ли что-то очевидное, что изменилось с 2.2 на 2.4, что вызвало бы это? Помогите! Я застрял на этом в течение нескольких дней.

1 ответ

попробуйте использовать P вместо PT в rewriterule. Меня устраивает.

RewriteRule ^/catalog/preferences$ /ac/rest/preferences [B,P,L,QSA]

Другие вопросы по тегам