我有我的配置设置来处理一堆 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;
}
冰壶给了我一个 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
,但不再记录发布数据。
另一个更新 找到了一个有效的解决方案,希望这能帮到其他人。