ZBLOG

openresty 转发给上游时如何自定义增加header,用lua如何实现

在 OpenResty 中,你可以使用 Lua 脚本在转发请求到上游(upstream)时自定义增加 HTTP 头部。以下是几种常见的方法:


方法1:通过 ngx.req.set_header 设置头部

access_by_lua_*rewrite_by_lua_* 阶段动态添加头部:

location /proxy {
    proxy_pass http://your_upstream_server;
    access_by_lua_block {
        -- 添加自定义头部
        ngx.req.set_header("X-Custom-Header", "your_value")
        ngx.req.set_header("X-Another-Header", "another_value")
    }
}

方法2:通过 proxy_set_header 指令

Nginx 原生支持 proxy_set_header,但结合 Lua 可以动态生成值:

location /proxy {
    proxy_pass http://your_upstream_server;
    proxy_set_header X-Static-Header "static_value";
    
    # 通过 Lua 变量动态设置
    set_by_lua $dynamic_header '
        return "dynamic_value_" .. os.time()
    ';
    proxy_set_header X-Dynamic-Header $dynamic_header;
}

方法3:在 header_filter_by_lua 中修改响应头

如果需要在上游返回的响应中添加头部(而非请求头),可以这样操作:

location /proxy {
    proxy_pass http://your_upstream_server;
    header_filter_by_lua_block {
        ngx.header["X-Response-Header"] = "added_by_openresty"
    }
}

注意事项

  1. 阶段选择
    • access_by_lua_*:适合修改转发前的请求头。
    • header_filter_by_lua_*:适合修改上游返回的响应头。
  2. 覆盖原有头部
    • ngx.req.set_header 会覆盖同名的现有头部,若需追加值需手动拼接。
  3. 性能影响
    • Lua 操作会增加少量开销,建议在关键逻辑中使用。

完整示例

http {
    server {
        listen 80;

        location /forward {
            proxy_pass http://backend;

            # Lua脚本动态添加请求头
            access_by_lua_block {
                ngx.req.set_header("X-Request-ID", ngx.var.request_id)
                ngx.req.set_header("X-Auth-Token", "Bearer " .. os.time())
            }

            # 静态添加额外头部
            proxy_set_header Host $host;
        }
    }

    upstream backend {
        server your_backend_ip:port;
    }
}

通过上述方法,你可以灵活控制转发的 HTTP 头部。如果需要更复杂的逻辑(如从 Redis/DB 获取数据),只需在 Lua 中扩展即可。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23878

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?