我正在开发一个快速驱动的网站,即通过nginx代理。有时在浏览器中加载页面时,我得到了这个:
GET http://myapp.local/css/bootstrap.css net::ERR_CONTENT_LENGTH_MISMATCH
如果我刷新页面,它通常会消失。但如果一遍又一遍地刷新,它会再次出现。
这是什么问题?我该怎么做才能缩小这个问题的范围?以下是此服务器的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
访问它,那么我最终会得到错误(可能是我发现错误的十分之一)。
答案 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_buffers
和proxy_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”
它开始正常工作。