HAProxy 或 Apache是否存在与 nginx 等效的模块ngx_http_auth_request_module
?此模块允许通过 HTTP 支持自定义身份验证。我引用一下:
该
ngx_http_auth_request_module
模块(1.5.4+)根据子请求的结果实现客户端授权。如果子请求返回 2xx 响应代码,则允许访问。如果返回 401 或 403,则拒绝访问并返回相应的错误代码。子请求返回的任何其他响应代码均视为错误。
答案1
至少对于 apache(1.x 和 2.x),你可以尝试一下https://github.com/kitech/mod_authnz_external。它运行外部脚本来处理用户凭证。该脚本反过来可能会通过 HTTP[s] 查询外部服务,在这种情况下,它的工作原理与以下类似(不考虑性能问题):ngx_http_auth_request_module
答案2
你可以试试这个基于 Lua 的解决方案。它的灵感来自于ngx_http_auth_request_module
。
在该部分中加载lua脚本global
。
global
lua-load /usr/share/haproxy/auth-request.lua
定义身份验证后端
backend auth_request
mode http
server auth_request 127.0.0.1:8080 check
在前端调用 Lua 检查,如果失败则拒绝请求。
frontend http
http-request lua.auth-request auth_request /is-allowed
http-request deny if ! { var(txn.auth_response_successful) -m bool }
作者还做了一个很好的博客文章,他详细解释了内部工作原理。