如何将多台主机从 traefik 2 定向到一台 nginx

Kwi*_*ies 3 php drupal nginx docker traefik

我想使用 traefik 2 将 test1.test 和 test2.test 路由到 nginx php 配置中的不同文件夹。两者都是 PHP 应用程序。

这是我的 nginx site.conf:

server {
    listen 80;

    server_name test1.test
    root /var/www/html/test1;
}
server {
    listen 80;

    server_name test2.test
    root /var/www/html/test2;
}
Run Code Online (Sandbox Code Playgroud)

这是 traefik 容器的 mij docker-compose 文件

version: "3"

services:
  traefik:
    image: "traefik:v2.3"
    container_name: "traefik"
    restart: "unless-stopped"
    security_opt:
      - no-new-privileges:true
    networks:
      - proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /etc/localtime:/etc/localtime:ro
      - ./traefik.toml:/traefik.toml:ro
      - ./acme.json:/acme.json
      - ./configurations:/configurations
networks:
  proxy:
    external: true
  internal:
    external: false
Run Code Online (Sandbox Code Playgroud)

以及我的应用程序的 docker-compose

version: "3"

services:
  nginx:
    image: nginx:latest
    container_name: test_nginx
    links:
      - php
    volumes:
      - ./nginx/server.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/site.conf:/etc/nginx/conf.d/default.conf:ro
      - ../../src:/var/www/html
    networks:
      - proxy
      - internal
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=proxy"
      - "traefik.http.routers.nginx.entrypoints=web"
      - "traefik.http.routers.nginx.rule=Host(`test1.test`) || Host(`test2.test`)"
  php:
    build: ./php
    container_name: test_php
    ports:
       - "9000:9000"
    volumes:
      - ../../src:/var/www/html
    networks:
      - internal
Run Code Online (Sandbox Code Playgroud)

我的主机文件已全部设置并指向本地主机(172.0.0.1)

但是,当浏览到 test1.local 时,它会给出 404 文件未找到,浏览到 test2.test 会给出 404 未找到 nginx。

我想做的基本上就是拥有一个 traefik2、一个 nginx 以及后面的多个 drupal 站点。

有人可以解释一下如何让 2 个主机指向同一个 nginx 并重定向到正确的文件夹吗?谢谢。

小智 10

更新您的标签

"traefik.http.routers.nginx.rule=Host(\`test1.test\`) || Host(\`test2.test\`)"
Run Code Online (Sandbox Code Playgroud)

"traefik.http.routers.nginx.rule=Host(\`test1.test\`,\`test2.test\`)"
Run Code Online (Sandbox Code Playgroud)