运行 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"

我的意思是更改端口:

我在配置中还有其他应用程序,例如 gunicorn 服务器上的 Django 运行ning。 gunicorn 监听 3000 端口没有问题,Traefik 将传入的 :80 请求转发到 :3000 没有问题。 为什么它不适用于 nginx?

你让nginx监听8082端口没问题,但是容器要暴露这个端口。 (我猜容器默认暴露80端口)

你似乎有一个自定义的 nginx 图像,所以你可以 add/replace 你的图像中的 EXPOSE 关键字有这样的东西:EXPOSE 8082.

您必须构建并重新启动容器以使更改生效,然后您可以使用 docker-compose ps 检查暴露的端口。