- Введение в Certbot и прокси-серверы
- Почему прокси создает проблемы для Certbot
- 4 рабочих метода настройки Certbot за прокси
- 1. Webroot Plugin + Проброс статики
- 2. DNS-валидация (DNS-01)
- 3. Проброс портов в Nginx
- 4. Docker-контейнеры с общими томами
- Пошаговая настройка для Nginx Reverse Proxy
- Интеграция с HAProxy
- Автоматизация обновления сертификатов
- Заключение
- Часто задаваемые вопросы (FAQ)
- Как проверить работу Certbot за прокси?
- Какие порты нужно открыть для Certbot?
- Как обновить сертификаты в Docker Swarm?
- Что делать при ошибке “Connection refused”?
- Подходит ли Certbot для enterprise-прокси?
Введение в Certbot и прокси-серверы
Certbot – автоматизированный инструмент для получения и обновления бесплатных SSL/TLS-сертификатов от Let’s Encrypt. При работе через прокси-сервер (Nginx, HAProxy, Apache Reverse Proxy) возникают уникальные сложности, связанные с пробросом портов и верификацией домена. В этом руководстве вы узнаете, как корректно настроить Certbot в инфраструктуре с прокси, обеспечив безопасное HTTPS-соединение без простоев.
Почему прокси создает проблемы для Certbot
Стандартный метод Certbot (standalone) использует порты 80 и 443 для проверки домена. Прокси-серверы блокируют эти порты, вызывая ошибки верификации. Основные сложности:
- Конфликт портов между прокси и Certbot
- Невозможность прямой валидации через HTTP-01 challenge
- Динамические IP в облачных средах
- Ограничения безопасности в Docker-контейнерах
4 рабочих метода настройки Certbot за прокси
1. Webroot Plugin + Проброс статики
Самый надежный способ. Certbot размещает валидационные файлы в директории, доступной прокси:
- Создайте каталог:
mkdir -p /var/www/letsencrypt
- Настройте прокси на обслуживание пути
/.well-known/acme-challenge
- Запустите:
certbot certonly --webroot -w /var/www/letsencrypt -d example.com
2. DNS-валидация (DNS-01)
Идеально для закрытых инфраструктур. Требует поддержки DNS-провайдера:
- Поддерживается Cloudflare, Route53, DigitalOcean
- Команда:
certbot certonly --dns-cloudflare -d *.example.com
- Не требует открытия портов
3. Проброс портов в Nginx
Временное перенаправление трафика:
location ^~ /.well-known/acme-challenge {
proxy_pass http://localhost:9080;
}
Запуск Certbot: certbot certonly --standalone --http-01-port 9080
4. Docker-контейнеры с общими томами
Для Docker Swarm/Kubernetes:
- Смонтируйте директорию сертификатов в контейнеры
- Используйте certbot-dns-плагины
- Автообновление через cron в sidecar-контейнере
Пошаговая настройка для Nginx Reverse Proxy
- Установите Certbot:
sudo apt install certbot python3-certbot-nginx
- Настройте базовый конфиг Nginx с блоком location для верификации:
server { listen 80; server_name example.com; location ^~ /.well-known/acme-challenge/ { root /var/www/letsencrypt; } }
- Получите сертификат:
sudo certbot certonly --webroot -w /var/www/letsencrypt -d example.com
- Добавьте SSL-конфигурацию в виртуальный хост
Интеграция с HAProxy
Схема работы:
- На отдельном сервере запустите Nginx для обработки ACME-запросов
- Перенаправляйте трафик от HAProxy:
frontend http-in acl acme path_beg /.well-known/acme-challenge/ use_backend acme if acme backend acme server acme-server 192.168.1.10:80
- Объедините сертификаты:
cat fullchain.pem privkey.pem > haproxy.pem
Автоматизация обновления сертификатов
Ключевые этапы:
- Добавьте в cron:
0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx"
- Для Docker: используйте официальный образ
certbot/certbot
с volume для certificates - Мониторинг через Prometheus и Grafana
Заключение
Настройка Certbot за прокси-сервером требует понимания механизмов ACME-валидации, но решается проверенными методами. Webroot-плагин и DNS-проверки – оптимальные решения для большинства сценариев. Регулярное обновление сертификатов обеспечит непрерывную защиту трафика без ручного вмешательства.
Часто задаваемые вопросы (FAQ)
Как проверить работу Certbot за прокси?
Используйте тестовый режим: certbot certonly --dry-run
. Проверьте доступность URL http://domain/.well-known/acme-challenge/test
через прокси.
Какие порты нужно открыть для Certbot?
Для HTTP-01: порт 80 (или кастомный порт в webroot-режиме). Для DNS-валидации открытие портов не требуется.
Как обновить сертификаты в Docker Swarm?
Используйте отдельный сервис с расписанием:
services:
certbot:
image: certbot/certbot
volumes:
- certs:/etc/letsencrypt
command: renew --webroot --webroot-path=/var/www/certbot
Что делать при ошибке “Connection refused”?
- Проверьте проброс портов в конфигурации прокси
- Убедитесь, что брандмауэр разрешает входящие подключения
- Для standalone-режима остановите веб-сервер перед запуском Certbot
Подходит ли Certbot для enterprise-прокси?
Да, при использовании DNS-валидации или выделенного ACME-сервера. Для критичных систем добавьте резервирование через дублирующие сертификаты.