我的配置设置可以处理一堆 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;
}
Curling curl http://myurl/bk.gif -d name=example
给我一个405 Not Allowed
.
我当前的版本是nginx/0.7.62
。非常感谢任何正确方向的帮助!谢谢!
UPDATE所以现在我的帖子看起来像这样:
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
正确,但不再记录发布数据。
另一个更新有点找到了一个可行的解决方案。希望这可以帮助其他人。