nginx專題-內置變量轉義

上一篇介紹入門安裝,nginx的配置文件使用的都是默認配置。helloworld是沒什麼問題。

但是default  nginx.conf是無法滿足每個服務的要求。最簡單的例子就是中文問題。默認的配置你試試,中文會被轉義。

例如這樣的請求:

http://192.168.39.120/nginx/ChineseCharacterTest?ChineseCharacter=中文

日誌中輸出的就是:

Nginx日誌中文測試

在日誌數據分析的時候就會很麻煩了!

那麼,在nginx 1.11.8之後的版本,在log_format 配置的時候可以加上 escape=json,這樣中文就不會被轉義了

nginx日誌中文不轉義效果

肯定會有同學想,我們線上現在用的nginx版本低於1.11.8,有沒有什麼別的辦法。辦法當然是有的,拿來nginx的源碼自己改,改完編譯之後用。之前遇到過一個做過很多項目的前輩,經驗十分豐富。他說過這樣一句話:“如果可以通過升級第三方提供的服務來優化自己的產品,那麼這將是自己產品升級方案中,付出代價最小的方案”(其實就是把鍋甩出去)。

但是會有新的問題出現。nginx 默認的分割符號用空格。請求參數內容中如果出現空格,那麼在分割的時候就會有問題。所以還需要自己定義自己的分割符號。例如用|:

log_format main escape=json '$remote_addr | $remote_user | [$time_local] | $request | $status | $request_body';

就是需要保證用來分割日誌內容的符號,不能出現在內置變量的值當中,當然可以定義爲多個字符的字符串,例如‘|-|’ 。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章