auth_request是Nginx的鉴权模块指令,用于在转发请求前向指定/internal location发起子请求;仅当子请求返回2xx才放行原始请求,实现统一入口级权限控制。

auth_request 是什么,为什么用它做统一鉴权
auth_request 指令让 Nginx 在转发请求前,先向一个指定的内部 location 发起子请求;只有该子请求返回 2xx 状态码(通常是 200),原始请求才被放行。它不参与业务逻辑,只做“门卫”——把鉴权逻辑从后端服务中剥离,交由独立服务或轻量脚本处理,实现真正的统一入口控制。
基础配置:让 auth_request 跑起来
确保 Nginx 已启用 auth_request 模块(1.5.4+ 默认内置)。在 server 块中添加如下最小可用配置:
location /api/ {
auth_request /auth;
proxy_pass http://backend;
}
location = /auth {
internal;
proxy_pass http://auth-service;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
proxy_set_header X-Original-Method $request_method;
}
关键点:
• internal 防止外部直接访问 /auth
• 关闭请求体传递(避免重复解析)
• 透传原始 URI 和 Method,方便鉴权服务判断权限范围
鉴权服务怎么写:一个轻量 Python 示例
用 Flask 写个 /auth 接口,接收头信息(如 Authorization)和 URI,校验 token 并检查接口白名单:
# auth_service.py
from flask import Flask, request, jsonify
import jwt
app = Flask(__name__)
@app.route('/auth', methods=['GET', 'POST'])
def auth():
auth_hdr = request.headers.get('Authorization')
if not auth_hdr or not auth_hdr.startswith('Bearer '):
return '', 401
token = auth_hdr[7:]
try:
payload = jwt.decode(token, 'secret-key', algorithms=['HS256'])
uri = request.headers.get('X-Original-URI', '')
if uri.startswith('/api/admin/') and 'admin' not in payload.get('roles', []):
return '', 403
return '', 200
except jwt.InvalidTokenError:
return '', 401
启动服务:gunicorn -w 2 -b 127.0.0.1:8000 auth_service:app,Nginx 中 proxy_pass 指向 http://127.0.0.1:8000 即可。
进阶技巧:透传用户身份给后端
鉴权通过后,常需把用户 ID、角色等信息传给业务服务。Nginx 本身不解析响应体,但可通过 auth_request_set 提取响应头:
location = /auth {
internal;
proxy_pass http://auth-service;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
auth_request_set $auth_user $upstream_http_x_user_id;
auth_request_set $auth_role $upstream_http_x_user_role;
}
location /api/ {
auth_request /auth;
proxy_pass http://backend;
proxy_set_header X-User-ID $auth_user;
proxy_set_header X-User-Role $auth_role;
}
只要鉴权服务在成功响应里带上 X-User-ID: 123 和 X-User-Role: admin,后端就能直接读取,无需重复解析 token。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











