Intereting Posts
как правильно указать IP для контейнера докеров Контейнер-докер не может быть найден с помощью завитка ng не работает в контейнере Docker Служба Docker не смогла построить: вернуть ненулевой код 1 Невозможно запустить $ (git rev-parse –short HEAD) в package.json на Virtualbox Как настроить Docker для связи по сети? Как использовать брандмауэр-докер с расширением переменной контейнера Почему вращение nginx в файле журнала Docker не происходит в файловой системе? Настройте сетевые интерфейсы хоста, на котором запущен контейнер докеров logout / login изнутри Vagrantfile Докер для контейнера для Windows не начинается с -m 4g, но отлично работает с -m 3g Создание нескольких изображений и запуск нескольких контейнеров Gitlab CI: Docker подключается к удаленному MySQL через SSH Portforwarding перед запуском тестов Enable Thrift в Докере Кассандры Может ли изображение докеры использовать исполняемый файл с хоста?

Kibana 5.5.1 за прокси-сервером nginx 1.13 (докеры)

Цель:

Я хочу запустить стек лося в контейнере докера. Чтобы иметь доступ к стеку ELK над прокси-сервером nginx для обхода отдельных портов для служб.

Служба Kibana (порт по умолчанию 5601)

http://<server>.com:5601 

должны быть доступны по следующему адресу:

 http://<server>.com/kibana 

Проблема:

Проблема в том, что невозможно добраться до сайта кибаны после добавления в конфигурацию параметра server.basePath. Я могу вызвать службу только в том случае, если я добавлю каждый базовый api-вызов Kibana в конфигурацию nginx (/ api, / ui, …).

Config:

Конфигурация для Kibana:

 /opt/kibana/config/kibana.yml 

Имеет следующие данные:

 server.host: "0.0.0.0" server.basePath: "/kibana" 

все остальное по умолчанию

Doku 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, ... для добавления в конфигурацию прокси.

Есть ли другое решение или версия?

Edit1: @ whites11: браузер возвращает 502 сайт Bad Gateway из nginx. Информация о браузере:

Генеральная

 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" 

Во-первых, нет никакого смысла касаться Кибаны, поскольку мы в любом случае будем использовать Nginx в качестве обратного прокси. Так что выпустите сервер server.basePath

Затем измените конфигурацию nginx ниже

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

Что это будет означать, когда вы http://<nginxhost>:<port>/kibana/xyz/abc к http://<nginxhost>:<port>/kibana/xyz/abc . Это было бы эквивалентно использованию http://<server>.com:5601/xyz/abc . Удаляет любую сложность из вашей системы

Edit-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