【nginx】App打點場景下,用nginx的log捕獲http協議的$request_body的正確方法
阿新 • • 發佈:2019-02-16
【應用場景】
App裡面的打點資料想自己收集,可以考慮向nginx發一個json,通過nginx生成的日誌實現實時獲取資料。
所以問題就歸結為nginx日誌的生成。
正如 http://www.cnblogs.com/meteorx/p/3188647.html 這篇作者抱怨的,nginx並不會老老實實把request_body生成在log中。不會生成的原理在於nginx處理content之前是否讀到了request_body,上文的作者給了一個很奇怪的解決方法,或許對於他來說是必須的,但是對於打點資料來說實在太複雜。
【解決方法】
簡單的解決方案就在nginx配置檔案之中。
配置檔案的server=>location當中設定成不應答請求
server{
location = /event {set $invalid 1;
if ( $request_method = POST ) {
set $invalid 0;
echo_read_request_body;
access_log /logs/event_post.log post_format;
}
if ( $request_method = GET ) {
set $invalid 0;
access_log /logs/event_get.log get_format;
#return 200; 不要加這個,否則會導致捕獲不到request_body
}
if ( $invalid ) {
access_log /logs/event_nongetpost.log;
return 405;
}
}
}