From 18dc084c10152afe992aba8f97a0f489a5c7166c Mon Sep 17 00:00:00 2001 From: PTah Date: Sat, 11 Apr 2026 20:16:47 +1000 Subject: [PATCH] README: after Certbot, wire LE certs to nginx ssl_* and optional HTTP redirect --- README.md | 45 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a774f57..f64239e 100644 --- a/README.md +++ b/README.md @@ -296,7 +296,48 @@ sudo haproxy -c -f /etc/haproxy/haproxy.cfg -d ubuntu1.kalinamall.ru \ --email admin@example.com --agree-tos --non-interactive ``` - При первом запуске можно убрать `--non-interactive`, чтобы согласиться с условиями в диалоге. Сертификаты появятся в `/etc/letsencrypt/live/<имя>/`. + При первом запуске можно убрать `--non-interactive`, чтобы согласиться с условиями в диалоге. + +**Где лежат файлы и что с ними делать (HTTPS в nginx)** + +После успешного `certbot certonly` каталог (симлинки) будет таким: + +- **`/etc/letsencrypt/live/ubuntu1.kalinamall.ru/`** — имя совпадает с **первым** `-d` в команде certbot (на второй машине — `ubuntu2...`). +- **`fullchain.pem`** — ваш сертификат **и** цепочка до Let’s Encrypt; его указывают в **`ssl_certificate`** (так браузеры доверяют сайту). +- **`privkey.pem`** — закрытый ключ; в **`ssl_certificate_key`**. Файлы в `archive/`, в `live/` — только ссылки; при **`certbot renew`** обновляются именно они, пути в nginx **менять не нужно**. + +Добавьте **второй** `server` для **HTTPS** (отдельный файл или тот же `acme-le.conf` ниже блока `:80`), подставив своё имя и корень сайта: + +```nginx +server { + listen 443 ssl http2; + listen [::]:443 ssl http2; + server_name ubuntu1.kalinamall.ru; + + ssl_certificate /etc/letsencrypt/live/ubuntu1.kalinamall.ru/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/ubuntu1.kalinamall.ru/privkey.pem; + + # Рекомендуемые параметры TLS (если пакет certbot их положил): + # include /etc/letsencrypt/options-ssl-nginx.conf; + # ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; + + root /var/www/html; + index index.html; + location / { + try_files $uri $uri/ =404; + } +} +``` + +Проверка и применение: + +```bash +sudo nginx -t && sudo systemctl reload nginx +``` + +Если **443** с интернета идёт **на эту же** Ubuntu (напрямую или отдельным пробросом с маршрутизатора), снаружи откройте **TCP 443** до неё. Если HTTPS терминирует только **HAProxy**, а до Ubuntu — снова прокси, то сертификат Let’s Encrypt на Ubuntu нужен **той службе**, которая реально открывает **TLS** на этой машине (или выпускайте сертификат на том узле, где крутится HTTPS). + +**Редирект HTTP → HTTPS на :80 (по желанию, после того как HTTPS завёлся):** в блоке `server` на **порту 80** оставьте **`location ^~ /.well-known/acme-challenge/`** как есть, а вместо `return 404` для **`location /`** поставьте **`return 301 https://$host$request_uri;`** — обновление сертификата по-прежнему идёт по **HTTP** на путь **`.well-known`**, остальное уходит на **https://**. 6. **Проверка автообновления** ```bash @@ -313,8 +354,6 @@ sudo haproxy -c -f /etc/haproxy/haproxy.cfg ``` Таймер **`certbot.timer`** по расписанию вызывает `certbot renew`; при обновлении сертификата выполняются hook’и из `renewal-hooks/deploy`. -Дальше на этой же машине можно настроить **HTTPS** для своих сервисов, указав в nginx `ssl_certificate` и `ssl_certificate_key` на файлы из `/etc/letsencrypt/live/<домен>/` (это уже отдельно от HAProxy, если TLS терминируется на Ubuntu). - #### Кратко: Apache вместо nginx 1. `sudo apt install -y apache2 certbot python3-certbot-apache` (или только `certbot` и webroot без плагина apache).