nginx中文日志乱码的问题

看到自己的服务器上又好多乱码的日志,查了一下据说nginx会将中文变成16进制,想把他们正常显示出来。

乱码日志:

[22/Mar/2020:16:04:27 +0800] "GET /\xE4\xB8\xAD\xE6\x96\x87 HTTP/1.1" 301 169 "-" "curl/7.54.0" "-"

解决方法:

前提:nginx版本大于1.11.8,ubuntu16.04默认安装的nginx版本不够,更新方法:
https://blog.csdn.net/hj605635529/article/details/80739335

修改配置文件,http层级的:

nginx配置文件log_format增加 escape参数,json,或none都可以。

    log_format  main escape=none  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

 再次请求:

curl wangjinyu.net/中文

再次看日志,已经可以显示中文。

[22/Mar/2020:16:07:25 +0800] "GET /中文 HTTP/1.1" 301 169 "" "curl/7.54.0" ""

 ps:

用Python的requsets请求还是不行,因为requests好像会对url进行urlencode,所以还是显示乱码。

In [5]: res=requests.get('http://wangjinyu.net/中文')

In [6]: res.url
Out[6]: u'https://wangjinyu.net/%E4%B8%AD%E6%96%87'

nginx日志:

[22/Mar/2020:16:29:33 +0800] "GET /%E4%B8%AD%E6%96%87 HTTP/1.1" 404 153 "" "python-requests/2.22.0" ""

nginx相关文档 :

http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format

你可能感兴趣的:(nginx中文日志乱码的问题)