openresty nginx记录日志中文变成十六进制,openrestynginx


问题描述:

通过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.参考博客https://www.jianshu.com/p/8f8c2b5ca2d1,

设置转义方式,这个方法我试过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;

相关内容

    暂无相关文章