我的配置设置可以处理一堆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;
}
冰壶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 Not Allowed
。
我当前的版本是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
正确返回,但不再记录过帐数据。
另一个更新Kinda找到了可行的解决方案。希望这可以帮助其他人。