我正在尝试通过 HAProxy 重写单个路径。如果没有规则,目录页面(来自 IIS 节点)将返回 404。添加规则后,页面会在一分钟左右后返回 504 网关超时。
backend Example_Backend
balance uri
reqirep ^([^\ ]*)\ (.*)/directory/?[\ ] \1\ \2/target.asp\
server Server1 x.x.x.xx4:80 weight 25 check fall 10 rise 2 maxconn 40
server Server2 x.x.x.xx5:80 weight 25 check fall 10 rise 2 maxconn 40
server Server3 x.x.x.xx6:80 weight 25 check fall 10 rise 2 maxconn 40
server Server4 x.x.x.xx7:80 weight 25 check fall 10 rise 2 maxconn 40
我使用 reqirep 的方式有什么问题吗?我已经测试过使用,sed
以确保它与以下内容正确匹配:
GET http://www.example.com/directory HTTP/1.1
GET http://www.example.com/directory/ HTTP/1.1
有什么想法吗?
编辑:来自测试 /directory 和 /directory/ 的日志
haproxy[25957]: x.x.x.100:50941 [31/May/2011:14:53:24.836] Example_Frontend Example_Backend/Server4 77/0/3/-1/50083 504 194 - - sH-- 1/1/1/1/0 0/0 "GET /directory/ HTTP/1.1"
haproxy[25957]: x.x.x.100:50942 [31/May/2011:14:53:26.124] Example_Frontend Example_Backend/Server4 78/0/5/-1/50087 504 194 - - sH-- 0/0/0/0/0 0/0 "GET /directory HTTP/1.1"
答案1
HAProxy 邮件列表中的 Cyril 指出,正则表达式会从请求中删除 HTTP/1.1 和 HTTP/1.0。他建议如下(有效):
reqirep ^([^\ ]*)\ (.*)/directory/?\ (.*) \1\ \2/target.asp\ \3