gpt4 book ai didi

从 $request_body 记录 POST 数据

转载 作者:行者123 更新时间:2023-12-03 05:43:49 24 4
gpt4 key购买 nike

我的配置设置可以处理一堆 GET 请求,这些请求呈现的像素可以很好地处理分析和解析查询字符串以进行日志记录。使用额外的第三方数据流,我需要处理对给定 URL 的 POST 请求,该 URL 在其请求正文中具有预期可记录格式的 JSON。我不想使用带有 proxy_pass 的辅助服务器,只想将整个响应记录到关联的日志文件中,就像它对 GET 请求所做的那样。我正在使用的一些代码片段如下所示:

GET 请求(效果很好):

location ^~ /rl.gif {
set $rl_lcid $arg_lcid;
if ($http_cookie ~* "lcid=(.*\S)")
{
set $rl_lcid $cookie_lcid;
}
empty_gif;
log_format my_tracking '{ "guid" : "$rl_lcid", "data" : "$arg__rlcdnsegs" }';
access_log /mnt/logs/nginx/my.access.log my_tracking;
rewrite ^(.*)$ http://my/url?id=$cookie_lcid? redirect;
}

这就是我想做的事情:POST 请求(不起作用):

location /bk {
log_format bk_tracking $request_body;
access_log /mnt/logs/nginx/bk.access.log bk_tracking;
}

Curling curl http://myurl/bk -d name=example 给我一个未找到的 404 页面。

然后我尝试了:

location /bk.gif {
empty_gif;
log_format bk_tracking $request_body;
access_log /mnt/logs/nginx/bk.access.log bk_tracking;
}

冰壶 curl http://myurl/bk.gif -d name=example 给我一个 405 不允许

我当前的版本是nginx/0.7.62。非常感谢任何正确方向的帮助!谢谢!

更新所以现在我的帖子看起来像这样:

location /bk {
if ($request_method != POST) {
return 405;
}
proxy_pass $scheme://127.0.0.1:$server_port/dummy;
log_format my_tracking $request_body;
access_log /mnt/logs/nginx/my.access.log my_tracking;
}
location /dummy { set $test 0; }

它正确记录发布数据,但在请求者端返回 404。如果我更改上面的代码以返回 200,如下所示:

location /bk {
if ($request_method != POST) {
return 405;
}
proxy_pass $scheme://127.0.0.1:$server_port/dummy;
log_format my_tracking $request_body;
access_log /mnt/logs/nginx/my.access.log my_tracking;
return 200;
}
location /dummy { set $test 0; }

然后正确返回200,但不再记录post数据。

另一个更新有点找到了一个可行的解决方案。希望这可以帮助其他人。

最佳答案

这个解决方案很有魅力:

http {

log_format postdata $request_body;

server {
location = /post.php {
access_log /var/log/nginx/postdata.log postdata;
fastcgi_pass php_cgi;
}
}
}

我认为诀窍是让 nginx 相信您将调用 CGI 脚本。

编辑2022-03-15:有一些关于哪里log_format的讨论应设置。文档明确指出它需要位于 http 中上下文:http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format

如果你输入log_formatserver上下文,nginx 将无法加载配置:nginx: [emerg] "log_format" directive is not allowed here in <path>:<line> (在 ubuntu 18.04 上使用 nginx 1.20 进行测试)

关于从 $request_body 记录 POST 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4939382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com