Как правильно настроить SSL Terminator при использовании Traefik и Nginx вместе?

Как правильно настроить расшифровку SSL-входящего трафика на сайте terminator.example.com при помощи Traefik, чтобы Nginx, находящийся за Traefik, получал только незашифрованные данные? Включите в ответ необходимые указания по конфигурации в файле docker-compose.yml.
  • 16 октября 2024 г. 3:43
Ответы на вопрос 2
Для настройки SSL Terminator с использованием Traefik и Nginx, вам потребуется правильно зарегистрировать SSL-сертификаты на Traefik и настроить проксирование на Nginx. Ваша конфигурация должна позволять Traefik расшифровывать входящий SSL-трафик и проксировать его к Nginx в незашифрованном виде.

Вот пошаговая инструкция, как это сделать:

### Шаг 1: Структура Docker-Compose

Предположим, что у вас уже есть Docker и Docker Compose, установленные на вашем сервере. Ваша структура каталогов и файлов может выглядеть следующим образом:

```
/project-directory
  ├── docker-compose.yml
  ├── traefik
  │   └── traefik.yml
  └── nginx
      └── nginx.conf
```

### Шаг 2: Конфигурация Traefik

Создайте файл `traefik.yml` для конфигурации Traefik. Вот пример:

```yml
# traefik/traefik.yml
entryPoints:
  web:
    address: ":80"
  websecure:
    address: ":443"

providers:
  docker:
    exposedByDefault: false

certificatesResolvers:
  myresolver:
    acme:
      email: [email protected]
      storage: /acme.json
      httpChallenge:
        entryPoint: web
```

### Шаг 3: Конфигурация Nginx

Создайте файл конфигурации Nginx `nginx.conf` с необходимыми настройками:

```nginx
# nginx/nginx.conf
server {
    listen 80;
    server_name terminator.example.com;

    location / {
        proxy_pass http://your_upstream_server:your_port; # Укажите ваш upstream сервер
        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;
    }
}
```

### Шаг 4: Docker-Compose

Теперь создайте файл `docker-compose.yml` с необходимыми сервисами:

```yml
version: '3.8'

services:
  traefik:
    image: traefik:v2.9
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myresolver.acme.email=your-email@example.com"
      - "--certificatesresolvers.myresolver.acme.storage=/acme.json"
      - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "./traefik:/acme.json"
  
  nginx:
    image: nginx:latest
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.nginx.rule=Host(`terminator.example.com`)"
      - "traefik.http.routers.nginx.entrypoints=websecure"
      - "traefik.http.routers.nginx.tls=true"
      - "traefik.http.routers.nginx.tls.certresolver=myresolver"
    networks:
      - web

networks:
  web:
```

### Шаг 5: Запуск

Теперь, находясь в каталоге вашего проекта, запустите следующий команды, чтобы развернуть сервисы:

```bash
docker-compose up -d
```

### Заметки:

1. Не забудьте заменить `[email protected]` на ваш реальный email, который будет использоваться для получения уведомлений о сертификатах.
2. Убедитесь, что ваш DNS настроен правильно на `terminator.example.com`, указывая на ваш сервер.
3. Убедитесь, что файл `acme.json` создан и имеет правильные разрешения (чтобы Traefik мог записывать туда данные). Вы можете создать его через команду:
   ```bash
   touch traefik/acme.json
   chmod 600 traefik/acme.json
   ```

Теперь, когда вы откроете `https://terminator.example.com`, Traefik будет обрабатывать SSL и передавать незашифрованный трафик на Nginx.
Вопрос решен. 

- "traefik.http.routers.terminator-router.entrypoints=websecure"  # Изменил на websecure
- "traefik.http.routers.terminator-router.tls=true"  # Включил TLS
Похожие вопросы