HAProxy reqirep 设置导致 504 网关超时

HAProxy reqirep 设置导致 504 网关超时

我正在尝试通过 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

相关内容