您的位置:首页 > 运维架构

OpenResty 最佳实践学习--实战演习笔记(5)

2017-12-09 17:19 423 查看
本篇整理openresty的子查询和执行阶段!

子查询

capture
a --->  b


子查询 ,查询内部对另外一个location做了一次查询,并返回结果!调用另一个location不发htttp,相当于内部调用了一次c函数!

京东商品详情页 –openresty的capture

(1)很多api

(2)无法降级服务

最好只有一个API接口!

每个location 只做一个功能,使用capture 串联起来!

某个location 出问题,就可以砍掉!不影响其他的功能!

res1,rest2,rest3 = ngx.location.capture_multi{

{“/foo”,{args=”a=1&b=2”}},

{“/bar”},

{“/test”,{}},

}

capture_multi 一次可以发起多个location的请求,总的请求时间等于最长的那个请求返回的时间!

串起来,比一个个的性能高!

openresty的执行阶段

源于 nginx ,整个流程十分复杂!
不同阶段会挂载不同的模块,达到不同的目地。


七个执行阶段:

location /mixed {

body_filter_by_lua ‘ngx.log(ngx.ERR,”body_filter_by_lua”)’;

set_by_lua  $a 'ngx.log(ngx.ERR,"set_by_lua")';

rewrite_by_lua 'ngx.log(ngx.ERR,"rewrite_by_lua")';

access_by_lua 'ngx.log(ngx.ERR,"access_by_lua")';

header_filter_by_lua 'ngx.log(ngx.ERR,"header_filter_by_lua")';

log_by_lua 'ngx.log(ngx.ERR,"log_by_lua")';

content_by_lua 'ngx.log(ngx.ERR,"content_by_lua")';


}

执行结果流程如下:

set_by_lua : 流程分支判断,变量初始化这个功能
rewrite_by_lua: 转发、重定向
access_by_lua:ip准入,接口权限,合法性判断,配置系统自带的ip_table,外部应用防火墙功能
content_by_lua : 内容生成,
header_filter_by_lua : 过滤http的请求头,也可以自己添加一些请求头!
body_filter_by_lua:应答body
log_by_lua : 记录一下日志,可以记录本地或者远端的服务器


简单点,可以在content_by_lua中都做了,但是熟悉后最好对应的代码放到对应的阶段去完成!

例子:

明文协议版本

location /mixed{

content_by_lua ‘….’ # 请求处理

}

加密协议版本 2.0

location /mixed {

access_by_lua ‘….’ # 请求加密解码

content_by_lua ‘….’ #请求处理,不需要关心

body_filter_by_lua ‘…..’ #应答加密解码

}

不同阶段有不同的处理行为 ,这是openresty的一大特色!

快乐的时光总是短暂的!下一个阶段在见了!

如果自学《Openresty最佳实践》 github电子书 –重要

http://wiki.jikexueyuan.com/project/openresty/

遇到问题怎么办?

(1)看本地nginx的log/error.log

(2)很诡异的问题,上下文环境,openresty版本,最新可运行代码(重现)!

(3)官方文档

(4)多沟通

如果您觉得这篇博文对你有帮助,请点个赞,谢谢!

如果帅气(美丽)、睿智(聪颖),和我一样简单善良的你看到本篇博文中存在问题,请指出,我虚心接受你让我成长的批评,谢谢阅读!
祝你今天开心愉快!


欢迎访问我的csdn博客,我们一同成长!

不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页:http://blog.csdn.net/u010648555
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: