auth_request模块简介Nginx的auth_request模块允许将请求转发到指定的子请求进行认证根据子请求的返回状态码决定是否允许访问主请求。该模块常用于实现基于外部服务的动态鉴权如JWT验证、API鉴权等。启用auth_request模块默认情况下auth_request模块未编译进Nginx需通过--with-http_auth_request_module参数启用。在Nginx配置中添加以下指令启用模块1234location / {auth_request/auth;# 指定鉴权子请求路径auth_request_set $auth_status $upstream_status;# 保存子请求状态码}配置鉴权子请求子请求通常指向一个内部接口或外部认证服务返回2xx状态码表示鉴权成功其他状态码如401或403会拒绝主请求。1234567location /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将子请求的响应头或状态码传递到主请求12345location / {auth_request/auth;auth_request_set $user $upstream_http_x_user;# 从子请求头中提取用户信息proxy_set_header X-User $user;# 将用户信息传递给后端}2. 错误处理自定义鉴权失败时的响应1234error_page 401 error401;location error401 {return302/login?redirect$request_uri;# 跳转到登录页}典型应用场景JWT验证将请求转发到JWT验证服务验证Authorization头中的令牌。API网关鉴权通过外部服务检查API密钥或权限。动态ACL根据用户角色实时判断访问权限。注意事项性能影响每个请求都会触发子请求需确保认证服务响应迅速。缓存优化对频繁验证的请求如静态资源可搭配proxy_cache缓存鉴权结果。敏感信息避免在子请求中泄露敏感数据如密码或令牌。