我正在尝试设置Kibana4使用 nginx 反向代理,目前部分成功。以下是与 Kibana 相关的配置:
server {
listen 82;
server_name ${HOSTNAME};
set $kibana kibana.docker;
location /kibana4/ {
proxy_pass http://$kibana:5601;
proxy_set_header Host $host;
proxy_set_header Referer "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_connect_timeout 150;
proxy_send_timeout 100;
proxy_read_timeout 100;
proxy_buffers 16 64k;
proxy_busy_buffers_size 64k;
client_max_body_size 256k;
client_body_buffer_size 128k;
}
}
在这种情况下,如果我去,http://localhost:82/kibana4/
我会得到未找到 404
但是如果我location /kibana4/
用替换location /
,则一切都正常 - 当然http://localhost:82
在这种情况下 URL 会更改为。
我发现了一些与类似问题相关的其他主题,例如:
在 Web 目录中的 nginx 反向代理后面运行 sinatra 程序 [Kibana]
但那里描述的解决方案对我不起作用。我甚至尝试了这个配置:
server {
listen 82;
server_name ${HOSTNAME};
set $kibana kibana.docker;
location /kibana4 {
proxy_pass http://$kibana:5601/;
proxy_set_header Host $host;
proxy_set_header Referer "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_connect_timeout 150;
proxy_send_timeout 100;
proxy_read_timeout 100;
proxy_buffers 16 64k;
proxy_busy_buffers_size 64k;
client_max_body_size 256k;
client_body_buffer_size 128k;
}
}
它启动了主机代理kibana.docker
,但问题是所有 URL 都被重写到同一个 kibana 加载页面。这导致任何 CSS 或 JavaScript 文件都无法正确加载。
我的问题是:有人知道这里可能出了什么问题吗?有人从服务器根目录以外的位置成功运行 Kibana4 吗?非常感谢您的帮助。
答案1
谢谢 HD。您在我之前的帖子下面提问 - 非常有启发性。它帮助我意识到问题所在。我总是忘记位置部分也会传递给代理,这就是为什么在我的情况下必须重写它。正确的配置应该是这样的:
location ~ ^/kibana4/(.*)$ {
rewrite /kibana4/(.*) /$1 break;
proxy_pass http://$kibana:5601;
proxy_set_header Host $host;
proxy_set_header Referer "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_connect_timeout 150;
proxy_send_timeout 100;
proxy_read_timeout 100;
proxy_buffers 16 64k;
proxy_busy_buffers_size 64k;
client_max_body_size 256k;
client_body_buffer_size 128k;
}
这也解释了为什么location /
如果没有rewrite
部分,设置仍能正常工作。添加后rewrite
,只有其余部分会传递给代理,并且效果很好。
再次感谢您,我学到了教训:-)
答案2
虽然来晚了,但我想在这里为 Apache 留下一个令人满意的解决方案,因为我找不到它们。对我来说,从子目录进行代理工作的方法是在 ProxyPass 目录后添加一个尾部斜杠:
ProxyPass /kibana/ http://localhost:5601/
ProxyPassReverse /kibana/ http://localhost:5601/
看这里:
答案3
从 Kibana 6.3 开始,设置现在可在kibana.yml
server.host: "example.com"
server.basePath: "/tools/kibana"
server.rewriteBasePath: true
这将在以下位置提供应用程序:http://example.com/tools/kibana包含 Kibana UI 中的所有链接