溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Nginx如何利用日志實(shí)現(xiàn)打印post請(qǐng)求參數(shù)

發(fā)布時(shí)間:2020-11-10 15:11:00 來源:億速云 閱讀:2595 作者:Leah 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)Nginx如何利用日志實(shí)現(xiàn)打印post請(qǐng)求參數(shù),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

【前言】

        我們項(xiàng)目的短信功能是接第三方,原來對(duì)接第三方給我們回執(zhí)確認(rèn)請(qǐng)求是get請(qǐng)求我們?cè)谂挪閱栴}的時(shí)候可以通過nginx的日志拿到對(duì)方給我們請(qǐng)求的參數(shù);最近我們換了另外一家第三方,新的第三方給我們的確認(rèn)請(qǐng)求是post,遇到問題排查,發(fā)現(xiàn)nginx沒有打印具體參數(shù),于是查閱一些資料和運(yùn)維一起做了實(shí)驗(yàn)和線上調(diào)整,調(diào)整后我們可以拿到請(qǐng)求參數(shù),更方便我們排查問題;

【Nginx設(shè)置打印post請(qǐng)求參數(shù)】

           一、Nginx配置文件(nginx.conf)設(shè)置打印post請(qǐng)求參數(shù):在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;

           二、設(shè)置前后的效果對(duì)比

                  1、發(fā)送請(qǐng)求的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、設(shè)置前post請(qǐng)求,nginx打印的結(jié)果,很顯然沒有將參數(shù)打印出來

Nginx如何利用日志實(shí)現(xiàn)打印post請(qǐng)求參數(shù)

                  3、設(shè)置后post請(qǐng)求,nginx打印參數(shù),發(fā)現(xiàn)參數(shù)雖然打印出來但是有亂碼情況

Nginx如何利用日志實(shí)現(xiàn)打印post請(qǐng)求參數(shù)

                  4、解決亂碼

                      (1)需要在log_format main后加 escape=json

                      (2)nginx的版本需要是1.15.1及以上

                      (3)滿足以上最終打印出的結(jié)果

Nginx如何利用日志實(shí)現(xiàn)打印post請(qǐng)求參數(shù)

           三、看nginx日志必要性

                  1、更加全面:它可以記錄訪問者的ip瀏覽器以及請(qǐng)求參數(shù)等信息比java的請(qǐng)求日志更加全面;

                  2、請(qǐng)求大時(shí),java程序處理不過來,這時(shí)java日志沒有多余訪問請(qǐng)求,而nginx中有,有利于排查問題,優(yōu)化系統(tǒng)性能。

【總結(jié)】

        1、通過日志可以快速定位問題;

        2、排查問題時(shí)考慮要全面,從多過維度去思考。

關(guān)于Nginx如何利用日志實(shí)現(xiàn)打印post請(qǐng)求參數(shù)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI