
Nginx
1 前言
一个问题,一篇文章,一出故事。
笔者有一个使用请求模块进行身份认证的反向代理服务器,详细配置如下,
现在需要改为使用Cookie或Header进行身份验证。
客户端如果想通过反向代理获取上游资源时,需要向反向代理上发布的URL发送一个Cookie或Header且后端服务器需要验证通过后才取得反向代理后端的资源访问权限。
2 最佳实践
2.1 创建服务端配置
2.1.1 设置缓存目录
vim /etc/nginx/public/proxy_cache_path.conf
加入如下配置,
proxy_cache_path /data/nginx/cache/apiAuth levels=2:2:2 keys_zone=apiAuth:10m inactive=24h max_size=1g; proxy_cache_path /data/nginx/cache/apiAuths levels=2:2:2 keys_zone=apiAuths:10m inactive=24h max_size=1g;
然后,你需要修改如下文件加载该配置,
vim /etc/nginx/nginx.conf
加入如下指令用于加载,
http { #... include /etc/nginx/public/proxy_cache_path.conf; #... }
然后,你需要通过如下指令重载使服务生效,
systemctl reload nginx
2.1.2 设置统一的认证配置
vim /etc/nginx/public/proxy_api_auth.conf
加入如下配置,
set $auth 0; if ($COOKIE_token){set $auth 1;} set $auths 0; if ($http_token){set $auths 1;} location = /apiAuthCookie { if ($auth = 0){return 403;} proxy_pass https://api.cmdschool.org:8092/security/appAuthorization; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Original-URI $request_uri; proxy_cache apiAuth; proxy_cache_valid 200 12h; proxy_cache_valid 403 3s; proxy_cache_key $COOKIE_comchattoken; } location = /apiAuthHeader { if ($auths = 0){return 403;} proxy_pass https://api.cmdschool.org:8092/security/appAuthorization; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Original-URI $request_uri; proxy_cache apiAuths; proxy_cache_valid 200 12h; proxy_cache_valid 403 3s; proxy_cache_key $http_token; }
需要注意的是,
– 密码转发到后端“https://api.cmdschool.org:8092/security/appAuthorization”验证
– 后端“https://api.cmdschool.org:8092/security/appAuthorization”的验证逻辑需要由开发实现
然后,你需要通过如下指令重载使服务生效,
systemctl reload nginx
2.1.3 加载认证配置
vim /etc/nginx/conf.d/www.cmdschool.org.conf
加入如下配置,
server { #... include /etc/nginx/public/proxy_api_auth.conf; location /app1 { auth_request /apiAuthCookie; #... } location /app2 { auth_request /apiAuthHeader; #... } }
然后,你需要通过如下指令重载使服务生效,
systemctl reload nginx
2.2 客户端验证
使用COOKIE的验证方法(推荐),
使用请求头的验证方法,
没有评论