2012-10-15 36 views
10

Tôi có một dịch vụ REST chấp nhận các thông số trong một hình thức/{parameter}Apache url mod_proxy mã hóa

Cũng có Apache2 chuyển tiếp yêu cầu đến websevice

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

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

Các thông số có thể chứa các ký tự mã hóa, như % 2f (/)

vấn đề là Apache mã hóa những nhân vật này một lần nữa, và Webservice nhận% 252F thay vì% 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 

Nếu tôi yêu cầu webservice trực tiếp, Tomcat/Jetty xử lý tìm và dịch vụ nhận được thông số chính xác.

Trả lời

9

Giải Quyết bằng cách xác định

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

Một chút off topic vì đây không giải quyết được vấn đề với dấu gạch chéo nhưng tôi sẽ thêm nó ở đây anyway nếu bất cứ ai khác chạy vào cùng một vấn đề như tôi đã có.

Tôi đã gặp phải sự cố tương tự như các ký tự đặc biệt của Thụy Điển (åäö) trong thông số url không được xử lý đúng khi được truyền qua proxy apache. Nó bật ra rằng apache đã làm tốt nhưng trong trường hợp tomcat nhận AJP-connector đã thiếu cấu hình URIEncoding.

Từ máy chủ tomcat của tôi.xml:

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