README: ACME example for ubuntu1/ubuntu2 via Host on port 80
This commit is contained in:
@@ -232,7 +232,20 @@ sudo haproxy -c -f /etc/haproxy/haproxy.cfg
|
||||
1. На **пограничном роутере** разрешить с интернета **TCP 80** на IP хоста с HAProxy (или на тот хост, где будет отвечать ACME).
|
||||
2. В **`haproxy.cfg`** добавить отдельный **HTTP**-фронтенд на **80** и отправлять только путь проверки на бэкенд с ответом ACME (остальное — редирект на HTTPS, пустой ответ или отказ — по политике).
|
||||
|
||||
Черновик логики (пути и имена бэкендов подставьте свои):
|
||||
### Пример: два Ubuntu в LAN и HTTP-01 через один периметровый HAProxy
|
||||
|
||||
Допустим, во внутренней сети два сервера **Ubuntu**, для обоих нужны публичные имена и периодическое обновление сертификатов Let’s Encrypt по **HTTP-01**:
|
||||
|
||||
| Имя (снаружи) | Внутренний IP |
|
||||
|----------------|-----------------|
|
||||
| **ubuntu1.kalinamall.ru** | **192.168.160.90** |
|
||||
| **ubuntu2.kalinamall.ru** | **192.168.190.60** |
|
||||
|
||||
**DNS:** записи **A** для `ubuntu1.kalinamall.ru` и `ubuntu2.kalinamall.ru` должны указывать на **тот же публичный IP**, что и для остальных сервисов за HAProxy (чтобы запросы Let’s Encrypt пришли на **порт 80** этого хоста).
|
||||
|
||||
**На каждой Ubuntu:** поднимите **HTTP на порту 80** (nginx/apache) с корнем для **Certbot webroot** (`/.well-known/acme-challenge/…`) или используйте схему выпуска с **DNS-01**, если открывать 80 не хотите. Автообновление — **`certbot renew`** + **systemd timer** (или cron) **на соответствующей** машине.
|
||||
|
||||
**На HAProxy:** один фронтенд на **80**, маршрутизация по заголовку **Host** + путь ACME на разные бэкенды:
|
||||
|
||||
```text
|
||||
frontend fe_http
|
||||
@@ -240,18 +253,26 @@ frontend fe_http
|
||||
mode http
|
||||
option httplog
|
||||
acl path_acme path_beg /.well-known/acme-challenge/
|
||||
use_backend be_acme_http if path_acme
|
||||
acl host_u1 hdr(host) -i ubuntu1.kalinamall.ru
|
||||
acl host_u2 hdr(host) -i ubuntu2.kalinamall.ru
|
||||
use_backend be_acme_u1 if path_acme host_u1
|
||||
use_backend be_acme_u2 if path_acme host_u2
|
||||
http-request deny if !path_acme
|
||||
|
||||
backend be_acme_http
|
||||
backend be_acme_u1
|
||||
mode http
|
||||
# Пример: веб-корень Certbot на внутренней Ubuntu (nginx/apache или certbot webroot)
|
||||
server acme 192.168.x.x:80 check
|
||||
server u1 192.168.160.90:80 check
|
||||
|
||||
backend be_acme_u2
|
||||
mode http
|
||||
server u2 192.168.190.60:80 check
|
||||
```
|
||||
|
||||
Варианты без отдельного «полного» веб-сервера на бэкенде: **DNS-01** на той же Ubuntu; либо плагины/схемы, где HAProxy отдаёт challenge (требует отдельной настройки и обычно скриптов обновления).
|
||||
Let’s Encrypt при проверке обращается к **`http://ubuntu1.kalinamall.ru/.well-known/...`** или **`http://ubuntu2...`** — HAProxy по **Host** пересылает запрос на нужный внутренний **:80**, где локальный веб-сервер отдаёт файлы challenge.
|
||||
|
||||
После добавления `bind :80` обновите раздел **«Порты на фаерволе»** выше и проверку: `sudo haproxy -c -f /etc/haproxy/haproxy.cfg`.
|
||||
Варианты без проброса HTTP на две машины: на каждой Ubuntu **DNS-01** (порт 80 на периметре тогда не обязателен для этих сертификатов); либо **TLS-ALPN-01** по **443** (потребуется уже другая схема на HAProxy, не этот пример).
|
||||
|
||||
После добавления `bind :80` допишите в раздел **«Порты на фаерволе»** выше порт **80** и выполните `sudo haproxy -c -f /etc/haproxy/haproxy.cfg`.
|
||||
|
||||
## Лицензия
|
||||
|
||||
|
||||
Reference in New Issue
Block a user