如何在nginx中转换查询字符串参数?

2g32fytz  于 2023-06-05  发布在  Nginx
关注(0)|答案(1)|浏览(376)

我如何使用nginx来根据某些规则转换传入的查询字符串参数?特别是,我想在每个查询字符串参数值前添加一个前缀。我特别要做以下几点。
给定此URI:

http://localhost:3000/account?id=12345&name=bill

我希望它能变成

http://localhost:3000/account?id=eq.12345&name=eq.bill

其中每个项目的前缀是eq.原因是我使用nginx作为PostgREST的反向代理,PostgREST有一个丰富的URL语法,围绕eq.等操作符构建,但我需要在不知道该语法的客户端使用它。
我已经研究了nginx rewrite和nginx map模块。后者看起来很有希望,但我还没有想出如何使用它。
我也尝试了一些lua脚本,试图在npx.req.get_uri_args上循环,但目前我正在调试Lua代码。

events {
}

http {
    resolver 127.0.0.11 ipv6=off;
    server {
        listen 80;
        listen [::]:80;
        location / {
            default_type text/plain;
            access_by_lua_block {
               local qs = {}
               for key, val in pairs(ngx.req.get_uri_args()) do
                  table.insert(qs, key, "eq." .. val)
               end
               ngx.req.set_uri_args(qs)
            }            
            proxy_pass http://postgrest:3000;
        }
    }
}
ffvjumwh

ffvjumwh1#

我相信我已经回答了我自己的问题,尽管我欢迎更多的投入和贡献。以下Lua脚本在nginx.conf中工作:

events {
}

http {
    resolver 127.0.0.11 ipv6=off;
    server {
        listen 80;
        listen [::]:80;
        location / {
            access_by_lua_block {
               local qs = {}
               for key, val in pairs(ngx.req.get_uri_args()) do
                  qs[key] = "eq." ..val
               end
               ngx.req.set_uri_args(qs)
            }            
            proxy_pass http://postgrest:3000;
        }
    }
}

我很想知道在nginx中是否有替代Lua脚本的方法,但这似乎可以做到这一点。

相关问题