nginx auth_request如何返回后端状态代码

nginx auth_request如何返回后端状态代码

当使用的后端代理auth_request返回不同于 401 或 403 的错误代码时,nginx 返回 500 错误代码。

ngx_http_auth_request_module 模块(1.5.4+)实现根据子请求的结果进行客户端授权,如果子请求返回 2xx 响应码,则允许访问,如果返回 401 或 403,则拒绝访问并返回相应的错误码,子请求返回的其他响应码均视为错误。

有没有办法让 nginx 从后端返回状态代码而不是 500?

答案1

我找到了一个可行的解决方案。它利用了这样一个事实:auth_request如果后端错误不同于 401 或 403 ,则始终返回 500 错误代码:

error_page 500 @process_backend_error;

location / {
    auth_request /auth
    auth_request_set $backend_status $upstream_status
}

location /auth {
    proxy_pass ...
}

location @process_backend_error {
    # here you have access to $backend_status which contains the returned status code from your autorization backend
}

请注意返回的状态代码$backend_status是一个字符串。

相关内容