Haproxy 检查是否设置了 Cookie

Haproxy 检查是否设置了 Cookie

我有一个目前正在开发的 Haproxy 配置,我正在使用以下代码来查找请求用户是否会接受 cookie,因为最终目的地的脚本出于安全考虑需要 cookie。

frontend connection_Handler    
# This proxy requires the acceptance of cookies to work
            acl cookie_set hdr_sub(cookie) YuL7oo2UG3O3=zdQ66fM0lpRd
            redirect prefix / set-cookie YuL7oo2UG3O3=zdQ66fM0lpRd unless cookie_set
            use_backend Cookie_Block unless cookie_set

这是我用来设置 cookie 的配置,如果用户正确接受 cookie,它会很好地工作。但是,如果最终用户不接受 cookie,它会产生无限的重定向循环。Cookie_Block 后端如下 -

backend Cookie_Block
        # For this block we will hold the connection for 5 seconds then reject
        # The error will display the reason as to why the connection has been denied
        mode http
        timeout tarpit 5s
        errorfile 403 /errors/NoCookie.txt
        reqitarpit .

我期望的效果是,如果用户不接受 cookie,他们就会被阻止并返回错误。我确信上述代码会尝试设置 cookie,然后在 cookie 设置失败时阻止他们。但事实似乎并非如此。我做错了什么吗?或者有没有其他方法可以做到这一点,而无需将用户带到设置 cookie 的页面?

非常感谢,克里斯。

答案1

当您在前端部分重定向时,您的客户端将再次发送到站点,并且前端部分会重新检查,因此它永远不会到达后端。

我会在应用程序端进行此项检查,避免在 haproxy 中进行特定于应用程序的检查,以实现可移植性。

答案2

您可以使用此 ACL 来检查是否存在 cookie:

acl has_cookie res.hdr(X-MyCookieName) -m found

相关内容