Kibana4 + nginx 反向代理使用位置 /kibana4/ = Not Found 404

Szy*_*iak 5 nginx kibana

我正在尝试使用 nginx 反向代理设置Kibana4,到目前为止取得了部分成功。这是我与 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果我去http://localhost:82/kibana4/我会得到Not Found 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

它启动代理到kibana.docker主机,但问题是所有 URL 都被重写到同一个 kibana 加载页面。它会导致无法正确加载任何 CSS 或 JavaScript 文件。

我的问题是:有人知道这里有什么问题吗?有没有人从不同于服务器根位置的位置成功运行 Kibana4?我会很感激你的帮助。

Szy*_*iak 2

谢谢高清。对于我上一篇文章下面的问题 - 这非常有启发性。它帮助我意识到问题所在。我总是忘记位置部分也传递给代理,这就是为什么在我的情况下必须重写它。正确的配置应该是这样的:

  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;
  }
Run Code Online (Sandbox Code Playgroud)

它还解释了为什么location /在没有rewrite零件的情况下设置可以正常工作。添加后rewrite,只有其余部分传递给代理,它的工作方式就像一个魅力。

再次感谢您,吸取教训:-)