2012-10-15 27 views
10

我有接受参数的形式/ {参数}阿帕奇mod_proxy的URL编码

也有是Apache2的该请求转发到websevice REST服务

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

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

参数可以包含编码的字符,如%2F(/)

的问题是,再阿帕奇编码这些字符,和WebService接收%252F代替%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 

如果我直接请求web服务,Tomcat/Jetty会处理它查找和服务接收正确的参数。

回答

9

通过指定

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

有一点题外话,因为这不能解决用斜杠的问题,但如果其他人在同一问题上运行,因为我有我会在这里添加也无妨解决。

我有一个类似的问题,通过Apache代理传递时,url参数中的瑞典特殊字符(åäö)没有正确处理。事实证明,Apache很好,但在接收的Tomcat实例中,AJP连接器缺少URIEncoding配置。

从我的tomcat的server.xml:

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