Reverse Proxy zum lokalen Container

Reverse Proxy zum lokalen Container

Ich muss Kafka auf Docker mit Web-Benutzeroberfläche in einer bestimmten Domäne UND einem bestimmten LINK ausführen, zum Beispiel:

http://somesite.com/kafka

Ich verwende dieses 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'

Wenn ich es apache2nach direkter Domäne einstelle kafka.somesite.com, funktioniert es.

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

Aber wenn ich versuche, die Domäne mit dem Link festzulegen somesite.com/kafka, wird nur ein leerer Bildschirm angezeigt.

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

Wie kann ich Kafka mit Link funktionsfähig machen?

Danke schön.

Antwort1

Sie müssen zwei Dinge ändern. Zunächst müssen Sie die Basis-URL des Kafka-UI-Containers konfigurieren. Dies können Sie mithilfe desSERVER_SERVLET_CONTEXT_PATHUmgebungsvariable.

# ...
  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
# ...

Wenn Sie dies nicht tun, beginnen alle von der Kafka-Benutzeroberfläche generierten URLs bei /, was dazu führt, dass CSS, JavaScript usw. von /statt von abgerufen werden /kafka/.

Dann müssen Sie die ProxyPassDirektive an diesen Pfad anpassen:

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

Stellen Sie ProxyPassimmer sicher, dass die abschließenden Schrägstriche übereinstimmen.wie in der Dokumentation angegeben:

Wenn das erste Argument mit einem abschließenden / endet, sollte das zweite Argument ebenfalls mit einem abschließenden / enden und umgekehrt. Andernfalls fehlen den resultierenden Anfragen an das Backend möglicherweise einige erforderliche Schrägstriche und liefern nicht die erwarteten Ergebnisse.

Antwort2

ServerName sollte immer noch sein somesite.com, da Apache dies immer noch als Basis-URL erwartet. Wenn die URL ist, somesite.com/kafkasollte sie umgeleitet werden zuhttp://127.0.0.1:9099/

Unterm Strich sollte die zweite Konfiguration funktionieren, solange SieServerName somesite.com

verwandte Informationen