README: after Certbot, wire LE certs to nginx ssl_* and optional HTTP redirect

This commit is contained in:
PTah
2026-04-11 20:16:47 +10:00
parent 9af9797cd6
commit 18dc084c10
+42 -3
View File
@@ -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 — снова прокси, то сертификат Lets 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).