docker - Kibana 5.5.1 位于 nginx 1.13 代理后面(dockerized)

标签 docker nginx proxy elastic-stack kibana-5

目标:

我想在 docker 容器中运行 elk 堆栈。能够通过 nginx 代理访问 ELK 堆栈以绕过服务的各个端口。

Kibana 服务(默认端口 5601)

http://<server>.com:5601

应该可以通过以下地址访问:
http://<server>.com/kibana

问题:

问题是,在将 server.basePath 设置添加到配置后,无法访问 kibana 站点。只有将 Kibana 的每个基本 api 调用添加到 nginx 配置(/api、/ui、...),我才能启动该服务。

配置:

Kibana 的配置:
/opt/kibana/config/kibana.yml

有以下条目:
server.host: "0.0.0.0"
server.basePath: "/kibana"

其他一切都是默认的

独库server.basePath
# Enables you to specify a path to mount Kibana at if you are running behind a proxy. This only affects
# the URLs generated by Kibana, your proxy is expected to remove the basePath value before forwarding requests
# to Kibana. This setting cannot end in a slash.


nginx 配置:
location /kibana/ {
  rewrite ^/kibana(/.*)$ $1 break;
  proxy_pass http://<server>.com:5601/;
}

我使用 sebp/elk:551 docker 图像和以下 docker-compose 文件:
version: '2'
services:
  elk:
    image: sebp/elk:551
    container_name: "elk"
    volumes:
      - /etc/kibana/config/kibana.yml:/opt/kibana/config/kibana.yml
    ports:
      - "5601:5601"
      - "9200:9200"
      - "5044:5044"
    environment:
      SERVICE_5601_NAME: "kibana"
      SERVICE_9200_NAME: "elasticsearch"
      SERVICE_5044_NAME: "logstash"
    restart: always

我试过的:

我已经在 Kibana 4.6.1 上尝试了相同的设置,它按预期完美运行。

我测试过但不起作用的版本:5.4.3、5.1.2、5.0.2

我不想要的:

我不想添加 Kibana 的每个子目录,例如 /api, /ui, /app/kibana, ...添加到代理配置。

是否有其他解决方案或版本?

编辑 1:
@whites11:浏览器从 nginx 返回 502 Bad Gateway 站点。
浏览器信息:

一般的
Request URL:http://<server-name>.com/kibana/
Request Method:GET
Status Code:502 Bad Gateway
Remote Address:<server-ip>:80
Referrer Policy:no-referrer-when-downgrade

响应头
Connection:keep-alive
Content-Length:575
Content-Type:text/html
Date:Thu, 24 Aug 2017 13:54:49 GMT
Server:nginx/1.13.3

请求头
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Host:<server-name>.com
Upgrade-Insecure-Requests:1

从 nginx 登录
34#34: *8 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: <IP>, server: , request: "GET /kibana/ HTTP/1.1", upstream: "http://<server-ip>:5601/", host: "<server-name>.com"

最佳答案

我没有与您完全相同的部署,但我使用的是 dockerized kibana。

首先,您需要在 nginx 设置中包含以下内容:

    location /kibana/ {
      proxy_pass http://kibana_server:5601/;
    }

根据您的环境更改值,但最后的斜线很重要!不要删除它们!他们确保重写按照 Kibana 的预期完成——即 kibana已从访问 kibana 服务器的请愿书中的 URL 中删除。

然后保持以下几点:
server.basePath: /kibana

在您的 kibana 设置中。这确保了 kibana 提供的文档(链接和 url)具有前缀 /kibana .

这个对我有用。

关于docker - Kibana 5.5.1 位于 nginx 1.13 代理后面(dockerized),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45730583/

相关文章:

wpf - dockerize 一个 wpf 应用程序并使用它

docker : Overlay2 size too big

docker - 在两个容器之间共享文件

laravel - Nginx - 将非 ssl 和非 www 重定向到 ssl 和 www

java - 检测Java/JSP中的代理

docker - 如何从 DockerFile 运行 docker 实例?

Django uwsgi 导入错误

caching - Google PageSpeed 不更新缓存

java - 使用 Netty 创建一对多的 TCP 代理

c# - Awesomium C# WebControl,更改代理设置