2012-10-15 7 views
10

Mam usługi odpoczynku, który przyjmuje parametrów w postaci/{parametr}Apache mod_proxy URL kodowania

Ponadto istnieje Apache2 że przesyła żądania do websevice

<VirtualHost *:9091> 
    AllowEncodedSlashes NoDecode 
    LogLevel debug 
    ProxyPass /webservice balancer://api/webservice 

    <Proxy balancer://api> 
    BalancerMember http://localhost:8030 
    </Proxy> 
</VirtualHost> 

parametry mogą zawierać zakodowanych znaków, takich jak % 2f (/)

problemem jest to, że Apache koduje te znaki ponownie i Webservice otrzymuje% 252F zamiast% 2F

[Mon Oct 15 13:59:24 2012] [debug] mod_proxy_balancer.c(46): proxy: BALANCER: canonicalising URL //api/webservice/Interface GigabitEthernet1%2F0%2F2 
[Mon Oct 15 13:59:24 2012] [debug] mod_proxy_balancer.c(581): proxy: BALANCER (balancer://api) worker (http://localhost:8030) rewritten to http://localhost:8030/Interface%20GigabitEthernet1%252F0%252F2%20Utilization 

Jeśli bezpośrednio zażądam usługi internetowej, Tomcat/Jetty obsługuje to wyszukiwanie, a usługa otrzymuje poprawny parametr.

Odpowiedz

9

rozwiązana przez określenie

ProxyPass /webservice balancer://api/webservice nocanon 
1

trochę off topic, ponieważ to nie rozwiązuje problemu z ukośniki, ale będę je dodać tutaj i tak jeśli ktoś prowadzi do tego samego problemu jak ja.

Miałem podobny problem, że szwedzkie znaki specjalne (åäö) w parametrach adresu URL nie były obsługiwane poprawnie po przejściu przez proxy Apache. Okazało się, że apache dobrze działa, ale w odbierającej instancji tomcat złącze AJP nie miało konfiguracji URIEncoding.

Z mojego tomcat server.xml:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8080" URIEncoding="UTF-8"/>