配置 nginx

  • todo
  • 使用 lua-nginx-module

    8个处理阶段

  • init_by_lua

    • 初始化
  • set_by_lua
    • 流程分支处理判断、变量初始化
  • rewrite_by_lua
    • 转发、重定向、缓存等功能(例如特定请求代理到外网)
  • access_by_lua
    • 请求访问阶段处理,用于访问控制
  • content_by_lua
    • 内容处理器,接收请求处理并且输出响应
  • header_filter_by_lua
    • 应答HTTP过滤处理(例如添加头部信息)
  • body_filter_by_lua
    • 应答BODY过滤处理(例如完成应答内容统一成大写)
  • log_by_lua
    • 会话完成后本地异步完成日志记录(日志可以记录在本地,还可以同步到其他机器)

lua 内可用方法

  • ngx.var
    • nginx 变量
  • ngx.req.get_headers()
    • 获取请求头
    • return table
  • ngx.req.get_uri_args
    • 获取 url 请求参数
  • ngx.redirect
    • 重定向
  • ngx.print
    • 输出响应内容体
  • ngx.say
    • 同 ngx.print,最后会输出换行符
  • ngx.header
    • 输出响应头
  • ngx.exec
    • syntax: ngx.exec(uri, args?)
    • context: rewrite_by_lua, access_by_lua, content_by_lua*
    • 执行对应的 location
  • .etc

场景

灰度发布

  • 部分用户可以访问最新内容/尝鲜最新功能
  • 如何区别用户
    1. 用户的信息 cookie 等信息
    2. 根据用户的 ip 地址
      1. header
        1. x_forwarded_for client ip + 多层 proxy ip
        2. x_real_ip 真实 ip
      2. $remote_addr