Frod

23.07.2026

docker nginx letsencrypt proxy

Frod — свобода без границ

Обеспечиваем безопасность и автоматизацию: как настроить Docker Nginx с Let's Encrypt для проксирования

В современном мире безопасность и удобство — два кита, на которых строится любой успешный веб-проект. Особенно для российских разработчиков и администраторов важно не только запускать сервисы, но и делать это безопасно, автоматизированно и без лишних хлопот. В этой статье я расскажу, как использовать Docker с Nginx, чтобы настроить обратный прокси и автоматически получать бесплатные SSL-сертификаты от Let's Encrypt.

Почему именно Docker, Nginx и Let's Encrypt?

  • Docker — это контейнеризация, которая позволяет запускать приложения в изолированном и управляемом окружении. Это удобно и надежно.
  • Nginx — мощный веб-сервер и обратный прокси, который отлично справляется с балансировкой нагрузки и маршрутизацией.
  • Let's Encrypt — бесплатный сертификатный центр, предоставляющий SSL-сертификаты с автоматическим обновлением.

Совместное использование этих технологий позволяет создать гибкую, безопасную и автоматизированную инфраструктуру.

Пошаговая настройка: от установки до автоматического обновления сертификатов

  1. Создаем Docker-композицию (docker-compose.yml)

Первое, что нужно — подготовить docker-compose.yml, где будет описано наше окружение.

version: '3'

services:
  nginx:
    image: nginx:latest
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - ./certs:/etc/letsencrypt:ro
      - ./html:/usr/share/nginx/html:ro
    networks:
      - proxy-network

  certbot:
    image: certbot/certbot
    container_name: certbot
    volumes:
      - ./certs:/etc/letsencrypt
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./html:/usr/share/nginx/html
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew --webroot -w /usr/share/nginx/html; sleep 12h & wait $${!}; done;'"
    networks:
      - proxy-network

networks:
  proxy-network:

Этот файл создаст два сервиса: Nginx и Certbot (клиент Let's Encrypt). Важно, что сертификаты сохраняются в общем каталоге (./certs), что позволяет их автоматически обновлять.

  1. Настраиваем конфигурацию Nginx

Создаем файл nginx/conf.d/yourdomain.conf с примерно таким содержанием:

server {
    listen 80;
    server_name yourdomain.ru;

    location /.well-known/acme-challenge/ {
        root /usr/share/nginx/html;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl;
    server_name yourdomain.ru;

    ssl_certificate /etc/letsencrypt/live/yourdomain.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.ru/privkey.pem;

    location / {
        proxy_pass http://your_backend_service:port;
        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;
    }
}

Этот конфиг перенаправляет все HTTP-запросы на HTTPS и использует SSL-сертификаты из Let's Encrypt.

  1. Получение сертификатов

Перед запуском убедитесь, что ваш домен правильно указывает на сервер. После этого выполните команду:

docker-compose run --rm certbot certonly --webroot -w /usr/share/nginx/html -d yourdomain.ru

Это инициирует получение сертификата. После успешного получения, при следующем запуске контейнеров, Nginx будет использовать сертификаты.

  1. Автоматизация обновления сертификатов

Благодаря тому, что в docker-compose.yml в контейнере certbot настроен цикл обновления, сертификаты будут автоматически обновляться каждые 12 часов. Не забудьте перезапустить Nginx после обновления сертификатов, чтобы изменения вступили в силу.

Для автоматической перезагрузки Nginx после обновления сертификатов добавьте в конфиг certbot команду перезапуска. Или сделайте отдельный скрипт.


Итог

Использование Docker + Nginx + Let's Encrypt — это надежный и современный способ обеспечить безопасность своего сайта. Всё автоматизировано, не требует постоянного вмешательства и позволяет сосредоточиться на развитии проекта.

Если вы хотите быстро запустить защищённый сайт или API, следуйте этим шагам — и всё получится. А если возникнут вопросы, всегда можно обратиться к сообществу или профильным форумам.


Ключевые слова: docker nginx letsencrypt proxy, автоматизация ssl, настройка обратного прокси, безопасность веб-сервиса, контейнеризация веб-приложений.