当使用的后端代理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
是一个字符串。