Nginx 的 token 认证是基于集成了 nginx+lua 的 openresty 来实现的.nginx
- 环境: centos 7
- 部署方式: 增量部署(不影响原 nginx 版本)
- 版本: openresty/1.13.6.2
- 启动命令:1.原版本经过nginx命令启动. 2.新版本经过openresty命令启动.
需求:
对指定域名增长 http 请求头(header)验证,git
请求头为 xxxx=xxxxx 形式.centos
若是验证不经过,返回 403 ‘请求头验证失败 或 Error request forbidden ’app
实际代码示列:
server { listen 80; server_name www.aaa.com; access_log logs/host.access.log main; location /a/b/c { access_by_lua ' local args = ngx.req.get_headers(); --获取请求中 header 头的列表. local token1 = args["appid"]; --取出 header 头中key为 appid 的值. local token2 = "123456"; --定义一个局部变量. local errs = "oh,Only Authorized Request will be Processe" --定义错误提示消息 if not token1 then ngx.status = ngx.HTTP_FORBIDDEN --返回错误码 ngx.say(errs) --返回错误消息 ngx.exit(200) -- 跟以上两个连用,固定写法 end if token1 ~= token2 then ngx.status = ngx.HTTP_FORBIDDEN ngx.say(errs) ngx.exit(200) else return end '; proxy_pass http://www.google.com; } }
实施过程当中的坑:
背景介绍: 1.我是拷贝的原 nginx 下的配置文件,原 nginx 版本为 1.12.2. 2.测试环境为 openresty 中的nginx,版本为 1.13.6.2 我觉得配置文件是通用的,虽然原版本 nginx 的配置文件在新版本中不兼容的部分,我都替换了,但仍是产生了奇怪的问题...测试
- 测试环境经过,生产环境不管怎么修改配置都没法经过,中间浪费了不少时间,最后基于新 nginx 配置文件重写了整个配置,解决了问题.
致谢:
openresty 最佳实践google
nginx 状态码spa