nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx auth_request

Nginx的auth_request模块的应用小结

作者:阿南0125

Nginx的auth_request模块通过子请求实现动态鉴权,支持JWT验证、API鉴权等场景,本文就来详细的介绍auth_request模块的使用,具有一定的参考价值,感兴趣的可以了解一下

auth_request模块简介

Nginx的auth_request模块允许将请求转发到指定的子请求进行认证,根据子请求的返回状态码决定是否允许访问主请求。该模块常用于实现基于外部服务的动态鉴权,如JWT验证、API鉴权等。

启用auth_request模块

默认情况下,auth_request模块未编译进Nginx,需通过--with-http_auth_request_module参数启用。在Nginx配置中添加以下指令启用模块:

location / {
    auth_request /auth;  # 指定鉴权子请求路径
    auth_request_set $auth_status $upstream_status;  # 保存子请求状态码
}

配置鉴权子请求

子请求通常指向一个内部接口或外部认证服务,返回2xx状态码表示鉴权成功,其他状态码(如401403)会拒绝主请求。

location = /auth {
    internal;  # 标记为内部请求,禁止外部直接访问
    proxy_pass http://auth-service/validate;  # 转发到认证服务
    proxy_pass_request_body off;  # 不转发请求体
    proxy_set_header Content-Length "";
    proxy_set_header X-Original-URI $request_uri;  # 可选:传递原始请求信息
}

高级配置示例

1. 动态传递鉴权结果

通过auth_request_set将子请求的响应头或状态码传递到主请求:

location / {
    auth_request /auth;
    auth_request_set $user $upstream_http_x_user;  # 从子请求头中提取用户信息
    proxy_set_header X-User $user;  # 将用户信息传递给后端
}

2. 错误处理

自定义鉴权失败时的响应:

error_page 401 = @error401;
location @error401 {
    return 302 /login?redirect=$request_uri;  # 跳转到登录页
}

典型应用场景

注意事项

到此这篇关于Nginx的auth_request模块的应用小结的文章就介绍到这了,更多相关Nginx auth_request内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文