这是一个简单的场景。我们声明了以下位置来测试服务器是否可以访问:
location = /ping {
return 204;
}
我们决定使用与其他端点相同的 auth_request 逻辑来保护它,这些逻辑有效且包含在同一块中server {}
。我们只是添加了auth_request
指令,但两次尝试都失败了:
即使 auth_request 返回 401/403,这个也总是返回 204:
location = /ping {
auth_request /validate;
return 204;
}
这有点令人惊讶,因为auth_request 的记录行为,我以为它会停止处理进一步的指令:
如果子请求返回2xx响应码,则允许访问。如果返回401或403,则拒绝访问并显示相应的错误码。
第二次尝试直接返回 auth_request 的状态也没有成功:
location = /ping {
auth_request /validate;
auth_request_set $auth_status $upstream_status;
return $auth_status;
}
因为它失败了
[emerg] /etc/nginx/conf.d/default.conf:157 中的返回代码“$auth_status”无效
这个问题似乎与我使用return
? 有关,我见过nginx auth_request如何返回后端状态代码但它似乎没有解决我的情况。