Обратный прокси-сервер для локального контейнера

Обратный прокси-сервер для локального контейнера

Мне нужно запустить Kafka на Docker с веб-интерфейсом на определенном домене И ССЫЛКЕ, например:

http://somesite.com/kafka

Я использую docker-compose.yml.

version: '3.3'
services:
  zookeeper:
    image: 'bitnami/zookeeper:latest'
    ports:
      - '2181:2181'
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
  kafka:
    image: 'bitnami/kafka:latest'
    ports:
      - '9092:9092'
    environment:
      - KAFKA_BROKER_ID=1
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
    depends_on:
      - zookeeper
  kafka-ui:
    image: 'provectuslabs/kafka-ui:latest'
    environment:
      - KAFKA_CLUSTERS_0_NAME=local
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092
      - KAFKA_CLUSTERS_0_ZOOKEEPER=zookeeper:2181
    depends_on:
      - kafka
    networks:
      - default
    ports:
      - '9099:8080'

Когда я настраиваю apache2по прямому домену kafka.somesite.com, все работает.

<VirtualHost *:80>
  ServerName kafka.somesite.com
  ProxyPreserveHost On
  ProxyPass / http://127.0.0.1:9099/
  ProxyPassReverse / http://127.0.0.1:9099/
</VirtualHost>

Но когда я пытаюсь установить домен по ссылке somesite.com/kafka, появляется только пустой экран.

<VirtualHost *:80>
  ServerName somesite.com
  ProxyPreserveHost On
  ProxyPass /kafka http://127.0.0.1:9099/
  ProxyPassReverse /kafka http://127.0.0.1:9099/
</VirtualHost>

Как сделать Kafka функциональным с помощью ссылки?

Спасибо.

решение1

Вам нужно изменить две вещи. Во-первых, вам нужно настроить базовый URL контейнера kafka-ui, вы можете сделать это с помощьюSERVER_SERVLET_CONTEXT_PATHпеременная окружения.

# ...
  kafka-ui:
    image: 'provectuslabs/kafka-ui:latest'
    environment:
      - KAFKA_CLUSTERS_0_NAME=local
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092
      - KAFKA_CLUSTERS_0_ZOOKEEPER=zookeeper:2181
      - SERVER_SERVLET_CONTEXT_PATH=/kafka
# ...

Если этого не сделать, все URL-адреса, сгенерированные kafka-ui, будут начинаться с /, в результате чего CSS, JavaScript и т. п. будут извлекаться из , /а не из /kafka/.

Затем вам необходимо адаптировать ProxyPassдирективу к этому пути:

ProxyPass /kafka/ http://127.0.0.1:9099/kafka/
ProxyPassReverse /kafka/ http://127.0.0.1:9099/kafka/

Всегда ProxyPassпроверяйте, совпадают ли конечные слеши,как отмечено в документации:

Если первый аргумент заканчивается завершающим /, второй аргумент также должен заканчиваться завершающим /, и наоборот. В противном случае полученные запросы к бэкэнду могут пропускать некоторые необходимые слеши и не давать ожидаемых результатов.

решение2

ServerName все еще должно быть somesite.com, потому что Apache все еще ожидает это как базовый URL. Когда URL это, somesite.com/kafkaон должен перенаправить его наhttp://127.0.0.1:9099/

В итоге вторая конфигурация должна работать, если вы установитеServerName somesite.com

Связанный контент