【发布时间】:2021-05-26 22:45:30
【问题描述】:
我想使用 Docker (docker-compose) 在 Traefik 反向代理后面将 Nginx 作为静态文件服务器运行。
docker-compose.yml
version: '3.8'
services:
traefik:
image: traefik
command:
- --entrypoints.web.address=:80
- --providers.docker
- --providers.docker.exposedbydefault=false
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
nginx:
build: ./docker/dev/nginx/.
labels:
- traefik.enable=true
- traefik.http.routers.nginx.entrypoints=web
- traefik.http.routers.nginx.rule=PathPrefix(`/static`) || PathPrefix(`/media`) || Path(`/robots.txt`) || Path(`/favicon.ico`)
- traefik.http.services.nginx.loadbalancer.server.port=80
nginx.conf
server {
listen 80;
listen [::]:80;
...
}
而且它有效,
但是当我尝试将内部 nginx 端口更改为另一个时,比如说 8082,Traefik 返回 502 错误并在调试日志中打印'502 Bad Gateway' caused by: dial tcp 172.21.0.6:8082: connect: connection refused"。
我的意思是改变端口:
- 在 docker-compose.yml 中将
traefik.http.services.nginx.loadbalancer.server.port=80替换为traefik.http.services.nginx.loadbalancer.server.port=8082 - 将 nginx.conf 中的
listen 80; listen [::]:80;替换为listen 8082; listen [::]:8082;
我在配置中有其他应用程序,例如在 gunicorn 服务器上运行的 Django。 gunicorn 监听 3000 端口没有问题,Traefik 可以将传入的 :80 请求转发到 :3000。 为什么它不能与 nginx 一起使用?
【问题讨论】: