生产环境 net :: ERR_INCOMPLETE_CHUNKED_ENCODING问题修复

题记

新系统上线一个月后,生产环境后台管理端时而出现查询失败的提示,清理Chrome缓存重新访问后正常,由于不影响业务,优先级不高就没有在发现的第一时间排查、修复,项目正常迭代后,决定去看下具体什么情况。

ERR_INCOMPLETE_CHUNKED_ENCODING

还是熟悉的味道,还是原来的配方,F12查看请求,首先分析报错信息如上所示,排查发现后台应用系统并没有日志打印,经分析确认是nginx代理问题导致的。部分微服务个应用节点通过nginx端口访问,能够正常请求接口并获取对应的响应。但是部分请求通过nginx转发,出现请求正常(响应200),一直提示上述错误 NET::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)

nginx的缓冲区

case1

客户端到nginx速度快,nginx到服务器速度慢,没有缓冲区,一点数据量就直接发到客户端,浪费性能。
有缓冲区,数据积累到一定量,再传输到客户端,减少了tcp请求的频次。

case2

客户端到nginx速度慢,nginx到服务器速度快,没有缓冲区,
nginx到服务器的连接就会一直保持在客户端,等待接受完毕。
有缓冲区,返回内容放到缓冲区,nginx到服务器的连接就可以断开,客户端从缓冲区获取即可。

具体分析

  • 磁盘空间不足;
  • nginx配置缓冲区设置过小;
  • nginx的临时目录(/proxy_temp)没有权限写入缓存文件;

方案分析

nginx.conf中的对应的反向代理配置中调整缓冲区大小。

问题解决

生产nginx.conf配置修改
location /frontProxy/ {

    proxy_pass http://xx.xx.xx.xxx:8088/;    
    
    # 新增如下
	proxy_buffer_size 1024k;
    proxy_buffers 16 1024k;
    proxy_busy_buffers_size 2048k;
    proxy_temp_file_write_size 2048k;
}

proxy_temp文件权限分析

目录权限
  • nginx.conf文件分析
# user nginx; 权限调整
user root; 
测试环境文件分析

在这里插入图片描述

  • user root 产生的 proxy_temp所属的用户权限也是root
  • 如上文所示nginx用户是没有权限写入临时文件的;
  • 调整user root -> user nginx
    • 由于测试环境数据大小并未超限,所以未生成proxy_temp文件;
生产环境产生 proxy_temp
  • 部分请求失效,是缓冲区大小导致的,修改方案见上文;
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