Как настроить надежный HTTPS-прокси с Docker, Nginx и Let's Encrypt
Если вы занимаетесь разработкой или администрированием веб-проектов, то наверняка сталкивались с задачей обеспечить безопасный доступ к своему сайту. Использование SSL-сертификатов — обязательное условие для защиты данных пользователей и повышения доверия к ресурсу. В этой статье я расскажу, как настроить полноценный HTTPS-прокси с помощью Docker, Nginx и бесплатных сертификатов от Let's Encrypt.
Почему именно Docker, Nginx и Let's Encrypt?
- - Docker упрощает развертывание и управление сервисами, делая инфраструктуру более гибкой и повторяемой.
- - Nginx — мощный веб-сервер и обратный прокси, идеально подходит для маршрутизации трафика и SSL-терминации.
- - Let's Encrypt — бесплатное и автоматизированное решение для получения и продления SSL-сертификатов.
Объединение этих технологий позволяет быстро и безопасно запускать веб-сервисы с автоматической поддержкой HTTPS.
Шаг 1: Установка Docker и Docker Compose
Если у вас еще не установлены Docker и Docker Compose, выполните их установку, следуя документам на официальных сайтах. Для Ubuntu это выглядит так:
``bash sudo apt update sudo apt install docker.io docker-compose ``
Убедитесь, что Docker работает:
``bash sudo systemctl start docker sudo systemctl enable docker ``
Шаг 2: Создание конфигурации Nginx с автоматическим получением сертификатов
Создайте папку для проекта:
``bash mkdir -p ~/nginx-proxy cd ~/nginx-proxy ``
В этой папке создайте файл docker-compose.yml:
```yaml version: '3'
services: nginx: image: nginx:latest container_name: nginx_proxy restart: always ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - ./certs:/etc/letsencrypt:ro - ./html:/usr/share/nginx/html depends_on: - certbot
certbot: image: certbot/certbot container_name: certbot volumes: - ./certs:/etc/letsencrypt - ./html:/usr/share/nginx/html entrypoint: "/bin/sh -c 'trap exit TERM; while :; do sleep 12h & wait $${!}; done;'" ```
Затем создайте nginx.conf, где настроите прокси:
```nginx events {}
http { server { listen 80; server_name yourdomain.ru www.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 www.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; } } } ```
Замените yourdomain.ru на ваш реальный домен и укажите правильный backend.
Шаг 3: Получение SSL-сертификата через Certbot
Запустите контейнер Certbot для получения сертификата:
``bash docker-compose run --rm certbot certonly --webroot --webroot-path=/usr/share/nginx/html -d yourdomain.ru -d www.yourdomain.ru ``
После успешного получения сертификатов, перезапустите контейнер Nginx:
``bash docker-compose up -d ``
Шаг 4: Автоматизация обновления сертификатов
Для автоматического продления сертификатов добавьте задачу в cron или настройте запуск Certbot через Docker с интервалом. Например, создайте cron-задание:
``bash 0 0,12 * * * docker-compose run --rm certbot renew && docker-compose restart nginx ``
Это обеспечит автоматическое продление сертификатов и перезапуск Nginx при необходимости.
Итог
Использование Docker, Nginx и Let's Encrypt — отличный способ быстро настроить безопасный HTTPS-прокси для своего сайта или сервиса. Такой подход позволяет автоматизировать все процессы, свести к минимуму ручную работу и обеспечить высокий уровень защиты данных.
Если у вас остались вопросы, напишите в комментариях или на форуме — я с удовольствием помогу вам разобраться!
Ключевые слова: docker nginx letsencrypt proxy, настройка nginx с ssl, автоматическое получение сертификатов, HTTPS через Docker
Оформите прокси под вашу задачу
IPv4, IPv6, Shared и MTProto — мгновенная выдача после оплаты, 24 гео-зоны, HTTPS и SOCKS5.
Перейти к заказу