Nginx结合lua处理的几个阶段
最近在做 Nginx 结合 lua 的网关开发,遇到的第一个概念就是 Nginx 中的几个阶段,其实和 vue 的生命周期有点相似,在不同的阶段可以进行不同的处理。
下面来分享一下这几个阶段的含义,以及我遇到过的坑吧~
- set_by_lua:改写 nginx 变量,参数是变量名,变量值成对出现的
- rewrite_by_lua:改写 URI 阶段,可用于实现网关转发功能
- access_by_lua:用于进行接口鉴权或限流
- content_by_lua:产生相应内容,如果需要在 lua 脚本中实现业务逻辑,通常在这个阶段进行
- header_filter_by_lua:加工处理响应头,过滤数据
- body_filter_by_lua:加工处理相应体,可附加额外内容,如果有记录响应体的需求,也可以在这个阶段进行,注意如果响应体超过一个 chunk 的大小,这个阶段会被触发多次,需要拼接 ngx.var.arg[1]来获取完整响应内容
- log_by_lua:记录日志、统计埋点,需要注意这个阶段禁用 tcp 连接,如果需要把数据投放到 redis 的话,需要用 ngx.timer.at 设置一个延迟任务,在延迟任务中才可以连接 redis
下面这张图可以更直观的看到这几个阶段的执行顺序
lua 结合 nginx 的坑还挺多的,在后续的文章中会继续分享,敬请期待~
本文是原创文章,采用CC BY-NC-ND 4.0 协议,完整转载请注明来自于高衡のblog
评论