Nginx 将 POST/GET 请求体放入变量中

我有一个使用 openresty 作为服务器的单个位置,在其中需要将 POST/GET 请求体 RPUSH 到redis数据库中。

下面是配置片段:

map $request_method $query{
 "GET"   $request;
 "POST"   $request_body;
}

...

location /test {
redis2_query rpush $key $query;
redis2_pass redis6379:6379;
}

但如果是POST请求,则$query似乎是空的。

access_by_lua 'ngx.req.read_body()';

echo_read_request_body;

对此没有任何帮助。提前感谢任何类型的帮助。

点赞
用户3906452
用户3906452

``` 设置 $query 为空字符串。

使用 rewrite_by_lua 阶段将请求参数和客户端信息拼接到 $query 中。

获取请求方法,如果为 POST 方法,则先读取请求体,再将请求参数和客户端信息拼接到 $query 中;如果为 GET 方法,则将请求参数和客户端信息拼接到 $query 中。拼接规则为在请求参数后面加上 &ng_ua=[客户端 User-Agent]&ng_ip=[客户端 IP]&ng_time=[请求时间] 的字符串。

最终 $query 中的内容将作为后续请求中的参数使用。

2017-04-03 16:17:14