背景
前天(8月13日)CAC在beta环境服务打不开,控制台报错是有两个js文件报script error
,但这两个js文件是返回200 ok的。requirejs对script error的描述是js文件在运行时可能有javascript语法错误,或者其他执行问题。通过单步调试,找到报错点:Net::ERR_INCOMPLETE_CHUNKED_ENCODING
。该错误可能是nginx配置问题。查找nginx的错误日志,搜索fail关键字找到:
可看到No space left on device
报错,大致猜测可能是磁盘空间不足。查看磁盘空间,果然/opt目录的空间使用率已达100%,删除一些日志,服务就恢复正常了。
问题原因
当代理文件大小超过配置的proxy_temp_file_write_size
时,nginx会将文件写入临时文件目录(proxy_temp
),当磁盘空间不足时无法写入文件即会报错。
8月23日CAD研发生产环境发生同样的错误,页面打不开,控制台报错如下:
看到熟悉的ERR_INCOMPLETE_CHUNKED_ENCODING
错误,熟悉的js文件加载错误。查看CAD的磁盘空间后果然又是磁盘空间爆了:
那么问题来了,nginx的临时文件配置到底有什么用?客户端发起获取js文件请求的时候,nginx到底对这些文件做了什么?
参考文章
记一次异常:Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING
https://yq.aliyun.com/articles/248416
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffers
https://www.cnblogs.com/me115/p/5698787.html