我需要转换以下 url(不是在客户端/浏览器上,而是在 和 之间frontend
)backend
:
从:
http://myhost.com/opt-in/<some_long_guid>.html
到:
http://myhost.com/api/distributions/<some_long_guid>/opt-in
然后在此时选择一个合适的后端。我的haproxy.conf
文件如下所示:
frontend www-ssl
#re-write the url from /opt-in/<dist_id>.html to /api/distributions/<dist_id>/opt-in
acl url_opt-in path_beg /opt-in
reqrep ^([^\ :]*)\ /opt-in/(.*)\.html \1\ /api/distributions/\2/opt-in if url_opt-in
acl url_api path_beg /api/
#choose the api backend if the path starts with /api
use_backend api-backend if prod url_api
backend api-backend
server app-1 10.132.93.224:8080 check
#get rid of the /api part when forwarding to the backend
reqrep ^([^\ :]*)\ /api/(.*) \1\ /\2
我已确认http://myhost.com/api/distributions/<some_long_guid>/opt-in
直接击打是有效的。
然而http://myhost.com/opt-in/<some_long_guid>.html
击球505 - The server does not support the HTTP protocol version used in the request.
谁能知道我为什么会遇到这个问题?
编辑:我确认我的后端正在接收请求并且正在报告这个 505。我正在尝试看看是否可以转储原始请求以查看发生了什么。
答案1
我的reqrep
语句截断了HTTP/1.1
路径后面的内容。因此发送到我的后端的内容是:
GET /distributions/038c0abb-8873-457d-889c-0b7c32b5f5c0/opt-in
代替:
/distributions/038c0abb-8873-457d-889c-0b7c32b5f5c0/opt-in HTTP/1.1
我reqrep
把语句改成:
reqrep ^([^\ :]*)\ /opt-in/(.*)\.html(.*) \1\ /distributions/\2/opt-in\3
注意:\3
最后,这将添加HTTP/1.1