上一篇介绍入门安装,nginx的配置文件使用的都是默认配置。helloworld是没什么问题。
但是default nginx.conf是无法满足每个服务的要求。最简单的例子就是中文问题。默认的配置你试试,中文会被转义。
例如这样的请求:
http://192.168.39.120/nginx/ChineseCharacterTest?ChineseCharacter=中文
日志中输出的就是:
在日志数据分析的时候就会很麻烦了!
那么,在nginx 1.11.8之后的版本,在log_format 配置的时候可以加上 escape=json,这样中文就不会被转义了
肯定会有同学想,我们线上现在用的nginx版本低于1.11.8,有没有什么别的办法。办法当然是有的,拿来nginx的源码自己改,改完编译之后用。之前遇到过一个做过很多项目的前辈,经验十分丰富。他说过这样一句话:“如果可以通过升级第三方提供的服务来优化自己的产品,那么这将是自己产品升级方案中,付出代价最小的方案”(其实就是把锅甩出去)。
但是会有新的问题出现。nginx 默认的分割符号用空格。请求参数内容中如果出现空格,那么在分割的时候就会有问题。所以还需要自己定义自己的分割符号。例如用|:
log_format main escape=json '$remote_addr | $remote_user | [$time_local] | $request | $status | $request_body';
就是需要保证用来分割日志内容的符号,不能出现在内置变量的值当中,当然可以定义为多个字符的字符串,例如‘|-|’ 。