• Traefik
  • Traefik: сервисы слушают запросы на портах, отличных от 80-го

Ранее мы рассмотрели, как прятать сервисы, которые слушают трафик на 80 порту, за traefik.
Однако, многие сервисы слушают другие порты (различные БД, Express.js, итд) и чтобы они были доступны через traefik, нам надо произвести некоторые изменения в файле docker-compose-nginx.yml.

В качестве примера рассмотрим наш контейнер nginx_2, а nginx_1 временно удалим (для экономии размера статьи):

Предположим, что конфигурация site_2.conf, которую мы прокидываем в контейнер nginx_2 следующая:

server {
    listen 8082;
    server_name site_2.example.com;

    location / {
        root /var/www/html;
        index index.html;
    }
}

А файл docker-compose-nginx.yml такой:

version: "3.7"

services:
  nginx_2:
    image: nginx:alpine
    volumes:
      - ./nginx/site_2.conf:/etc/nginx/conf.d/default.conf
      - ./nginx/index_2.html:/var/www/html/index.html
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.nginx_2.entrypoints=http"
      - "traefik.http.routers.nginx_2.rule=Host(`site_2.example.com`)"
      - "traefik.http.services.nginx_2.loadbalancer.server.port=8082"

Видим. что отличие заключается только в одной строке в секции labels:
- "traefik.http.services.nginx_2.loadbalancer.server.port=8082"

Она говорит traefik, что порт, который слушает приложение, это 8082.

Обращаю внимание, что пробрасывать порт в контейнере nginx_2 не надо. Не надо так же пробрасывать порт в контейнере traefik. У траефика в конфигурации остается только точка входа http, привязаная к 80 порту (и при необходимости https - 443).
    ports:
      - "80:80"
    command:
      - "--entrypoints.http.address=:80"
      - прочие команды

Таким образом, чтобы попасть на сайт site_2.example.com, который находится в контейнере nginx_2 и слушает порт 8082, нам надо зайти на сайт по 80 порту (одна из двух точек входа - entrypoints - http), а traefik сам перенаправит запросы на нужный порт.

antifreeze изменил(а) название на "Traefik: сервисы слушают запросы на портах, отличных от 80-го".