需要用到ngx_http_auth_request_module 模块,它可以基于子请求的结果实现客户端授权。
高版本(1.12+)已经默认安装该模块,或者使用--with-http_auth_request_module开启此模块。
location /auth {
internal; # 只允许内部调用,外部调用报404
proxy_pass http://localhost:8081;
proxy_pass_request_body off; # 不向上游发送包体
proxy_set_header Content-Length ""; # 同上,看情况加或不加
proxy_set_header X-Original-URI $request_uri; # 传递真实请求路径
proxy_set_header X-Original-Remote-Addr $remote_addr; # 传递真实访问者地址
proxy_set_header X-Original-Host $host; # 传递真实请求地址
}
location /secret {
auth_request /auth;
auth_request_set $user $upstream_http_x_forwarded_user;
proxy_set_header X-User $user; # 可以传递Header
add_header Set-Cookie $user; # 可以传递Cookie
proxy_pass http://localhost:8080;
}
[参考]
使用Nginx实现网关统一鉴权
留待后查,同时方便他人