通过nginx_lua拦截请求参数准发到不同服务

一、引言

​ 在不更改代码情况下,使用nginx拦截请求参数token,通过token长短转发到不同应用。可使用nginx_lua 实现。

二、处理方案

2.1 前置要求

​ nginx安装lua模块,也可直接使用OpenResty(通过Lua拓展nginx的web平台);

​ 下载地址: http://openresty.org/cn/

2.2 编写demo.lua脚本
-- 1、token可通过url和请求头传递
-- 2、新程序token是jwt,旧程序token是原生的security  oauth2 生成的uuid

-- 分別从请求头、url获取token
--  获取body参数
--      可使用ngx.req.read_body()和 ngx.req.get_post_args()

-- 1、从url中获取token,从请求头获取token,替换Bearer 
local param = ""
if(ngx.var.arg_token ~= nil) then
    param = ngx.var.arg_token
elseif(ngx.var.http_Authorization ~= nil) then
     param= string.gsub(ngx.var.http_Authorization, "Bearer ", "")
end



-- 根据token长度 转发
if (param ~= nil and string.len(param) > 40 ) then
    ngx.log(ngx.ERR,"token--new--send  " ..param)
    return ngx.exec("/new", {token= param})
else
    ngx.log(ngx.ERR,"token--used--send " ..param)
    return ngx.exec("/used",{token= param})
end
2.3 nginx.conf 出发脚本
server {
	listen  8080;
	server_name localhost;
	charset utf8;

	#拦截url,获取token转发到不同路由
	location =/api/oauth/check_token {
	   content_by_lua_file "/etc/nginx/demo.lua";
	}


	#程序1 jwtToken
	location =/agent_api/oauth/refresh_token {
	    proxy_pass http://127.0.0.1:8080/oauth/check_token;
		proxy_set_header Host $http_host;
		proxy_set_header X-Real-IP $remote_addr;
		rewrite ^(.*)  /oauth/token?grant_type=refresh_token break;
	}

    #程序1 原生Token
    location /new {
        internal;
        proxy_pass http://127.0.0.1:8081/oauth/check_token;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
 

	error_page 500 502 503 504 /50x.html;
	location =/50x.html {
			root /html;
	}
}

三、lua常用命令

  1. 从url中获取参数:ngx.var.arg_参数key

​ 2.从请求头中获取参数:ngx.var.http_参数key

​ 3.日志输出

  • ​ ngx.STDERR – 标准输出
  • ​ ngx.EMERG – 紧急报错
  • ​ ngx.ALERT – 报警
  • ​ ngx.CRIT – 严重,系统故障,触发运维告警系统
  • ​ ngx.ERR – 错误,业务不可恢复性错误
  • ​ ngx.WARN – 告警,业务中可忽略错误
  • ​ ngx.NOTICE – 提醒,业务比较重要信息
  • ​ ngx.INFO – 信息,业务琐碎日志信息,包含不同情况判断等
  • ​ ngx.DEBUG – 调试

​ 4. 执行lua脚本路径:content_by_lua_file

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值