web-dev-qa-db-ja.com

場所/ kibana4 /を使用するKibana4 + nginxリバースプロキシ=見つかりません404

私は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;
  }
}

その場合、http://localhost:82/kibana4/にアクセスすると、Not Found 404が表示されます

ただし、location /kibana4/location /に置き換えると、すべてが正常に機能します。もちろん、その場合、URLはhttp://localhost:82に変更されます。

同様の問題に関連する他のトピックがいくつか見つかりました。例:

ウェブディレクトリの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を正常に実行できる人はいますか?よろしくお願いします。

5
Szymon Stepniak

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;
  }

また、rewriteの部分がない場合にlocation /設定が正しく機能する理由についても説明します。 rewriteを追加すると、残りの部分のみがプロキシに渡され、チャームのように機能します。

もう一度ありがとう、学んだ教訓:-)

2
Szymon Stepniak

パーティーには遅れましたが、Apacheが見つからないため、満足できる解決策をここに残したいと思いました。私のサブディレクトリからのプロキシを機能させたのは、ProxyPassディレクトリの後に末尾のスラッシュを追加することでした。

ProxyPass /kibana/ http://localhost:5601/
ProxyPassReverse /kibana/ http://localhost:5601/

こちらをご覧ください:

http://www.marathon-studios.com/blog/solved-kibana-5-not-loading-404ing-when-reverse-proxying-in-a-subdirectory/

1
MarathonStudios

Kibana 6.3以降、設定は kibana.yml で利用可能になりました

server.Host: "example.com"
server.basePath: "/tools/kibana"
server.rewriteBasePath: true

これは http://example.com/tools/kibana でアプリを提供し、Kibana UIのすべてのリンクを含みます

0
Dog