OpenResty使用(二)

本文介绍了如何使用OpenResty结合lua脚本定制web响应,包括直接应答内容、修改request内容转发和修改response内容应答。示例中展示了在不同lua块中操作请求和响应的具体方法,以及在实际应用中的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

六、web响应定制示例

OpenResty的“开发”,其实是编写配置+lua脚本,大致的流程如下:

  • 首先根据业务,选择可能需要引用的lua模块(见“简介”一节,可能需要开发);
  • 然后考虑在web处理的哪个环节进行什么“插入”,也就是确定lua脚本应放置在哪个lua块(见“Nginx 中lua处理流程”一节),
  • 再看需要什么要的信息、有哪些接口可用,即如何获得web流中的数据(见“Nginx中lua API”一节);
  • 最后合理地安排脚本位置,即将lua代码放入一个文件还是多个文件并设置好引用路径。

根据简单的判断进行web请求转发,是缺省Nginx版本的核心功能,无需OpenResty,因此,这里的示例,都是对某些内容的修改,当然,如果利用OpenResty编写大量复杂的业务处理,也未必适合。
1.    直接应答内容
上节就是一个直接应答的示例,如果添加对redis,mysql等的引用,可以从缓存或数据库中读取内容后进行应答,其实这就是一个用lua写的web server。
2.    修改request content进行转发
修改request内容再转发,应该在rewrite_by_lua_block中编写相应脚本。首先将request内容读入内存,然后进行处理即可。
3.    修改response content进行应答
后端web server应答后,修改其内容在转发,要麻烦些,应该在header_filter_by_lua_block,body_filter_by_lua_block中编写相应脚本。body_filter_by_lua_block中获得response内容的接口是ngx.arg[1],是否结束的指示符是ngx.arg[2],另外,如果修改了response,会导致原来的content-length失效,官网的建议是是直接去掉它(目前还未想到更好方法)。
本节涉及三种修改web请求内容的场景,其实就是通过内容截获,在后端的web处理不修改的情况,添加一些业务逻辑。本节示例需要四段代码:ngnix.conf,capture.lua,testhttpd.py(后端的web),testhttpd.htm(后端的一个示例页面,用于测试post方法),它们分别如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值