Jak*_*son 7 proxy nginx node.js express
我正在开发一个Express驱动的站点,它正在通过nginx代理.有时在浏览器中加载页面时,我会得到:
GET http://myapp.local/css/bootstrap.css net::ERR_CONTENT_LENGTH_MISMATCH
Run Code Online (Sandbox Code Playgroud)
如果我刷新页面,它通常会消失.但如果一遍又一遍地刷新,它会再次出现.
这里有什么问题?我该怎么做才能缩小这个问题的范围?这是我nginx对此服务器的配置:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这肯定与nginx代理有关.因为如果我只使用IP地址和节点端口访问该站点:http://10.10.10.10:8080那么我永远不会得到错误.但是,如果我使用代理vhost访问它:http://myapp.local那么我最终会得到错误(可能有十分之一的机会我看到它).
这net::ERR_CONTENT_LENGTH_MISMATCH是一个缓存问题.如果满足某些条件(在您的情况下$http_upgrade),您告诉Nginx绕过缓存.
您应该在某个配置文件中为nginx指定缓存位置.快速修复将删除此文件夹的内容,重新启动nginx,然后再次尝试访问该站点.以缓存为代价的另一个快速解决方法是删除该行proxy_cache_bypass $http_upgrade;
如果您提供有关缓存设置的更多详细信息,则可能会改进此答案.
这是代理缓冲的问题.启用缓冲后,nginx会尽快从代理服务器接收响应,并将其保存到由proxy_buffer_size和proxy_buffers指令设置的缓冲区中.如果整个响应不适合内存,则可以将其中的一部分保存到磁盘上的临时文件中.写入临时文件由proxy_max_temp_file_size和proxy_temp_file_write_size指令控制.
禁用缓冲时,响应会在收到响应时立即同步传递给客户端.nginx不会尝试从代理服务器读取整个响应.nginx一次可以从服务器接收的数据的最大大小由proxy_buffer_size指令设置.
因此,您可以简单地禁用代理缓冲来解决此问题:
proxy_buffering off;
Run Code Online (Sandbox Code Playgroud)
另请注意,nginx只是尝试写入磁盘上的临时文件,如果磁盘已满,您将收到相同的错误.因此,在禁用之前proxy_buffering检查磁盘使用情况.
| 归档时间: |
|
| 查看次数: |
6055 次 |
| 最近记录: |