反向代理到本地容器

反向代理到本地容器

我需要在 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

相關內容