Express和nginx net :: ERR_CONTENT_LENGTH_MISMATCH

时间:2016-06-19 15:43:17

标签: node.js express nginx proxy

我正在开发一个快速驱动的网站,即通过nginx代理。有时在浏览器中加载页面时,我得到了这个:

GET http://myapp.local/css/bootstrap.css net::ERR_CONTENT_LENGTH_MISMATCH

enter image description here

如果我刷新页面,它通常会消失。但如果一遍又一遍地刷新,它会再次出现。

这是什么问题?我该怎么做才能缩小这个问题的范围?以下是此服务器的nginx conf:

server {
  listen 80;
  server_name www.myapp.local;
  rewrite ^(.*) http://myapp.local$1 permanent;
}

server {
  listen 80;
  server_name myapp.local;

  access_log /vagrant/nginx/logs/myapp.local/access.log;
  error_log /vagrant/nginx/logs/myapp.local/error.log;

  location / {
    proxy_pass http://localhost:8080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}

这肯定与nginx代理有关。因为如果我只使用IP地址和节点端口访问该站点:http://10.10.10.10:8080那么我永远不会得到错误。但是如果我使用代理的vhost:http://myapp.local访问它,那么我最终会得到错误(可能是我发现错误的十分之一)。

3 个答案:

答案 0 :(得分:5)

net::ERR_CONTENT_LENGTH_MISMATCH是一个缓存问题。如果满足某些条件(在您的情况下为$http_upgrade),您告诉Nginx绕过缓存。

您应该在某处的配置文件中指定nginx的缓存位置。快速修复将删除此文件夹的内容,重新启动nginx,然后再次尝试访问该站点。以缓存为代价的另一个快速解决方法是删除行proxy_cache_bypass $http_upgrade;

如果您提供有关缓存设置的更多详细信息,可能会改进此答案。

答案 1 :(得分:5)

这是proxy buffering的问题。启用缓冲后,nginx会尽快从代理服务器接收响应,并将其保存到 @Override public boolean onQueryTextChange(final String newText) { if (searchTF.isIconified()) return false; // put the "real" onQueryTextChange actions here return true; } proxy_buffer_size指令设置的缓冲区中。如果整个响应不适合内存,则可以将其中的一部分保存到磁盘上的临时文件中。写入临时文件由proxy_buffersproxy_max_temp_file_size指令控制。

禁用缓冲时,响应会在收到时立即同步传递给客户端。 nginx不会尝试从代理服务器读取整个响应。 nginx一次可以从服务器接收的数据的最大大小由proxy_temp_file_write_size指令设置。

因此,您可以简单地禁用代理缓冲来解决此问题:

proxy_buffer_size

另请注意,nginx只是尝试写入磁盘上的临时文件,如果磁盘已满,您将收到相同的错误。因此,在禁用proxy_buffering off; 之前,请检查您的磁盘使用情况。

答案 2 :(得分:0)

当我尝试上述解决方案时,它没有解决问题。我也改变了在该位置写入的权限,但它没有用。然后我意识到我在那里做错了什么。在存储文件的位置,我有类似

的东西
  

“/ storage”+ fileName +“。csv”

。我正在测试Windows环境,它运行良好。但后来当我们将应用程序移动到Linux环境时,它停止了工作。所以后来我不得不把它改成

  

“./ storage”+ fileName +“。csv”

它开始正常工作。