Я настраиваю балансировщик нагрузки, который должен взаимодействовать с другими узлами с помощью TLS. Это важно, поскольку внутренние узлы не находятся в частной сети. Конфигурация приведена ниже.
В результате Nginx возвращает 502 Неверный шлюз, и Nginx, похоже, не может перенаправить на мои домены. Кроме того, поскольку я использую открытый источник версия, я не можем использовать решать ключевое слово внутри восходящей конфигурации. Как я могу изменить эту конфигурацию, чтобы Nginx шифровал данные между example.com -> backendX.example.com?
ВНИМАНИЕ: если я использую IP-адреса вместо URL-адресов в восходящем блоке, балансировка нагрузки работает, но я не думаю, что он зашифрован.
ОШИБКА:
*3 Ошибка проверки SSL-сертификата восходящего потока: (2: невозможно получить сертификат издателя) при установлении связи SSL с восходящим потоком, клиент: 0.0.0.0, сервер: lb.example.com
Результат openssl s_client -connect backend1.example.com
:
Цепочка сертификатов
0 s:CN = backend1.example.com
i:C = US, O = Let’s Encrypt, CN = R3
1 s:C = US, O = Let’s Encrypt, CN = R3
i:C = США, O = Исследовательская группа по безопасности в Интернете, CN = ISRG Root X1
2 s:C = США, O = Исследовательская группа по безопасности в Интернете, CN = ISRG Root X1
i:O = Digital Signature Trust Co., CN = DST Root CA X3
вышестоящий пример.com{
наименьшее_соединение;
сервер backend1.example.com;
сервер backend2.example.com;
}
сервер {
слушать [::]:443 ssl ipv6only=on;
слушать 443 ssl;
имя_сервера lb.example.com;
место расположения / {
прокси_пароль https://example.com;
proxy_ssl_trusted_certificate /etc/letsencrypt/.../chain.pem;
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
}
#### НГИНКС -Т
www-данные пользователя;
рабочие_процессы авто;
pid /run/nginx.pid;
включить /etc/nginx/modules-enabled/*.conf;
События {
worker_connections 768;
# multi_accept on;
}
http {
##
# Основные настройки
##
отправить файл включен;
tcp_nopush включен;
tcp_nodelay включен;
keepalive_timeout 65;
типы_хэш_макс_размер 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
преобразователь 8.8.8.8 8.8.4.4 действительный=30 с;
включить /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Настройки SSL
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Удаление SSLv3, ссылка: POODLE
ssl_prefer_server_ciphers включен;
##
# Настройки ведения журнала
##
журнал_доступа /var/log/nginx/access.log;
журнал_ошибок /var/log/nginx/error.log;
##
# Настройки Gzip
##
gzip включен;
# gzip_vary on;
# gzip_proxyed любой;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Конфигурации виртуального хоста
##
включить /etc/nginx/conf.d/*.conf;
включить /etc/nginx/sites-enabled/*;
}
вышестоящий пример.com{
наименьшее_соединение;
сервер backend1.example.com;
сервер backend2.example.com;
}
сервер {
слушать [::]:443 ssl ipv6only=on;
слушать 443 ssl;
имя_сервера lb.example.com;
место расположения / {
прокси_пароль https://example.com;
proxy_ssl_trusted_certificate /etc/letsencrypt/.../chain.pem;
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
}
сервер {
если ($ хост = lb.example.com) {
вернуть 301 https://$host$request_uri;
} # управляется Certbot
слушать 80 default_server;
слушать [::]:80 default_server;
имя_сервера lb.example.com;
вернуть 404; # под управлением Certbot
}
# файл конфигурации /etc/letsencrypt/options-ssl-nginx.conf:
# Этот файл содержит важные параметры безопасности. Если вы измените этот файл
# вручную, Certbot не сможет автоматически обеспечивать безопасность в будущем
# обновления. Вместо этого Certbot напечатает и зарегистрирует сообщение об ошибке с указанием пути к
# актуальный файл, на который вам нужно будет ссылаться при ручном обновлении
# этот файл.
общий ssl_session_cache: le_nginx_SSL: 10 м;
ssl_session_timeout 1440 м;
ssl_session_tickets выключен;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers выключен;
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA";
нгинкс -т
nginx: синтаксис файла конфигурации /etc/nginx/nginx.conf в порядке
nginx: проверка файла конфигурации /etc/nginx/nginx.conf прошла успешно