auth_request_set

`auth_request_set` 指令根据内部认证请求的响应设置一个变量。 — NGINX HTTP Core

auth_request_set
httpserverlocation
语法auth_request_set variable value;
默认值none
上下文http, server, location
模块NGINX HTTP Core
参数2

说明

`auth_request_set` 指令在 NGINX 中用于定义一个变量,该变量用于存储内部认证请求的结果。通常该指令接受两个参数:要设置的变量名以及要检查的响应(可以是状态码或特定变量)。在内部认证请求成功的情况下,该变量会被设置;如果失败,则该变量保持未设置状态或重置回初始状态。 该指令与 `auth_request` 指令结合使用时尤其有用,它通过评估认证请求的结果来实现更细粒度的访问控制。例如,基于 `auth_request_set` 设置的变量的值,可以执行附加逻辑,从而实现不同的访问级别或错误处理。如果认证请求返回 2xx 响应,则表示成功;任何 4xx 或 5xx 响应均表示失败,从而可以对未授权访问尝试做出可配置的响应。`auth_request_set` 指令的位置灵活,可在 `http`、`server` 或 `location` 上下文中使用,从而为配置提供了广泛的灵活性。 此外,确保内部认证请求配置正确且可达非常重要。该变量的行为以及它与其他指令的交互可能会显著影响 NGINX 的路由和访问控制行为,因此在生产环境中实现时需要进行充分测试。

配置示例

location /protected {
    auth_request /auth;
    auth_request_set $auth_status $upstream_status;
    error_page 401 = @error401;
} 
location = /auth {
    internal;
    proxy_pass http://backend_auth;
}

确保在 `auth_request` 中的内部请求 URL 已正确配置,以避免无法访问的端点。

当请求可能不会返回有效的响应代码时,基于响应来设置变量要小心,因为这可能在访问控制评估中导致令人困惑的行为。

使用 `auth_request_set` 定义的变量的顺序会影响它们在后续处理中的可用性;请确保在引用之前已设置它们。