我需要HAproxyconfiguration的一些帮助来绕过HTTP基本身份validation,并让用户使用特定的后端,以防从另一个后端应用程序提供有效的会话cookie。
在我的前端定义中,我通常使用以下configuration来工作:
# Monitor application response headers for keywords and update user ACL acl has_disallowAPPUser res.hdr(X-APP-DisallowUser) -m found acl has_allowAPPUser res.hdr(X-APP-AllowUser) -m found http-response del-acl(/var/lib/haproxy/app_user_sessions.acl) %[res.hdr(X-APP-DisallowUser)] if has_disallowAPPUser http-response add-acl(/var/lib/haproxy/app_user_sessions.acl) %[res.hdr(X-APP-AllowUser)] if has_allowAPPUser # Monitor application response headers for keywords and update admin ACL acl has_disallowAPPAdmin res.hdr(X-APP-DisallowAdmin) -m found acl has_allowAPPAdmin res.hdr(X-APP-AllowAdmin) -m found http-response del-acl(/var/lib/haproxy/app_admin_sessions.acl) %[res.hdr(X-APP-DisallowAdmin)] if has_disallowAPPAdmin http-response add-acl(/var/lib/haproxy/app_admin_sessions.acl) %[res.hdr(X-APP-AllowAdmin)] if has_allowAPPAdmin # Check session cookie acl is_appuser_session req.cook(PHPSESSID) -f /var/lib/haproxy/app_user_sessions.acl acl is_appadmin_session req.cook(PHPSESSID) -f /var/lib/haproxy/app_admin_sessions.acl # Monitor last session activity http-request del-map(/var/lib/haproxy/app_user_sessions.map) %[req.cook(PHPSESSID)] if is_appuser_session http-request set-map(/var/lib/haproxy/app_user_sessions.map) %[req.cook(PHPSESSID)] %[date()] if is_appuser_session http-request del-map(/var/lib/haproxy/app_admin_sessions.map) %[req.cook(PHPSESSID)] if is_appadmin_session http-request set-map(/var/lib/haproxy/app_admin_sessions.map) %[req.cook(PHPSESSID)] %[date()] if is_appadmin_session # Do not show X-APP headers to the frontend user rspidel ^X-APP-DisallowUser:.* if has_disallowAPPUser rspidel ^X-APP-AllowUser:.* if has_allowAPPUser rspidel ^X-APP-DisallowAdmin:.* if has_disallowAPPAdmin rspidel ^X-APP-AllowAdmin:.* if has_allowAPPAdmin # route to backend use_backend bk_appuser-via-session if is_appadmin_uri is_appuser_session use_backend bk_appadmin-via-session if is_appadmin_uri is_appadmin_session use_backend bk_appuser-via-httpauth if is_appadmin_uri use_backend bk_appadmin-via-httpauth if is_appadmin_uri
这允许直接访问后端应用程序,以防PHP应用程序成功创build用户会话并发送适当的X-APP标头。
这里是我需要帮助的地方:
要清除旧的ACL,cron会每5分钟重新加载一次HAproxy。 这将删除活动会话,用户将回退到基本身份validation,直到他从主PHP应用程序重新加载页面。
因此,我的想法是跟踪每个会话的任何用户活动以及时间戳记,以便我可以在cron HAproxy重新加载脚本中将任何小于15分钟的会话写入/var/lib/haproxy/app_user_sessions.acl。 然后HAproxy将能够在每次重新加载之后从那里读取现有会话,所以现有会话不会中断。
不幸的是,我不能得到地图定义运行,因为我没有通过HAproxypipe理套接字获得他们的内容(使用HAtop进行手动检查)。
会不会有任何真正的HAproxy极客来帮助我完成这最后一部分? 我会非常感谢。
问候,朱利安