ローカルコンテナへのリバースプロキシ

ローカルコンテナへのリバースプロキシ

特定のドメインとリンクで 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

2つの点を変更する必要があります。まず、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 番目の引数も末尾の / で終わる必要があります。その逆も同様です。そうしないと、バックエンドへのリクエストで必要なスラッシュがいくつか欠落し、期待どおりの結果が得られない可能性があります。

答え2

ServerNameは のままですsomesite.com。Apacheは依然としてそれをベースURLとして期待しているからです。URLが の場合、somesite.com/kafkaリダイレクトする必要があります。http://127.0.0.1:9099/

結論としては、2番目の設定は、ServerName somesite.com

関連情報