当前位置: 首页 > news >正文

沧州建设银行招聘网站网站的论坛怎么做的

沧州建设银行招聘网站,网站的论坛怎么做的,英文广告网站模板免费下载,网站主题类型背景 本文介绍Nginx中Lua模块使用方式,并结合案例进行介绍。案例介绍通过lua脚本提取HTTP请求头中的token字段,经过JWT校验并提取id和name信息,设置到http请求头中发向后段服务器。 默认情况下,Nginx自身不携带lua模块&#xff0…

背景

本文介绍Nginx中Lua模块使用方式,并结合案例进行介绍。案例介绍通过lua脚本提取HTTP请求头中的token字段,经过JWT校验并提取id和name信息,设置到http请求头中发向后段服务器。
默认情况下,Nginx自身不携带lua模块,即不支持通过lua脚本进行功能扩展。需要在编译Nginx时手动引入lua模块,或者直接使用openresty,本文结合后者进行介绍。

1.openresty安装流程

1.1 安装包下载

wget https://openresty.org/download/openresty-1.25.3.1.tar.gz
tar -zxvf openresty-1.25.3.1.tar.gz
cd openresty-1.25.3.1/

1.2 配置

./configure --prefix=/usr/local/ewen/nginx --with-luajit --without-http_redis2_module --with-http_ssl_module --with-http_sub_module --with-http_stub_status_module --with-http_dav_module --with-http_mp4_module --with-http_v2_module 

由于案例不涉及使用Redis,因此可以在configure阶段通过–without-http_redis2_module以最小化安装。
执行结果如下:

platform: linux (linux)...Type the following commands to build and install:gmakegmake install

1.3 编译和安装

gmake
gmake install

1.4 案例测试

1.4.1 测试nginx正常工作

修改配置,添加一个location:

location /test {return 200 "test success";
}

运行nginx后:

[root@124 sbin]# curl http://localhost:8765/test
test success

1.4.2 测试nginx的lua插件正常工作

修改配置,添加一个location:

location /lua{content_by_lua 'ngx.say("<h1>HELLO,Lua</h1>")';
}

运行nginx后:

[root@124 sbin]# curl http://localhost:8765/lua
<h1>HELLO,Lua</h1>

2.lua介绍

参考: Lua使用方式介绍

3.http处理流程与lua模块

如Nginx系列-12 HTTP消息处理流程文中介绍,Nginx处理HTTP消息的流程可以分为如下11个阶段:
在这里插入图片描述
Lua模块可以参与rewrite、access、content、log阶段,流程和对应指令如下所示:
在这里插入图片描述

当使用lua生成HTTP响应内容时,在content阶段处理对应content_by_lua指令,而进行请求校验时在access阶段处理,对应access_by_lua_block或者access_by_lua_file指令。

4.案例介绍

案例介绍通过lua实现校验请求是否合法:请求头中带有合法的token, 则通过校验,否则返回401响应。
案例使用jwt解析token,因此需要引入jwt依赖(lua-resty-jwt库),包括hmac.lua、evp.lua、jwt.lua、jwt-validators.lua; hmac.lua来源于lua-resty-jwt\vendor\resty,evp.lua、jwt.lua、jwt-validators.lua来源于lua-resty-jwt\lib\resty.
可以通过access_by_lua_block块的形式或者access_by_lua_file文件形式引入lua文件,本文选择后者。

4.1 lua文件介绍

ewen.lua文件内容如下:

local white_url_list = {'/open'};-- 修改为自己的jwt密钥
public_key = "......";function startsWith(str, prefix)return string.sub(str, 1, string.len(prefix)) == prefix;
endlocal function exit_with_code_msg(code, msg)ngx.status = code;ngx.say(msg);ngx.exit(code);
endlocal function get_jwt_claims(token, public_key)local jwt = require("resty.jwt");local jwt_obj, err = jwt:verify(public_key, token);if not jwt_obj thenngx.say("Failed to verify JWT: ", err);return nil;endreturn jwt_obj["payload"];
endlocal function check_token_and_fill_head()local token = ngx.req.get_headers()["token"];if not token thenexit_with_code_msg(ngx.HTTP_UNAUTHORIZED, "401 Unauthorized: Token not found or invalid");endlocal payload = get_jwt_claims(token, public_key)if not payload thenexit_with_code_msg(ngx.HTTP_UNAUTHORIZED, "401 Unauthorized: Token not found or invalid");endngx.req.set_header("id", tostring(payload["id"]));ngx.req.set_header("name", tostring(payload["name"]));ngx.req.set_header("role", tostring(payload["role"]));
endlocal function need_check()for _, path in ipairs(white_url_list) doif startsWith(ngx.var.request_uri, path) thenreturn true;endendreturn false;
endif not need_check() thenngx.log(ngx.INFO, "JWT: " .. tostring(ngx.var.request_uri) .. "  check.");check_token_and_fill_head()
elsengx.log(ngx.INFO, "JWT: " .. tostring(ngx.var.request_uri) .. " not need to check.");
end

