在nginx后面提供服务时,Kibana仪表板不会加载

时间:2017-06-13 16:03:13

标签: elasticsearch nginx reverse-proxy kibana

当我访问在nginx后面设置的Kibana时,由于 kibana.bundle.js 文件中的错误,仪表板将无法加载。 如果我直接访问Kibana (不通过代理)此错误不会发生

kibana.bundle.js 文件中的错误因浏览器(Chrome,FF)而异。这是因为有问题的文件似乎没有正确解压缩。

我的所有浏览器都设置为接受gzip编码,而这正是Kibana所服务的。 kibana.bundle.js 是一个7mb文件,压缩后最终为1.5 。如上所述,当我直接访问Kibana时,该文件在客户端上解压得很好。

我的设置详情:

  • ELK (elastichsearch,logstash,kibana)堆叠设置在一个VM中,所有版本 5.4.0
  • Kibana在端口443(没有配置server.basePath)
  • 下设置为https
  • Kibana和elasticsearch都使用 x-pack ,不确定是否重要,但可能会增加优化捆绑包的大小(例如kibana.bundle.js)
  • 在Ubuntu 14 LTS下运行的其他VM中的nginx设置
  • nginx 将请求转发给其他代理。我会遗漏细节,但这个设置是我必须处理的。然而,当删除nginx并简单地使用Kibana前面的第二个代理时它也很有效。

有关nginx配置的详细信息:

我为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秒进行处理。

chrome request to kibana failure

现在当我直接卷曲捆绑包时,我仍然得到直接调用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专家可以帮助我! :)谢谢!

1 个答案:

答案 0 :(得分:0)

原来在nginx后面的代理的VM(在tomcat7上运行)空间不足。我清理了几个日志,注意到我overflow上也挂了/tmp。使用lsof我发现tomcat正在使用该文件夹。所以我关闭tomcat,卸载溢出,然后从tomcat清除缓存并重新启动它,它工作正常。