一个琐碎的场景。我们声明了以下位置来测试服务器是否可访问:
location = /ping {
return 204;
}
我们已经决定要使用与其他端点相同的 auth_request 逻辑来保护它,这些端点可以工作并且包含在同一个server {}
块中。我们只是添加了auth_request
指令,但两次尝试都失败了:
这个总是返回 204,即使 auth_request 返回 401/403:
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 如何返回后端状态代码,但它似乎并没有解决我的情况。
从nginx 文档中,
return
重要的是,在遇到指令时不会发生“停止处理”,因此无论子请求的结果如何,都会返回。
目标只是为了保护我的
/ping
端点,并且这个微小的修改有效:try_files
当然受制于auth_request
并且由于路径_
不存在,因此在通过时它会失败auth_request
,但如果不存在则返回 401 或 403: