在路由上使用 nginx,在子域上使用 traefik
Use nginx on route and traefik for subdomain
如果我想使用 traefik 来代理对我的子域的请求并在我的根上使用 nginx,docker-compose 文件和 nginx 配置会是什么样子。
所以,我想提供一些静态文件来:domain.com 使用 nginx
但我希望 traefik 处理以下流量:app.domain.com、app2.domain.com
这是我的作曲家文件中的内容....
version: '3'
networks:
proxy:
external: true
internal:
external: false
services:
traefik:
image: traefik:alpine
ports:
- "8080:8080"
- "80:80"
- "443:443"
restart: always
labels:
- logLevel="DEBUG"
- "traefik.backend=monitor"
- "traefik.frontend.rule=Host:monitor.domain.com"
- "traefik.port=8080"
- "traefik.frontend.entryPoints=http,https"
- "traefik.enable=true"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "./traefik.toml:/traefik.toml"
- "./acme.json:/acme.json"
expose:
- "8080"
networks:
- internal
- proxy
custom-badge:
image: app
environment:
PORT: 3000
ports:
- "3000:3000"
labels:
- traefik.enabled=true
- traefik.backend=custom-badge
- traefik.frontend.rule=Host:app.domain.com
- traefik.docker.network=proxy
- traefik.port=3000
networks:
- internal
- proxy
server:
image: nginx:alpine
ports:
- "80:80"
labels:
- traefik.enabled=true
- traefik.backend=
- traefik.frontend.rule=domain.com
- traefik.docker.network=proxy
- traefik.port=80
volumes:
- "./apps/root:/etc/nginx/html:ro"
- "./nginx.conf:/etc/nginx/nginx.conf:ro"
environment:
- NGINX_HOST=domain.com
- NGINX_PORT=80
command: [nginx-debug, '-g', 'daemon off;']
depends_on:
- traefik
和我的nginx.conf
http {
server {
listen 80;
server_name domain.com www.domain.com;
location / {
proxy_pass domain.com:80/;
}
}
}
我收到端口冲突错误,我做错了什么?
您不能有两个服务 - traefik 和 nginx 使用相同的主机端口。
您必须只有一个服务侦听 80 端口。
我建议配置 traefik 来代理所有通信,并在缺少子域的情况下转发到 nginx - 我可以看到 - 你做到了。
要修复您的错误,只需从服务器 (nginx) 服务定义中删除端口部分。
如果我想使用 traefik 来代理对我的子域的请求并在我的根上使用 nginx,docker-compose 文件和 nginx 配置会是什么样子。
所以,我想提供一些静态文件来:domain.com 使用 nginx 但我希望 traefik 处理以下流量:app.domain.com、app2.domain.com
这是我的作曲家文件中的内容....
version: '3'
networks:
proxy:
external: true
internal:
external: false
services:
traefik:
image: traefik:alpine
ports:
- "8080:8080"
- "80:80"
- "443:443"
restart: always
labels:
- logLevel="DEBUG"
- "traefik.backend=monitor"
- "traefik.frontend.rule=Host:monitor.domain.com"
- "traefik.port=8080"
- "traefik.frontend.entryPoints=http,https"
- "traefik.enable=true"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "./traefik.toml:/traefik.toml"
- "./acme.json:/acme.json"
expose:
- "8080"
networks:
- internal
- proxy
custom-badge:
image: app
environment:
PORT: 3000
ports:
- "3000:3000"
labels:
- traefik.enabled=true
- traefik.backend=custom-badge
- traefik.frontend.rule=Host:app.domain.com
- traefik.docker.network=proxy
- traefik.port=3000
networks:
- internal
- proxy
server:
image: nginx:alpine
ports:
- "80:80"
labels:
- traefik.enabled=true
- traefik.backend=
- traefik.frontend.rule=domain.com
- traefik.docker.network=proxy
- traefik.port=80
volumes:
- "./apps/root:/etc/nginx/html:ro"
- "./nginx.conf:/etc/nginx/nginx.conf:ro"
environment:
- NGINX_HOST=domain.com
- NGINX_PORT=80
command: [nginx-debug, '-g', 'daemon off;']
depends_on:
- traefik
和我的nginx.conf
http {
server {
listen 80;
server_name domain.com www.domain.com;
location / {
proxy_pass domain.com:80/;
}
}
}
我收到端口冲突错误,我做错了什么?
您不能有两个服务 - traefik 和 nginx 使用相同的主机端口。
您必须只有一个服务侦听 80 端口。
我建议配置 traefik 来代理所有通信,并在缺少子域的情况下转发到 nginx - 我可以看到 - 你做到了。
要修复您的错误,只需从服务器 (nginx) 服务定义中删除端口部分。