2017-08-17 71 views
1

目標:Kibana 5.5.1後面的nginx代理1.13(dockerized)

我要運行的麋鹿在碼頭工人,集裝箱堆場。爲了能夠通過nginx代理訪問ELK棧來繞過服務的各個端口。

的Kibana服務(默認端口5601)

http://<server>.com:5601 

應該在以下地址到達:

http://<server>.com/kibana 

問題:

的問題是,它不是在將server.basePath設置添加到配置後,可能會到達kibana站點。如果我將Kibana的每個base api調用添加到nginx配置(/ api,/ ui,...),我只能調出服務。

配置:

爲Kib​​ana的配置:

/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泊塢窗圖像及以下泊塢窗,撰寫文件:

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" 
+0

究竟是什麼意思「問題是,在將server.basePath設置添加到配置後無法到達kibana站點」?瀏覽器中究竟發生了什麼? – whites11

+0

@ whites11:我在帖子中增加了更多信息。 – neutron

+0

第一件事就是''(我猜這是混淆)正確嗎?如果進入kibana碼頭集裝箱並運行'curl :5601',它是否正確響應? – whites11

回答

-1

首先,我們無論如何都會使用Nginx作爲反向代理,因此我們無法觸及Kibana。所以,你的溝server.basePath

下一頁改變以下

location /kibana/ { 
    proxy_pass http://<server>.com:5601/; 
} 

你的nginx配置喲,當你訪問http://<nginxhost>:<port>/kibana/xyz/abc什麼這意味着是。這相當於使用http://<server>.com:5601/xyz/abc。從您的系統

編輯-1

對於那些誰認爲這是行不通刪除任何複雜性,並非如此。這是我在發佈這個答案之前設置的示例測試用例。

events { 
    worker_connections 1024; 
} 
http { 
server { 
    listen 80; 

    location /test1 { 
    proxy_pass http://127.0.0.1:81; 
    } 

    location /test2 { 
    proxy_pass http://127.0.0.1:81/; 
    } 

    location /test3/ { 
    proxy_pass http://127.0.0.1:81; 
    } 

    location /test4/ { 
    proxy_pass http://127.0.0.1:81/; 
    } 

} 

server { 
    listen 81; 

    location/{ 
    echo "$request_uri"; 
    } 
} 
} 

現在的結果說明了所有4塊位置的塊

$ curl http://192.168.33.100/test1/abc/test 
/test1/abc/test 

$ curl http://192.168.33.100/test2/abc/test 
//abc/test 

$ curl http://192.168.33.100/test3/abc/test 
/test3/abc/test 

$ curl http://192.168.33.100/test4/abc/test 
/abc/test 
+1

這是不正確的,URL重寫不起作用。目標服務器生成的URL需要與瀏覽器要請求的內容兼容。 'server.basePath'正是爲此而設計的。 –

+0

@AndrewFerrier,我在發佈解決方案之前完成了我的研究。沒有必要投票決定不投票。請參閱編輯 –

+0

@TarunLalwani,是的,你說得對反向代理的邏輯和改寫但是:這是行不通的dockerized kibana我使用(如所述)。 只是可以肯定,我想你的配置,並在404這個結束,因爲與重定向/應用/ kibana,這將導致新的請求,nginx的與的.com /應用/ kibana 這就是爲什麼kibana響應有設置server.basePath。這將重定向更改爲的.com /「server.basePath值」 /應用程序/ kibana(或者它應該這樣做......) – neutron

0

我沒有完全按照你做同樣的部署之間的差異,但我使用的是dockerized kibana。

首先,你需要在你的nginx設置如下:

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

更改值根據您的環境,但最後的斜槓是至關重要的!不要刪除它們!他們確保重寫是按照Kibana的預期完成的 - 即,將kibana從去往kibana服務器的請求中的URL中刪除。

然後保持如下:

server.basePath: /kibana 
在kibana設置

。這可以確保kibana(鏈接和url)提供的文檔的前綴爲/kibana

它適用於我。