当我访问在nginx后面设置的Kibana时,由于 kibana.bundle.js 文件中的错误,仪表板将无法加载。 如果我直接访问Kibana (不通过代理)此错误不会发生。
kibana.bundle.js 文件中的错误因浏览器(Chrome,FF)而异。这是因为有问题的文件似乎没有正确解压缩。
我的所有浏览器都设置为接受gzip编码,而这正是Kibana所服务的。 kibana.bundle.js 是一个7mb文件,压缩后最终为1.5 。如上所述,当我直接访问Kibana时,该文件在客户端上解压得很好。
我为Kibana实例提供的服务器块的简化版本。基本上,这将转发给另一个代理,后者将在端口443下的正常位置访问Kibana。
server {
server_name blah;
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/blah.pem;
ssl_certificate_key /etc/nginx/ssl/blah.pem;
access_log /var/log/nginx/access-blah.log;
error_log /var/log/nginx/error-blah.log warn;
location / {
proxy_pass http://other_proxy;
proxy_http_version 1.1;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Upgrade $http_upgrade;
proxy_cache_bypass $http_upgrade;
}
}
除此之外,我使用 /etc/nginx/nginx.conf 的默认设置。我尝试了很多选项(sendfile off; proxy_buffering off;但没有一个工作)。
使用Chrome或FF进行测试时,我会得到预期标头的正常响应,所有请求都会低于1秒进行处理。
现在当我直接卷曲捆绑包时,我仍然得到直接调用Kibana的子1s响应,但是当我通过代理卷曲时,我得到了这种类型的响应:
curl -v https://blah:443/bundles/kibana.bundle.js?v=15063
...
99 7111k 99 7087k 0 0 346k 0 0:00:20 0:00:20 --:--:-- 0* TLSv1.2 (IN), TLS alert, Client hello (1):
{ [2 bytes data]
* transfer closed with 8192 bytes remaining to read
* Curl_http_done: called premature == 1
* stopped the pause stream!
99 7111k 99 7103k 0 0 347k 0 0:00:20 0:00:20 --:--:-- 3971
* Closing connection 0
} [5 bytes data]
* TLSv1.2 (OUT), TLS alert, Client hello (1):
} [2 bytes data]
curl: (18) transfer closed with 8192 bytes remaining to read
它几乎瞬间达到99%但是在剩余的8k字节后20秒后超时。我从nginx那里得到错误,说上游在上游时关闭连接。
我觉得有一个缓冲区大小配置我在某处丢失。希望有些nginx / kibana专家可以帮助我! :)谢谢!
答案 0 :(得分:0)
原来在nginx后面的代理的VM(在tomcat7上运行)空间不足。我清理了几个日志,注意到我overflow
上也挂了/tmp
。使用lsof
我发现tomcat正在使用该文件夹。所以我关闭tomcat,卸载溢出,然后从tomcat清除缓存并重新启动它,它工作正常。