问题描述
使用nacos搭建集群,使用nginx实现高可用,运行时候配置中心报错
parse data from Nacos error,dataId:nacos_consumer_n-dev.yaml,data: +(�/�LI-�K�M�R�())����KL�/�-�J�� ��R& ,
org.yaml.snakeyaml.reader.ReaderException: special characters are not allowed
at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:211) ~[snakeyaml-1.26.jar:na]
at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176) ~[snakeyaml-1.26.jar:na]
at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171) ~[snakeyaml-1.26.jar:na]
at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:126) ~[snakeyaml-1.26.jar:na]
at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1177) ~[snakeyaml-1.26.jar:na]
at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:287) ~[snakeyaml-1.26.jar:na]
at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227) ~[snakeyaml-1.26.jar:na]
at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:195) ~[snakeyaml-1.26.jar:na]
at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158) ~[snakeyaml-1.26.jar:na]
排查原因
根据错误日志显示,读取配置乱码,尝试以下几种方式:
- 不经过nginx,配置中心地址直接设置nacos地址,可能正常获取配置信息;
- 更改配置文件格式,使用json格式,可以正常获取到配置信息;
- 更改nginx配置,nacos读取配置默认使用utf-8格式,所以在nginx配置中添加编码格式配置,未生效
server {
listen 80;
server_name 10.10.1.1;
charset utf-8;
location / {
proxy_pass http://nacos-cluster/;
}
- 使用调试模式,获取配置信息是通过configs接口获取的,使用postman测试能够正常获取到,没有乱码。
http://10.10.1.1:80/nacos/v1/cs/configs?dataId=nacos_consumer_n-dev.yaml&group=DEFAULT_GROUP&tenant=3d33f0ac-4306-4175-8010-3fa0df21f4ae
最终解决方案
关闭nginx 的gzip压缩,然后就可以正常访问了,具体原因不清楚,还望有人帮忙解释下
gzip off;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;