文章目录
- 前言
- 一、nginx 校验 auth_request
- 二、使用步骤
- 1.安装nginx
- 2.配置代理验证
- 总结
前言
由于大多数前后端分离项目都需要nginx做代理,所以nginx 的应用非常广泛,然而有时候,我们为了集成第三方的门户,以及用户验证,不得不需要通过nginx 做一层包装,假装是一个整体,然后为了尽量减少代码改动,所以需要在nginx层做代理的时候,需要进行转发前的token 用户信息校验。
一、nginx 校验 auth_request
nginx 是通过 auth_request 实现用户校验的
我们通过源码的方式安装nginx,然后加入auth 模块的支持
二、使用步骤
1.安装nginx
具体安装可以参考: nginx安装
其中 --with-http_auth_request_module 就是加入auth的模块支持,这样就ok了。
2.配置代理验证
配置思路如下:
- 所有请求去掉代理前缀 /api
- 获取请求中的携带的token(请求头、拼接)
- 根据auth_reqeust 验证token合法性
- 判断合法性。合法继续代理,不合法直接返回错误,不再继续代理改请求
server {listen 8080;server_name localhost;location / {root html;index index.html index.html;try_files $uri $uri/ /index.html; # 刷新页面404 处理}location /api/ {# $arg_token获取拼接参数token, $token赋值给临时变量 tokenset $token $arg_token;auth_request /auth;# 通过/auth 验证后如果状态码是约定的错误如402 500 等,自定义返回错误error_page 402 500 = @error401;# 转发原始请求到后端服务proxy_pass http://127.0.0.1:8080/;}# 认证子请求location = /auth {# 内部请求internal;# 构造 POST 请求发送给认证服务proxy_pass http://127.0.0.1:8080/user/token; # 替换为实际的验证 URLproxy_method POST;proxy_pass_request_body off;proxy_set_header Content-Length "";proxy_set_header X-Original-URI $request_uri;proxy_set_header token $token; # 传递token# $http_authorization不通过拼参方式,而是通过从请求头中获取authorization# proxy_set_header Authorization $http_authorization; # 传递Token到鉴权服务}# 自定义返回错误信息 或者 错误页面location @error401 {add_header Set-Cookie "NSREDIRECT=$scheme://$http_host$request_uri;Path=/";return 424 "token expired";# return 302 http://127.0.0.1:8080/index;}}
总结
这样就通过了auth_request对转发的请求做了用户认证,有利于做门户网站的集成,以及增加了安全性;
重点来了!!!
如果不是第一次安装,而是第二次编译(已经是启动状态), 光重启是没用的,必须关掉nginx 然后启动
./nginx -s stop
./nginx