docker nginx letsencrypt proxy


Как настроить Docker с Nginx и Let's Encrypt для автоматического получения SSL-сертификатов
В современном мире безопасность веб-приложений — не просто опция, а необходимость. Особенно, если вы развертываете сайты или API в контейнерах Docker. В этой статье я расскажу, как с помощью Docker, Nginx и Let's Encrypt организовать надежный proxy-сервер с автоматическим получением и обновлением SSL-сертификатов. Всё просто, понятно и без лишней воды.
Почему именно Docker, Nginx и Let's Encrypt?
- Docker позволяет изолировать ваши сервисы, делая их переносимыми и легко управляемыми.
- Nginx — мощный и гибкий веб-сервер, отлично выступает в роли reverse proxy.
- Let's Encrypt — бесплатный центр сертификации, который автоматизирует выдачу и обновление SSL-сертификатов.
Использование этих инструментов вместе — проверенное решение для обеспечения безопасности и высокой доступности ваших сайтов.
Основные шаги для настройки
- Создаем Docker-контейнер с Nginx
Для начала подготовим Dockerfile или используем официальный образ Nginx. В качестве примера возьмем готовый образ:
version: '3'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./certs:/etc/letsencrypt:ro
- ./html:/usr/share/nginx/html:ro
restart: unless-stopped
certbot:
image: certbot/certbot
volumes:
- ./certs:/etc/letsencrypt
- ./html:/usr/share/nginx/html
command: certonly --webroot --webroot-path=/usr/share/nginx/html -d example.ru -d www.example.ru --agree-tos --non-interactive --email admin@example.ru
- Настраиваем Nginx как proxy с поддержкой SSL
Создайте конфигурационный файл nginx.conf:
server {
listen 80;
server_name example.ru www.example.ru;
location /.well-known/acme-challenge/ {
root /usr/share/nginx/html;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name example.ru www.example.ru;
ssl_certificate /etc/letsencrypt/live/example.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.ru/privkey.pem;
location / {
proxy_pass http://your_app_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;
}
}
Эта конфигурация перенаправляет HTTP-запросы на HTTPS и использует сертификаты, полученные через Let's Encrypt.
- Автоматизация получения и обновления сертификатов
Для автоматического получения сертификатов используйте Certbot внутри Docker или на хосте. Можно настроить cron-задание для регулярного обновления сертификатов:
0 12 * * * docker run --rm -it -v $(pwd)/certs:/etc/letsencrypt certbot/certbot renew --webroot -w /usr/share/nginx/html
После обновления сертификатов потребуется перезапуск Nginx, чтобы он подхватил новые сертификаты.
Итог
Объединив Docker, Nginx и Let's Encrypt, вы получаете надежный и автоматизированный proxy-сервер с SSL, который легко масштабировать и управлять им. Такой подход — отличное решение для тех, кто ценит безопасность, удобство и современную инфраструктуру.
Если нужно, я могу подготовить более детальную инструкцию, добавить автоматизацию с Docker Compose или дать советы по безопасности.
Присоединиться к обсуждению
Комментариев пока нет.
Оставить комментарий