【问题标题】:Kibana dashboard is not loading when served behind nginx在 nginx 后面提供服务时,Kibana 仪表板未加载
【发布时间】:2017-11-15 12:40:04
【问题描述】:

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

kibana.bundle.js 文件中的错误对于不同的浏览器(Chrome、FF)是不同的。这是因为相关文件似乎没有正确解压缩。

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

我的设置详情:

  • ELK(elastichsearch、logstash、kibana)堆栈设置在一个虚拟机中,所有版本 5.4.0
  • 在端口 443 下为 https 设置 Kibana(未配置 server.basePath)
  • Kibana 和 elasticsearch 都在使用 x-pack,不确定这是否重要,但它可能会增加优化后的 bundle 的大小(例如 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 关闭;proxy_buffering 关闭;但没有一个有效)。

测试详情:

在使用 Chrome 或 FF 进行测试时,我会收到带有预期标头的正常响应,所有请求的处理时间都低于 1 秒。

现在,当我直接卷曲捆绑包时,我仍然会收到直接调用 Kibana 的 1 秒以下响应,但是当我通过代理卷曲时,我会收到这种类型的响应:

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%,但在 20 秒后剩余的 8k 字节超时。我从 nginx 收到错误,说上游在读取上游时关闭了连接。

我觉得我在某处缺少缓冲区大小配置。希望一些 nginx/kibana 专家可以帮助我! :) 谢谢!

【问题讨论】:

    标签: elasticsearch nginx reverse-proxy kibana


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 1970-01-01
      • 2015-01-10
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 2016-11-08
      • 2021-08-10
      相关资源
      最近更新 更多