【问题标题】:How to set proxy_http_version in LUA code before upstreaming the request in nginx如何在 nginx 中上游化请求之前在 LUA 代码中设置 proxy_http_version
【发布时间】:2025-11-28 22:30:01
【问题描述】:

我想以编程方式更改 Lua 代码中的代理 http 版本。有什么办法吗?

是的,我知道我们可以通过 location/server 块中的 nginx config 文件来设置它。有什么方法可以根据请求动态地使用 Lua 来实现吗?

【问题讨论】:

  • 使用os 或更好的io.popen 函数,因为它可以在Lua 变量中返回结果。
  • 我没听懂你。你能详细说明一下吗?我想在 Lua Nginx 中做。
  • 我不知道 Nginx。没用过。你只标记了:[lua]
  • 对不起,我的错。我会编辑它。很抱歉。

标签: nginx lua nginx-reverse-proxy nginx-location openresty


【解决方案1】:

2020 年 10 月 14 日更新

location / {
   content_by_lua_block {
       -- some logic here
       if flag then
          return ngx.exec("@http1_0")
       end
       return ngx.exec("@http1_1")
   }
}

location @http1_0 {
   proxy_pass ...;
   proxy_http_version 1.0;
   ...
}

location @http1_1 {
   proxy_pass ...;
   proxy_http_version 1.1;
   ...
}

【讨论】:

  • 但是 Proxy_http_version 不是标头对吗?它是请求协议的一个版本。我可以通过将其设置为标题来更改它吗?
  • @SANDEEPMACHIRAJU 你是对的,我会用其他方法更新我的答案
  • 感谢您的信息。 content_by_lua_block 应该是第一个生命周期函数吗?目前,我的配置文件有“rewrite_by_lua_block”、“access_by_lua_block”、“header_filter_by_lua_block”、“body_filter_by_lua_block”和“log_by_lua_block”。我测试了它,但它不起作用。你能帮帮我吗?
  • (或)没有 content_by_lua_block 有什么方法可以实现?使用纯 nginx 配置本身?
  • 我找到了答案。 proxy_pass 和 content_by_lua 块不能在单个位置块中。就我而言,我就是这样。所以这就是为什么它对我不起作用。 github.com/Kong/kong/issues/4000#issuecomment-440582143
最近更新 更多