本地容器的反向代理

本地容器的反向代理

我需要在某些特定域和链接上使用 Web UI 在 docker 上运行 Kafka,例如:

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

相关内容