Khi tôi duyệt đến URL này: http://localhost:8080/foo/%5B-%5D
server ( nc -l 8080
) sẽ nhận được nó như hiện tại:
GET /foo/%5B-%5D HTTP/1.1
Tuy nhiên khi tôi ủy quyền ứng dụng này qua nginx (1.1.19):
location /foo {
proxy_pass http://localhost:8080/foo;
}
Yêu cầu tương tự được chuyển qua cổng nginx được chuyển tiếp với đường dẫn được giải mã:
GET /foo/[-] HTTP/1.1
Dấu ngoặc vuông được giải mã trong đường dẫn GET đang gây ra lỗi trong máy chủ đích ( Trạng thái HTTP 400 - Ký tự không hợp lệ trong đường dẫn ... ) khi chúng đến không thoát.
Có cách nào để vô hiệu hóa giải mã URL hoặc mã hóa lại để máy chủ mục tiêu có cùng đường dẫn chính xác khi được định tuyến qua nginx không? Một số quy tắc viết lại URL thông minh?