openresty nginx記錄日誌中文變成十六進位制
問題描述:
通過openresty的nginx接收到url get方式帶引數請求之後,記錄下相關引數的日誌,發現中文全部被轉成了十六進位制。例如:xE6\xBC\x94\xE7\xA4\xBA\xE7\xAB\x99。
url這邊引數是經過編碼傳輸的,而nginx配置裡url的引數已經經過解碼。
當使用此方法:
local str = ngx.unescape_uri(url);
ngx.say(ngx.unescape_uri(str));
頁面輸出的是中文, 說明解碼成功。
當使用此方法:
log_format webaccess "$u_a|$u_b";
location /test1 {
set_unescape_uri $u_b "中國";
set_unescape_uri $u_a $arg_pa;
log_subrequest on;
access_log /source/428/web/access.log webaccess;
}
access.log 日誌裡$u_a|$u_b 都轉換成了 16進位制。
網上搜索的解決辦法有:
1.改編碼
編輯conf下面的nginx.conf
在server段里加以下兩行
default_type 'text/html';
charset utf-8;
然後重啟。
這個方法沒用。
2.參考部落格
設定轉義方式,這個方法我試過escape=none或者json都無效,應該是這個方法是針對nginx 1.11.8
以上版本
log_format postdata escape=json '$remote_addr | $request_body | $resp_body';
通過nginx -v命令得知,我安裝的nginx版本是1.9.3的,
nginx version: openresty/1.9.3.1
3.針對我這個版本的nginx,採用以下方法可以解決:
直接在 nginx.conf的記錄日誌的location部分裡面配置下面這一行就好了:
log_escape_non_ascii off;