Рейтинг:4

Балансировка нагрузки NGINX: имя вышестоящего ssl

флаг tr

У меня есть следующая конфигурация Nginx для балансировки нагрузки между разными узлами. Однако, когда я пытаюсь перенаправить трафик, я получаю 502 Неверный шлюз.

Прочитав журнал ошибок, я узнал, что проблема связана с тем, что мой балансировщик нагрузки Nginx пытается проверить действительность сертификата X509. НЕТ для различных узлов (backend1.example.com, backend2.example.com), но для имени восходящего потока backend.example.com (без номера), что приводит к ошибке, показанной ниже.

Как я могу указать nginx использовать имя хоста перенаправляемого узла вместо имени восходящего?

ЖУРНАЛ ОШИБОК:

SSL-сертификат восходящего потока не соответствует «backend.example.com», в то время как подтверждение SSL к восходящему потоку...

КОНФИГУРАЦИЯ:

вверх по течению backend.example.com {
   наименьшее_соединение;
   сервер backend1.example.com:443
   сервер backend2.example.com:443
}
сервер {

        слушать [::]:443 ssl ipv6only=on;
        слушать 443 ssl;
        имя_сервера пример.com;

        место расположения / {
                proxy_pass https://backend.example.com;

                proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
                proxy_ssl_session_reuse включено;
                proxy_ssl_verify включен;
                proxy_ssl_verify_depth 2;
                proxy_set_header Хост $host;
        }
    ssl_certificate /etc/letsencrypt/.../fullchain.pem; # под управлением Certbot
    ssl_certificate_key /etc/letsencrypt/.../privkey.pem; # под управлением Certbot
    включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot

}
Рейтинг:3
флаг in

Вам нужна директива ngx_http_proxy_module proxy_ssl_name

Вы можете решить эту проблему несколькими способами:

  1. Попробуйте установить его proxy_ssl_name $proxy_host;

  2. Используйте подстановочный ssl-сертификат.

  3. Если это во внутренней сети, используйте http-соединение для восходящего потока без избыточного двойного шифрования и разрешите http-соединение на восходящей стороне только с вашего обратного прокси-сервера.

  4. Поместите один и тот же восходящий сертификат на каждый узел и задайте для него одно ожидаемое имя. proxy_ssl_name backend.example.com;

AndreaCostanzo1 avatar
флаг tr
1. не работает, так как устанавливает `backend.example.com` 3. сеть не является частной, это основная причина шифрования между lb и внутренними узлами. Можете ли вы объяснить, как работать с подстановочными сертификатами? (Мне нужно сгенерировать его, а затем скопировать на каждый серверный узел. Можно ли это сделать напрямую через certbot?)
флаг in
попробуйте переименовать бэкэнд вверх по течению от имени полного доменного имени, например, просто «бэкэнд» `proxy_ssl_name $proxy_host; серверная часть proxy_pass; proxy_ssl включен; proxy_ssl_verify on;`
флаг in
да, вы можете выдать wildcard-сертификат непосредственно с помощью certbot, но с дополнительной проверкой, например, с помощью облачного факела dns, если вы его используете, попробуйте эту [статью] (https://idolsgate.com/blog/wildcard-SSL-certificate-with- letsencrypt-on-Centos-7/) у меня работает
AndreaCostanzo1 avatar
флаг tr
переименование не работает. Я думаю, что единственным доступным решением остается использование общего SSL-сертификата.
Рейтинг:1
флаг jp

Согласно с нгинкс разработчиков, вам необходимо использовать один и тот же сертификат TLS для всех внутренних серверов. См. следующий отчет об ошибке https://trac.nginx.org/nginx/ticket/1307#comment:5

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.