我有一个目前正在开发的 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