我的配置设置可以处理一堆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找到了可行的解决方案。希望这可以帮助其他人。