Предисловие
Дано 3 сервера, необходимо настроить балансировку и первичную установку сертификата.
Ubuntu 18.04 - (Loadbalancing HAProxy:443)
web1 - CentOS7 (nginx:80)
web2 - CentOS7 (nginx:80)
1) Когда мы запрашиваем новый сертификат, LetsEncrypt запрашивает файл авторизации (подобный URI /.well-known/acme-challenge/random-hash-here). Этот запрос будет выполняться через порт 80, так как пока нет установки сертификата. Итак, когда мы создаем новый сертификат, нам нужно, чтобы HAProxy слушал только порт 80 .
В конфиге должно быть пока вот это.
frontend my_haproxy
bind *:80
default_backend my_httpd_backend
########ACL for LE request##############
acl letsencrypt-acl path_beg /.well-known/acme-challenge/
use_backend letsencrypt-backend if letsencrypt-acl
# LE Backend
backend letsencrypt-backend
server letsencrypt 127.0.0.1:8888
backend my_httpd_backend
balance roundrobin
server web1 10.164.0.3:80 #внутр инт
server web2 10.156.0.2:80 #внутр инт
=====================================================================
2)получение сертификата через certbot
certbot certonly --standalone -d web.site.kz --non-interactive --agree-tos --email nurlan@sysadm.kz --http-01-port=8888
--standalone - создать автономный веб-сервер для прослушивания HTTP-запроса авторизации сертификата
-d web.site.kz - Домен, для которого мы создаем сертификат. Вы можете использовать несколько -dфлагов для нескольких доменов для одного сертификата. Домен (ы) должен быть отправлен на сервер, на котором мы создаем сертификат (для этого необходимо настроить DNS для домена).
--non-interactive --agree-tos --email admin@example.com - Сделайте это неинтерактивным, произнеся столько же, соглашаясь с TOS, и сообщите LetsEncrypt электронной почты, чтобы использовать для отправки уведомлений «YOUR CERT IS EXIRINGING».
--http-01-port=8888. Это говорит автономному серверу прослушивать порт 8888. Обратите внимание, что LetsEncrypt по- прежнему будет отправлять HTTP-запрос авторизации через порт 80. Однако слушатель ожидает прокси (например, нашего HAProxy-сервера) для маршрутизации запроса к нему через порт 8888 . Флаг http-01 потому, что он ожидает HTTPзапроса, а не HTTPSзапроса.
=====================================================================
3) т.к Haproxy видит сертификат только как единый файл, нам необходимо всё сконвертировать.
cat /etc/letsencrypt/live/web.site.kz/fullchain.pem /etc/letsencrypt/live/web.site.kz/privkey.pem | sudo tee /etc/ssl/web.site/web.site.pem
=====================================================================
4) В haproxy.cfg добавляем наш конфиг для лоадбалансинга на два веб-сервера.
frontend my_haproxy
bind *:80
default_backend my_httpd_backend
bind *:443 ssl crt /etc/ssl/web.site.kz/web.site.pem
########ACL for LE request##############
acl letsencrypt-acl path_beg /.well-known/acme-challenge/
use_backend letsencrypt-backend if letsencrypt-acl
# LE Backend
backend letsencrypt-backend
server letsencrypt 127.0.0.1:8888
backend my_httpd_backend
balance roundrobin
server web1 10.164.0.3:80 #внутр инт
server web2 10.156.0.2:80 #внутр инт
#============================================================
6) Также добавляем статистику для Haproxy, в haproxy.cfg в конец добавляем.
Статистика будет доступна в браузере: http://yourhost.kz:8000/haproxy_stats
listen stats # Define a listen section called "stats"
bind :8000 # Listen on localhost:9000
mode http
stats enable # Enable stats page
stats hide-version # Hide HAProxy version
stats realm Haproxy\ Statistics # Title text for popup window
stats uri /haproxy_stats # Stats URI
stats auth admin:password # Authentication credentials
7) Скрипт для автообновления в крон.
#!/usr/bin/env bash
# Renew the certificate
certbot renew --force-renewal --tls-sni-01-port=8888
#
bash -c "cat /etc/letsencrypt/live/web.site.kz/fullchain.pem /etc/letsencrypt/live/web.site.kz/privkey.pem > /etc/ssl/web.site.kz/web.site.kz.pem"
# Reload HAProxy
service haproxy reload
Дано 3 сервера, необходимо настроить балансировку и первичную установку сертификата.
Ubuntu 18.04 - (Loadbalancing HAProxy:443)
web1 - CentOS7 (nginx:80)
web2 - CentOS7 (nginx:80)
1) Когда мы запрашиваем новый сертификат, LetsEncrypt запрашивает файл авторизации (подобный URI /.well-known/acme-challenge/random-hash-here). Этот запрос будет выполняться через порт 80, так как пока нет установки сертификата. Итак, когда мы создаем новый сертификат, нам нужно, чтобы HAProxy слушал только порт 80 .
В конфиге должно быть пока вот это.
frontend my_haproxy
bind *:80
default_backend my_httpd_backend
########ACL for LE request##############
acl letsencrypt-acl path_beg /.well-known/acme-challenge/
use_backend letsencrypt-backend if letsencrypt-acl
# LE Backend
backend letsencrypt-backend
server letsencrypt 127.0.0.1:8888
backend my_httpd_backend
balance roundrobin
server web1 10.164.0.3:80 #внутр инт
server web2 10.156.0.2:80 #внутр инт
=====================================================================
2)получение сертификата через certbot
certbot certonly --standalone -d web.site.kz --non-interactive --agree-tos --email nurlan@sysadm.kz --http-01-port=8888
--standalone - создать автономный веб-сервер для прослушивания HTTP-запроса авторизации сертификата
-d web.site.kz - Домен, для которого мы создаем сертификат. Вы можете использовать несколько -dфлагов для нескольких доменов для одного сертификата. Домен (ы) должен быть отправлен на сервер, на котором мы создаем сертификат (для этого необходимо настроить DNS для домена).
--non-interactive --agree-tos --email admin@example.com - Сделайте это неинтерактивным, произнеся столько же, соглашаясь с TOS, и сообщите LetsEncrypt электронной почты, чтобы использовать для отправки уведомлений «YOUR CERT IS EXIRINGING».
--http-01-port=8888. Это говорит автономному серверу прослушивать порт 8888. Обратите внимание, что LetsEncrypt по- прежнему будет отправлять HTTP-запрос авторизации через порт 80. Однако слушатель ожидает прокси (например, нашего HAProxy-сервера) для маршрутизации запроса к нему через порт 8888 . Флаг http-01 потому, что он ожидает HTTPзапроса, а не HTTPSзапроса.
=====================================================================
3) т.к Haproxy видит сертификат только как единый файл, нам необходимо всё сконвертировать.
cat /etc/letsencrypt/live/web.site.kz/fullchain.pem /etc/letsencrypt/live/web.site.kz/privkey.pem | sudo tee /etc/ssl/web.site/web.site.pem
=====================================================================
4) В haproxy.cfg добавляем наш конфиг для лоадбалансинга на два веб-сервера.
frontend my_haproxy
bind *:80
default_backend my_httpd_backend
bind *:443 ssl crt /etc/ssl/web.site.kz/web.site.pem
########ACL for LE request##############
acl letsencrypt-acl path_beg /.well-known/acme-challenge/
use_backend letsencrypt-backend if letsencrypt-acl
# LE Backend
backend letsencrypt-backend
server letsencrypt 127.0.0.1:8888
backend my_httpd_backend
balance roundrobin
server web1 10.164.0.3:80 #внутр инт
server web2 10.156.0.2:80 #внутр инт
#============================================================
6) Также добавляем статистику для Haproxy, в haproxy.cfg в конец добавляем.
Статистика будет доступна в браузере: http://yourhost.kz:8000/haproxy_stats
listen stats # Define a listen section called "stats"
bind :8000 # Listen on localhost:9000
mode http
stats enable # Enable stats page
stats hide-version # Hide HAProxy version
stats realm Haproxy\ Statistics # Title text for popup window
stats uri /haproxy_stats # Stats URI
stats auth admin:password # Authentication credentials
7) Скрипт для автообновления в крон.
#!/usr/bin/env bash
# Renew the certificate
certbot renew --force-renewal --tls-sni-01-port=8888
#
bash -c "cat /etc/letsencrypt/live/web.site.kz/fullchain.pem /etc/letsencrypt/live/web.site.kz/privkey.pem > /etc/ssl/web.site.kz/web.site.kz.pem"
# Reload HAProxy
service haproxy reload
Комментариев нет:
Отправить комментарий