【发布时间】: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