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

本篇整理openresty的子查询和执行阶段!子查询 capture a —> b 子查询 ,查询内部对另外一个location做了一次查询,并返回结果!调用另一个location不发htttp,相当于内部调用了一次c函数! 京东商品详情页 –openresty的capture (1)很多api (2)无法降级服务 最好只有一个API接口! 每个loca

大家好,又见面了,我是全栈君。

本篇整理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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121121.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月26日 下午9:00
下一篇 2022年2月26日 下午10:00


相关推荐

  • 国内外BaaS服务盘点

    国内外BaaS服务盘点BAAS 为应用开发提供后台的云服务 在当前的移动互联网 云计算热潮中 尤其为这 2 类应用提供了大量的技术支持 包括提供存储 托管环境 也包括提供推送等通行后端技术能力 有单独的 mBAAS 的说法 但大多数人习惯将 BAAS 等同于为移动互联网应用开发而提供的云服务

    2026年3月17日
    1
  • mybatis中的动态sql表现为_MybatisPlus

    mybatis中的动态sql表现为_MybatisPlus如何分页查询Mybatis如何分页查询?Mysql中可以使用limit语句,但limit并不是标准SQL中的,如果是其它的数据库,则需要使用其它语句。MyBatis提供了RowBounds类,用于实现分页查询。RowBounds中有两个数字,offset和limit。MyBatis如何利用RowBounds

    2026年2月16日
    7
  • java 截位法保留小数_【数量关系速算技巧】泡泡截位法专题

    java 截位法保留小数_【数量关系速算技巧】泡泡截位法专题资料分析都要找技巧,进行分析之类的,但是如果你对计算有所技巧的话,那么你的计算就相对简单,也会比别人快些,在节省做题时间以及做题时间的同时,还能够提高正确率。截位法使用范围:除了加减法,其他的运算都可以使用截位法。【截位法原理】如果我要把分子提高一部分,分母也要提高相应的部分,这样子得到的答案才不会有偏差,简言之就是同增同减。除法:【分子除以分母】12345/54321【用计算器得结果227】变…

    2022年5月15日
    41
  • 【ES6】Promise用法[通俗易懂]

    【ES6】Promise用法[通俗易懂]promise理解及使用Promise解决的问题——异步Promise的基本用法异步操作拒绝及中断调用链ES6对Promise/A+的扩展Promise.all的扩展Promise.race的扩展众所周知的,Javascript是一种单线程的语言,所有的代码必须按照所谓的“自上而下”的顺序来执行。本特性带来的问题就是,一些将来的、未知的操作,必须异步实现(关于异步,我会在另一篇文章里进行讨论)…

    2022年6月18日
    35
  • php中接口、抽象类以及接口和抽象类区别详解

    php中接口、抽象类以及接口和抽象类区别详解php中接口、抽象类以及接口和抽象类区别详解

    2022年4月24日
    46
  • sql2012安装错误代码0x84b10001_0x80300001安装错误

    sql2012安装错误代码0x84b10001_0x80300001安装错误”.”(十六进制值0x00)是无效字符。问题描述:Win7(SP1)卸载SQLServer2000后,先安装SQLSever2008,顺利完成,再安装SQLServer2014,各版本均提示”0x84B10001″错误。问题分析:检索相关网页,多认为Win7不能安装SQLServer2014企业版,只能安装开发版或标准版;有的认为操作系统语言版本要和SQLSever的

    2025年10月24日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号