开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第一阶段):网站流量日志埋点收集- -方案二- -中文乱码问题解决】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/693/detail/12183
网站流量日志埋点收集- -方案二- -中文乱码问题解决
内容简介
一、中文乱码问题
二、具体操作演示
本节内容解决 nginx 中让人难受的问题:如果你收集的数据包含中文,日志中显示不是中文,数据该如何正确保存?
一、中文乱码问题
在页面中,有属性这是点击,这是中文符号,但是通过 js 采集保存到后端发送存储时,日志不是以想象的中文形式存在,而是代码,Nginx 对中文做了移位编码变成16进制。
所以遇到现实中存在的尴尬问题:我们是在中文环境下进行开发,工作,如果涉及需要去采集中文数据该如何正确保存?如果不去处理问题,后续处理将会非常麻烦。
通过资料发现这个代码
\XE8\XBF\x98\XAF\xE7\x82\xB9\xE5\x87\XBB2 逻辑来自 nginx 一段源码,nginx 源码是用 c 语言写的,因此要改变需要打开 nginx 源码,把里面进行移位编码逻辑注释或删除,就可以保存中文数据。
二、具体操作演示
要想涉及源码的修改,我们应该想到之前编译的 nginx 就不能再使用。
打开参考文档中的 nginx 中文乱码,造成中文乱码就是源码中有这样的文件 ngx_http_log_module.c 。
打开 ngx_http_log_module.c,在第八百多行里会进行移位编码,变成16进制。
接下来学习如何进行相关操作:
首先把之前 nginx 源码和安装包删除,cd 到根目录下,使用 rm -rf/ 把 usr/local/nginx/下的 nginx 删除,这是之前定义的安装包,再把 usr/local/src/nginx-1.8.1,这是之前的源码包。
1.删除之后需要重新解压 nginx 源码并且进行源码修改,然后进行
编译。cd/export/software/ ,里面有 nginx 源码包。
使用 tar-zxvf nginx-1.8.1.tar.gz-C/usr/local/src/ 命令解压,
解压之后 cd/usr/local/src/nginx-1.8.1/
进去之后修改里面的源码,源码路径在 src/http/modules/ngx_http_log_module.c ,所以 cd 至src/http/modules/ ,然后 rm -rf ngx_http_log_module.c ,删除之前的。
删除好之后需要把附件的替换进去,就是把文件
ngx_http_log_module.c 复制进去,这就对我们 nginx C 语言的源码进行了修改。
改好之后 cd/usr/local/src/nginx-1.8.1/
因为修改了源码,所以需要重新编译。编译之前需要做两件事,一是确保之前的模块有没有存在,在路径 usr/local/nginx/modules 中查看,不存在需要重新解压。如图表示不存在,所以重新解压。
所以首先使用 mkdir-p/usr/local/nginx/modules 创建文件夹,然后 cd/export/software/,再把四个命令解压到页面
tar-zxvf
lua-nginx-module-0.10.0.tar.gz-C /usr/local/nginx/modules/
tar-zxvf
set-misc-nginx-module-0.29.tar.gz-C /usr/local/nginx/modules/
tar-zxvf
ngx_devel
kit-0.2.19.tar.gz-C /usr/local/nginx/modules/
tar-zxvf
echo-nginx-module-0.58.tar.gz-C /usr/local/nginx/modules/
解压之后,验证模块已经存在
最后进行重新编译安装,cd/usr/local/src/nginx-1.8.1/,然后先用 configue 进行编译:打开新的 notepad++,输入
./configure --prefix=/usr/local/nginx \
--with-ld-opt-="-Wl,-rpath/usr/local/luajit/lib" \
--add-module=/usr/local/nginx/modules/ngx_devel_kit-0.2.19 \
--add-module=/usr/local/nginx/modules/lua-nginx-module-0.10.0\
--add-module=/usr/local/nginx/modules/set-misc-nginx-module-0.29\
--add-module=/usr/local/nginx/modules/echo-nginx-module-0.58
保证格式不出现问题,再进行重新复制进行执行,这一步会对环境进行相关检测,检测误 make && make install 写入就可以开始编译安装
编译完成后就需要查看这种情况下的 nginx 到底对中文能不能支持,会不会出现16进制编码乱码的问题。完成后 cd/usr/local/nginx/ 路径下
这时第一台机器不动,把第二台机器的相关配置放入。首先 cd 至 html 中,把 ma.js 放置,然后来到cd../conf/ 路径下,通过 rm -rf nginx.conf把自带的 nginx.conf 删除,删除之后把参考文档中的 nginx.conf 放入。
完成之后cd..返回上级目录进行nginx启动,
通过 sbin/nginx -c conf/nginx.conf 启动,启动之后同样使用 tail-f logs/user_defined.log 打开日志查看是否出现中文乱码问题。
所以打开浏览器,进行点击事件,发现未出现乱码问题。
以上就是解决问题的操作,这样就极大方便了针对中文数据的收集,尤其我们大多人的工作环境,以及日常的开发环境是中文情况下。
修改完源码之后,就会非常的方便。