运行 Traefik 后面的 Nginx,端口不是 80 的问题
Running Nginx behind Traefik, problem with ports different than 80
我想 运行 Nginx 作为 Traefik 反向代理背后的静态文件服务器使用 Docker (docker-compose).
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 returns 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=8082
替换 traefik.http.services.nginx.loadbalancer.server.port=80
- 在 nginx.conf
中用 listen 8082; listen [::]:8082;
替换 listen 80; listen [::]:80;
我在配置中还有其他应用程序,例如 gunicorn 服务器上的 Django 运行ning。 gunicorn 监听 3000 端口没有问题,Traefik 将传入的 :80 请求转发到 :3000 没有问题。
为什么它不适用于 nginx?
你让nginx监听8082端口没问题,但是容器要暴露这个端口。 (我猜容器默认暴露80端口)
你似乎有一个自定义的 nginx 图像,所以你可以 add/replace 你的图像中的 EXPOSE 关键字有这样的东西:EXPOSE 8082
.
您必须构建并重新启动容器以使更改生效,然后您可以使用 docker-compose ps
检查暴露的端口。
我想 运行 Nginx 作为 Traefik 反向代理背后的静态文件服务器使用 Docker (docker-compose).
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 returns 502 错误并在调试日志中打印 '502 Bad Gateway' caused by: dial tcp 172.21.0.6:8082: connect: connection refused"
。
我的意思是更改端口:
- 在 docker-compose.yml 中用
- 在 nginx.conf 中用
traefik.http.services.nginx.loadbalancer.server.port=8082
替换 traefik.http.services.nginx.loadbalancer.server.port=80
listen 8082; listen [::]:8082;
替换 listen 80; listen [::]:80;
我在配置中还有其他应用程序,例如 gunicorn 服务器上的 Django 运行ning。 gunicorn 监听 3000 端口没有问题,Traefik 将传入的 :80 请求转发到 :3000 没有问题。 为什么它不适用于 nginx?
你让nginx监听8082端口没问题,但是容器要暴露这个端口。 (我猜容器默认暴露80端口)
你似乎有一个自定义的 nginx 图像,所以你可以 add/replace 你的图像中的 EXPOSE 关键字有这样的东西:EXPOSE 8082
.
您必须构建并重新启动容器以使更改生效,然后您可以使用 docker-compose ps
检查暴露的端口。