您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Nginx如何利用日志實現打印post請求參數,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
【前言】
我們項目的短信功能是接第三方,原來對接第三方給我們回執確認請求是get請求我們在排查問題的時候可以通過nginx的日志拿到對方給我們請求的參數;最近我們換了另外一家第三方,新的第三方給我們的確認請求是post,遇到問題排查,發現nginx沒有打印具體參數,于是查閱一些資料和運維一起做了實驗和線上調整,調整后我們可以拿到請求參數,更方便我們排查問題;
【Nginx設置打印post請求參數】
一、Nginx配置文件(nginx.conf)設置打印post請求參數:在http模塊的log_format中增加 "dm":$request_body 防止中文亂碼,增加 escape=json
log_format main escape=json '{ "@timestamp": "$time_iso8601", ' '"remote_addr": "$remote_addr",' '"costime": "$request_time",' '"realtime": "$upstream_response_time",' '"status": $status,' '"x_forwarded": "$http_x_forwarded_for",' '"referer": "$http_referer",' '"request": "$request",' '"upstr_addr": "$upstream_addr",' '"bytes":$body_bytes_sent,' '"dm":$request_body,' '"agent": "$http_user_agent" }'; access_log /var/log/nginx/access.log main;
二、設置前后的效果對比
1、發送請求的json格式
{ "results":[ { "price":{ "pricePerMessage":0.01, "currency":"aaa" }, "messageId":"ff4804ef-6ab6-4abd-984d-ab3b1387e852", "to":"385981178", "sentAt":"2015-02-12T09:58:20.323+0100", "doneAt":"2015-02-12T09:58:20.337+0100", "smsCount":1, "status":{ "id":5, "groupId":3, "groupName":"DELIVERED", "name":"DELIVERED_TO_HANDSET", "description":"Message delivered to handset" }, "error":{ "groupId":0, "groupName":"OK", "id":0, "name":"NO_ERROR", "description":"No Error", "permanent":false } } ] }
2、設置前post請求,nginx打印的結果,很顯然沒有將參數打印出來
3、設置后post請求,nginx打印參數,發現參數雖然打印出來但是有亂碼情況
4、解決亂碼
(1)需要在log_format main后加 escape=json
(2)nginx的版本需要是1.15.1及以上
(3)滿足以上最終打印出的結果
三、看nginx日志必要性
1、更加全面:它可以記錄訪問者的ip瀏覽器以及請求參數等信息比java的請求日志更加全面;
2、請求大時,java程序處理不過來,這時java日志沒有多余訪問請求,而nginx中有,有利于排查問題,優化系統性能。
【總結】
1、通過日志可以快速定位問題;
2、排查問題時考慮要全面,從多過維度去思考。
關于Nginx如何利用日志實現打印post請求參數就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。