Как можно интегрировать Traefik, работающий в Docker, с Nginx, установленным на хостовой машине?

Как можно настроить систему так, чтобы nginx на хосте мог работать одновременно с сервисом, который использует Docker и пытается занять порты 80 и 443?
  • 10 ноября 2024 г. 17:33
Ответы на вопрос 2
Интеграция Traefik, работающего в Docker, с Nginx на хост-машине требует определенной настройки, чтобы избежать конфликта портов и обеспечить правильную маршрутизацию трафика. Следующий подход позволит вам использовать Nginx и Traefik одновременно.

### Шаги для интеграции Traefik и Nginx:

1. **Настройка Nginx для работы с обратным прокси**
   - Проверьте, что Nginx настроен на один из других портов (например, 8080) или используйте для него виртуальные хосты. Пример конфигурации для Nginx:
   
   ```nginx
   server {
       listen 8080;
       server_name example.com;

       location / {
           proxy_pass http://localhost:8000;  # Здесь ваш сервис на Docker, использующий Traefik
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;
       }
   }
   ```

2. **Настройка Traefik в Docker**
   - Поскольку Traefik управляет маршрутизацией, вам нужно убедиться, что он слушает на портах 80 и 443, но не конфликтует с Nginx. Если вы используете стандартные порты, определите, чтобы Traefik не конфликтовал с работающим на хост- машине Nginx. Пример конфигурации `docker-compose.yml` для Traefik:
   
   ```yaml
   version: '3.7'

   services:
     traefik:
       image: traefik:v2.5
       command:
         - "--api.insecure=true"
         - "--providers.docker=true"
         - "--entrypoints.web.address=:80"
         - "--entrypoints.websecure.address=:443"
       ports:
         - "80:80"
         - "443:443"  # перенаправьте на эти порты, если они свободны
       volumes:
         - "/var/run/docker.sock:/var/run/docker.sock"
   ```

   Если вы хотите перенарисовать Nginx на другой порт, например, на 8080, измените конфигурацию Traefik, чтобы он не занимал эти порты. В противном случае оставьте настройки Traefik как есть.

3. **Перенаправление трафика через Nginx**
   - Теперь настройте Nginx как обратный прокси, который направляет трафик на сервисы, работающие через Traefik в Docker, либо напрямую, либо через его API (как это показано выше).

4. **Настройка DNS и SSL**
   - Убедитесь, что ваши DNS записи настроены на Nginx, чтобы он корректно маршрутизировал трафик для домена. Из-за использования Nginx в качестве прокси, вы можете удерживать SSL на уровне Nginx или позволить Traefik управлять сертификатами.

5. **Тестирование конфигурации**
   - После настройки протестируйте конфигурацию, запустив все сервисы, и убедитесь, что запросы к `http://example.com` корректно обрабатываются вашим Nginx сервером, который затем перенаправляет их к соответствующим сервисам, работающим через Traefik.

### Заключение
С такой настройкой у вас будет гибкость использования Nginx для дополнительных правил, кэша или других функций, а также возможности Traefik для маршрутизации и управления микросервисами в Docker.
1. Не делайте expose port для докер контейнера 
2. Не запускайте контейнер с network=host
и ваш контейнер не будет занимать порты nginx.
Похожие вопросы