Docker反向代理

问题描述 投票:0回答:1

我有一个网络应用程序的集合,每个程序都运行在自己的Docker容器中。我可以通过 http://localhost:9001比如说,我想通过远程访问它们。我想通过以下方式远程访问它们 https://site.example.com,而不是。我有一个通配符Let's Encrypt证书用于 example.com.

我知道我需要Apache来做从FQDN到Port的直接流量。所以我设置了一个 VirtualHost 下图)。正常的网络活动似乎可以正常工作。我可以正常浏览网站。

然而,当我尝试使用OAuth(例如BitBucket)登录时,我得到一个URI重定向不匹配的错误。当我在容器外运行时,这种情况不会发生。我认为我的Proxy设置有问题。有谁能告诉我如何纠正?

<VirtualHost *:443>
    ServerAdmin [email protected]
    ServerName site.example.com
    ServerSignature Off                                                                                                                        

    ProxyRequests Off                                                                                                                          
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:9001/
    ProxyPassReverse / http://127.0.0.1:9001/

    <IfModule mod_headers.c>
        Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
    </IfModule>

    SSLEngine On
    SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/fullchain.pem

    AllowEncodedSlashes NoDecode
</VirtualHost>
apache docker docker-compose reverse-proxy virtualhost
1个回答
1
投票

对于这样的用例。Traefik 是一个非常适应的工具。再加上 docker-compose你可以在同一个主机上设置多个docker容器,每个容器都有自己的端点。要远程访问它们,你只需要将远程主机的IP地址绑定到你所有的端点上(或者使用公共DNS来完成)。

下面是一个 docker-compose.yml 使用Traefik的例子。

version: "3"

services:
  traefik:
    image: traefik:latest
    command: --api --docker --logLevel=DEBUG
    ports:
      - "80:80"
      - "443:443"
      - "8082:8080"
    volumes:
      # So that Traefik can listen to the Docker events
      - /var/run/docker.sock:/var/run/docker.sock
    labels:
      - "traefik.enable=false"

  your_first_container:
    image: <YOUR_IMAGE>
    labels:
      - "traefik.frontend.rule=Host:site.example.com"
      - "traefik.port=9001"
© www.soinside.com 2019 - 2024. All rights reserved.