
Мне нужно запустить 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