
我需要在 docker 上運行 Kafka,並在某些特定網域和連結上使用 Web UI,例如:
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
你必須改變兩件事。首先,您需要設定 kafka-ui 容器的基本 URL,您可以使用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
# ...
如果不這樣做,kafka-ui 產生的所有 URL 將從 開始/
,從而導致 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