如何使用 Lua 和 nginx 在反向代理 HTTP 请求中替换字符串

你可以使用 access_by_lua_block 来替换 nginx 请求中的任意字符串。注意:这将在到反向代理的请求中替换,而不是在来自反向代理的响应中替换。有关如何在响应中替换字符串的基于 Lua 的方法,请参见如何使用 lua 在 nginx 中替换 HTTP 响应数据。**

access_by_lua.conf
access_by_lua_block {
    ngx.req.read_body()
    local body = ngx.req.get_body_data()
    if body then
        body = ngx.re.gsub(body, "string_to_replace", "string_by_which_to_replace")
    end
    ngx.req.set_body_data(body)
}

这通常用于 location {} 块中,这样你只可以在访问特定 URL 集时替换:

location_config.conf
location /config {
    proxy_pass http://127.0.0.1:12345/;
     proxy_set_header X-Forwarded-For $remote_addr;

     access_by_lua_block {
         ngx.req.read_body()
         local body = ngx.req.get_body_data()
         if body then
                body = ngx.re.gsub(body, "myvar", "myothervar")
         end
         ngx.req.set_body_data(body)
     }
}

Check out similar posts by category: Nginx