Nginx代理资源请求过大超时Net::ERR_CONTENT_LENGTH_MISMATCH错误解决

1,348 阅读1分钟

定位问题

追查 nginx log 发现 error.log 里面出现了如下内容:

2019/08/11 11:15:22 [crit] 32464#0: *464 open() "/usr/local/var/run/nginx/proxy_temp/1/03/0000000031" failed (13: Permission denied) while reading upstream, 
client: 127.0.0.1, server: ling-dev.jd.com, request: "GET /_next/static/development/pages/test/embed.js?ts=1568171722435 HTTP/1.1", 
upstream: "http://127.0.0.1:3000/_next/static/development/pages/test/embed.js?ts=1568171722435", 
host: "ling-dev.jd.com", referrer: "http://ling-dev.jd.com/test/embed?"

发现启动nginx 进程的用户对 proxy_temp 这个目录没有权限!

proxy_temp 做什么用 nginx 我们经常用来做反向代

问题原因

在反向代理配置中有这样一个参数:proxy_temp_file_write_size, 当你的文件超过该参数设置的大小时,nginx会先将文件写入临时目录!

因此,当我们加载一些比较大的文件,超出 proxy_temp_file_write_size 设置大小时

就会写入 proxy_temp这个目录,如果这个目录又没有权限那就会出现上述的问题!

如何解决

既然是权限问题,那我们有以下几种解决方法:

  • 修改目录的权限跟现有的nginx用户一致
  • 修改nginx.conf,把 user 变为更高权限的用户
  • 修改nginx.conf,设置 proxy_temp 的路径,不使用缺省路径