我有一个auth_request
像这样的位置块
location /somepath {
auth_request /authorize;
auth_request_set $header_variable $upstream_http_custom_header;
proxy_path http://backendaddress;
}
我想要做的是,如果$header_variable
不匹配特定的正则表达式,我想要返回 403 代码。
if
无法运行,因为它运行得太早了。还有其他方法可以让我做到这一点吗?
答案1
Nginx 模块授权请求等待来自后端的 200 或 401/403 HTTP 代码:
ngx_http_auth_request_module 模块(1.5.4+)实现根据子请求的结果进行客户端授权,如果子请求返回 2xx 响应码,则允许访问,如果返回 401 或 403,则拒绝访问并返回相应的错误码,子请求返回的其他响应码均视为错误。
您的请求有一个需要检查权限的标头:
我想要做的是,如果 $header_variable 与特定的正则表达式不匹配,我想要返回 403 代码。
在身份验证请求/响应周期中,您的后端需要检查标头并返回 403 代码,以防止下一次请求在未进行身份验证的情况下发生。模块授权请求作为一个简单的测试断言,它返回其中一个代码。它确实意味着负责此 URL 的后端进程会回复http://后端地址/授权需要对所需标题进行额外检查。