其中: ngx.status属性表示HTTP响应状态码;ngx.say方法用于设置响应体内容;ngx.exit(code)用于设置状态码并直接返回给客户端(结束请求);ngx.req.set_header方法用于设置请求头;require(“resty.jwt”)表示引入jwt库,之后jwt:verify方法用于对token进行JWT校验和Claim信息提取。

4.2 配置lua文件

在nginx.conf文件的http块或者server块中添加:

access_by_lua_file ./lua/jwt.lua;

4.3 案例测试

分别使用带token和不带token进行测试:

[root@124 conf]# curl -X GET http://localhost:8765/lua
401 Unauthorized: Token not found or invalid[root@124 conf]# curl -X GET -H "token:eyJhbGciOiJFUzI1NiJ9.eyJleHAiOjE3MTk5NzkyMjEsInV1aWQiOiI1Y2M4OGYwZC1hNGM5LTQyNTItODdkMC1hNzZkNmQxNzEzZTEiLCJncmFudFR5cGUiOiJzYWMiLCJidXNpbmVzcyI6ImVjaGF0OnVlOjE5NjAwMDEwMDk4Iiwic2NvcGUiOiJlY2hhdDpldHMtY2FyZXRha2VyIGVjaGF0OmV0cy1lbXBsb3llZSBlY2hhdDplZXAiLCJsb2dpbkluZm8iOiJlY2hhdDp1ZToxOTYwMDAxMDA5OCIsInVzZXJJZCI6LTEsInZlcnNpb24iOiIxLjAuMCJ9.augjMcBV7BKXOb4_JjIcZK4RGuYDoVf73DksFVR8o49F1yQWZiRn07ZH_xmt2RnJmpwRtg-fUmIGn7tNv3Q7Dg" http://localhost:8765/lua
<h1>HELLO,Lua</h1>
http://www.yayakq.cn/news/442689/

相关文章:

  • 邵东网站建设个人设计师为什么做网站
  • 求制作网站网站开发接私活
  • 如何做好网站建设前期网站规划创建个人微信公众号
  • 企业网站布局代码小型网络设计方案
  • 中国正能量不良网站直接进入开发网站开票名称是什么
  • 信管女生做网站开发网站设计优缺点
  • 营销型网站页面摸板网络架构分为几层
  • 顺德网站优化山东学生做自我评价的网站
  • 哪里有做营销型网站的公司个人网站备案名称填写的注意事项
  • 电子商务网站前台业务系统主要是wordpress文章发布
  • 网站颜色搭配实例山东华邦建设集团网站
  • 建立公司网站时什么是重要的福州网站建站公司
  • mvc网站建设的实验报告宁波seo托管公司
  • 邢台网站优化移动端网站开发
  • 厦门网站免费制作网站建设系统下载
  • 网站备案负责人修改seo指的是搜索引擎
  • 沭阳那家做网站的本溪做网站公司
  • 制作宝安网站建设付费推广平台有哪些
  • 开网店需要自己做网站吗网站二级域名建站属于子站吗
  • 公众号开发网站建设合同网站建设服务ysaigo
  • 爱尚网站建设太原有做网站的吗
  • 装修网站应该怎么做中国域名根服务器
  • 做php网站会员开店代码如何编写义乌婚介网站建设
  • 北京低价网站建设网站 开发 价格
  • 建站平台是给谁用的邵阳网站开发公司推荐
  • 企业网站源码简约如何做自己的网站链接
  • 网站空间服务器续费网络营销工具中
  • 怎么修改网站模版产品网站建设
  • 云浮哪有公司做网站的浙江省外贸公司排名
  • wordpress建站创业wordpress编辑首页