使用nginx读取表单POST变量

使用nginx读取表单POST变量,nginx,lua,reverse-proxy,openresty,Nginx,Lua,Reverse Proxy,Openresty,我有一个无法修改的客户端程序。它通过WAN链接发出包含数百个变量的大型POST(x-www-form-urlencoded)请求,但我只需要其中的5个。我正在本地客户端系统上插入nginx作为反向代理。让nginx去掉额外数据最容易的方法是什么 到目前为止,我有两种看法: 1.使用Lua(如果我这样做了,我应该一个接一个地编写内容,重写正文,然后再发出子请求吗?或者有更简单的方法吗?) 2.使用表单输入nginx模块和proxy_set_body解析并获取一些变量 我已经在使用OpenResty

我有一个无法修改的客户端程序。它通过WAN链接发出包含数百个变量的大型POST(x-www-form-urlencoded)请求,但我只需要其中的5个。我正在本地客户端系统上插入nginx作为反向代理。让nginx去掉额外数据最容易的方法是什么

到目前为止,我有两种看法: 1.使用Lua(如果我这样做了,我应该一个接一个地编写内容,重写正文,然后再发出子请求吗?或者有更简单的方法吗?) 2.使用表单输入nginx模块和proxy_set_body解析并获取一些变量


我已经在使用OpenResty了,所以Lua意味着没有额外的模块。但是,这可能意味着要编写更多的位置等等来执行子请求。

在我看来,最简单的方法是使用lua。在内容、重写、访问或它们的任意组合之间进行选择;将取决于您如何使用子请求的响应主体。该决定还将决定您是否需要其他位置

以下是几个例子:

1。内容以本地位置为目标。

(此方法需要定义子请求位置)

2。通过将lua重写到远程目标 (不需要额外的位置)

示例post请求,7个参数限制为5个:

curl 'http://localhost/original/url/to/remote' --data 'param1=test&param2=2&param3=3&param4=4&param5=5&param6=6&param7=7' --compressed
答复:

POST /test HTTP/1.0
Host: echo.200please.com
Connection: close
Content-Length: 47
User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Accept: */*
Accept-Encoding: deflate, gzip
Content-Type: application/x-www-form-urlencoded

param3=3&param4=4&param1=test&param2=2&param5=5
curl 'http://localhost/original/url/to/remote' --data 'param1=test&param2=2&param3=3&param4=4&param5=5&param6=6&param7=7' --compressed
POST /test HTTP/1.0
Host: echo.200please.com
Connection: close
Content-Length: 47
User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Accept: */*
Accept-Encoding: deflate, gzip
Content-Type: application/x-www-form-urlencoded

param3=3&param4=4&param1=test&param2=2&param5=5