docker - Traefik 与 nginx 容器

标签 docker nginx docker-compose traefik

我花了很多时间,但没有找到任何解决方案。 我已经设置了 Traefik 和 nginx 容器,这是我的 docker-compose.yml

version: '3'
networks:
  proxy:
    external: true
  internal:
    external: false
services:
  mysql:
    image: 'mysql:5.7'
    environment:
      MYSQL_ROOT_PASSWORD: null
    networks:
      - internal
    labels:
      - traefik.enable=false
  adminer:
    image: 'adminer:latest'
    labels:
      - traefik.backend=adminer
      - 'traefik.frontend.rule=Host:db-admin.xxxx.xyz'
      - traefik.docker.network=proxy
      - traefik.port=8080
    networks:
      - internal
      - proxy
    depends_on:
      - mysql
  portainer:
    image: portainer/portainer
    networks:
      - internal
      - proxy
    labels:
      - "traefik.frontend.rule=Host:portainer.xxxx.xyz"
      - "traefik.port=9000"
      - "traefik.backend=portainer"
      - traefik.docker.network=proxy
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    restart: unless-stopped
  Nginx-Pro:
    image: nginx:latest
    container_name: Nginx-Pro
    labels:
      - traefik.backend=Nginx-Pro
      - traefik.frontend.rule=Host:new.xxxx.fr
      - traefik.docker.network=proxy
      - "traefik.port=80"
      - "traefix.port=443"
      - "traefik.frontend.entryPoints=http"
    networks:
      - internal
      - proxy
    depends_on:
      - mysql
    volumes:
      - /var/www/nginx-pro/:/var/www/
      - /etc/nginx/nginx-pro/:/etc/nginx

所以我还在/etc/nginx/sites-enabled 中的服务器上设置了虚拟主机 我还向 traefik conf 添加了日志,但没有任何结果。

这是我的虚拟主机配置:

server {
        listen *:80;
        root /var/www/new.xxx.fr;

        # Add index.php to the list if you are using PHP
        index index.php index.html index.htm index.nginx-debian.html;

        server_name new.xxx.fr www.new.xxx.fr;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                                try_files $uri $uri/ /index.php?$args;
        }

        location ~ /\.ht {
                deny all;
        }
}

问题是我总是收到来自 Traefik 的 Bad Gateway 消息。

最佳答案

您需要添加 traefik.frontend.passHostHeader,以便 nginx 可以将 Host header 与 server_name 进行匹配。

但由于此 nginx 仅适用于您已与 traefik.frontend.rule=Host:new.xxxx.fr 匹配的一个域,您也可以保留 server_name脱离 nginx 虚拟主机配置并使用默认配置。

同时删除"traefix.port=443",因为您只在traefik和nginx之间使用http,您想要的是"traefik.frontend.entryPoints=http,https" >,您还可以添加“traefik.frontend.headers.SSLRedirect=true”以始终将http重定向到https。

关于docker - Traefik 与 nginx 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48901273/

相关文章:

mysql - mbind : Operation not permitted when connecting with sequel pro

node.js - 如何使用 Docker 将带有 cron 作业的 NodeJS 应用程序容器化?

python - 如何将 PyCharm 连接到位于 Docker 容器内的 python 解释器?

docker - 如何以编程方式监控 docker 容器是否退出?

php - 更改 php.ini 似乎没有效果

nginx - Certbot (letsencrypt) 无法打开文件站点启用/默认

python - uWSGI、nginx、django unix 套接字不工作

docker - 如何制作Network_Mode : "host" work in docker-compose. yml文件

docker - Bundler::GemNotFound:在任何源中都找不到 rake-12.3.2

通过 nginx 代理的 Docker 环境导致 502 Bad Gateway