最近在做 Nginx 结合 lua 的网关开发,遇到的第一个概念就是 Nginx 中的几个阶段,其实和 vue 的生命周期有点相似,在不同的阶段可以进行不同的处理。

下面来分享一下这几个阶段的含义,以及我遇到过的坑吧~

  1. set_by_lua:改写 nginx 变量,参数是变量名,变量值成对出现的
  2. rewrite_by_lua:改写 URI 阶段,可用于实现网关转发功能
  3. access_by_lua:用于进行接口鉴权或限流
  4. content_by_lua:产生相应内容,如果需要在 lua 脚本中实现业务逻辑,通常在这个阶段进行
  5. header_filter_by_lua:加工处理响应头,过滤数据
  6. body_filter_by_lua:加工处理相应体,可附加额外内容,如果有记录响应体的需求,也可以在这个阶段进行,注意如果响应体超过一个 chunk 的大小,这个阶段会被触发多次,需要拼接 ngx.var.arg[1]来获取完整响应内容
  7. log_by_lua:记录日志、统计埋点,需要注意这个阶段禁用 tcp 连接,如果需要把数据投放到 redis 的话,需要用 ngx.timer.at 设置一个延迟任务,在延迟任务中才可以连接 redis

下面这张图可以更直观的看到这几个阶段的执行顺序

lua 结合 nginx 的坑还挺多的,在后续的文章中会继续分享,敬请期待~