Вопрос или проблема
Я хотел бы настроить балансировщик нагрузки Hetzner для своего сервера с приложением nginx. У меня следующая конфигурация. Балансировщик нагрузки Hetzner:
Исходный сервер с приложением nginx в качестве цели.
Конфигурация nginx:
server {
listen 80;
server_name www.test2.mydomain.com;
return 301 https://www.test2.mydomain.com$request_uri;
}
server {
listen 443 ssl http2;
server_name www.test2.mydomain.com;
root /var/www/my_projektpublic_html/web;
ssl_certificate /etc/letsencrypt/live/mydomain.com-0001/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mydomain.com-0001/privkey.pem;
ssl_dhparam /etc/nginx/ssl/dh2048.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:TLS:2m;
ssl_buffer_size 4k;
add_header Strict-Transport-Security "max-age=31536000;" always;
include "conf.d/server_ssl.conf";
include conf.d/live.conf;
include conf.d/php_fpm_status.conf;
access_log /var/log/nginx/nginx.log main;
error_log /var/log/nginx/nginx-error.log;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
}
- DNS A записи указывают на IP-адрес балансировщика нагрузки.
- Режим шифрования SSL/TLS — полный.
- Расширенные сертификаты Edge.
- Правило страницы в Cloudflare:
test2.mydomain.com/*
Перенаправление URL (код состояния: 301 - постоянное перенаправление, URL: https://www.test2.mydomain.com/$1)
Я получаю ошибку:
ERR_TOO_MANY_REDIRECTS
и SSL не работает должным образом, и httpstatus показывает ошибку 521.
Если я обхожу балансировщик нагрузки и отправляю трафик на исходный сервер, веб-сайт работает.
Я пытался отключить перенаправление на nginx, Cloudflare, но безуспешно. Ошибка та же.
Надеюсь, это поможет кому-то. SSL-соединение обрабатывается балансировщиком нагрузки, поэтому вы настраиваете SSL-сертификат напрямую в балансировщике нагрузки, так что в вашем nginx вы должны обрабатывать только обычное http-соединение, только блок сервера, слушающий на 80, удалить блок сервера на 443 и все определения, такие как пути или root, разместить в блоке на 80. Слишком много перенаправлений происходит потому, что вы пытаетесь перенаправить порт 80 на https и обратно на балансировщик нагрузки. Попробуйте и дайте мне знать. Должно быть что-то вроде:
server {
listen 80;
server_name www.test2.mydomain.com;
root /var/www/my_projektpublic_html/web;
}
Вы можете попробовать настроить в балансировщике нагрузки, подключив бэкэнд nginx непосредственно к порту 443, а не 80.
Ответ или решение
Ошибка ERR_TOO_MANY_REDIRECTS
является распространенной проблемой, с которой могут столкнуться веб-разработчики и системные администраторы при конфигурации серверов, особенно если в этой конфигурации участвуют прокси-серверы, такие как Hetzner Load Balancer и Cloudflare. В данном случае мы рассмотрим, как избежать этой проблемы, учитывая вашу архитектуру, состоящую из nginx, Hetzner Load Balancer и Cloudflare.
Понимание проблемы
Вы столкнулись с ошибкой ERR_TOO_MANY_REDIRECTS
, когда ваш сайт перенаправляет запросы между протоколами HTTP и HTTPS. Это происходит из-за конфликтов между настройками перенаправления на Load Balancer и на вашем сервере с nginx, а также возможных проблем с конфигурацией Cloudflare. Также ошибка 521 указывает на то, что сервер не отвечает на запросы, что может быть связано с неправильно настроенным шифрованием SSL.
Настройка Hetzner Load Balancer
-
SSL-сертификаты: Убедитесь, что SSL-сертификаты настроены на Hetzner Load Balancer, а не на вашем сервере nginx. Поскольку Load Balancer обрабатывает SSL-соединения, ваш nginx должен быть настроен только для работы с HTTP.
-
Перенаправление: Ваша текущая конфигурация nginx содержит перенаправление с HTTP на HTTPS. Это может вызвать циклы перенаправления, когда Load Balancer направляет HTTPS-запросы обратно на сервер, который снова перенаправляет их в HTTPS.
-
Настройка DNS: Убедитесь, что ваши DNS-записи правильно указывают на Load Balancer. A-записи должны указывать на IP-адрес Load Balancer Hetzner.
Изменения в конфигурации nginx
Ваша текущая конфигурация nginx имеет два блока серверов: один для HTTP и один для HTTPS. Чтобы избежать циклов перенаправления, вам следует значительно упsimplенить конфигурацию:
server {
listen 80;
server_name www.test2.mydomain.com;
root /var/www/my_projektpublic_html/web;
# Убедитесь, что просто обрабатывается HTTP трафик
# и не производится перенаправление на HTTPS
}
Удалите блок для HTTPS и все SSL-настройки из nginx, так как они будут обрабатываться Load Balancer.
Конфигурация Cloudflare
На стороне Cloudflare:
-
SSL/TLS Encryption Mode: Убедитесь, что режим шифрования установлен на
Full
илиFull (strict)
, если ваши сертификаты настроены правильно. -
Page Rules: Ваши правила перенаправления в Cloudflare могут оказывать влияние. Если вы перенаправляете HTTP на HTTPS в Cloudflare, это также может вызвать цикл перенаправлений. Рассмотрите возможность удаления или изменения правил, чтобы они не конфликтовали с правилами на Dockercontainer и настройки Load Balancer.
-
IPv6: Если у вас включен IPv6 в Cloudflare, убедитесь, что он также правильно настроен на вашем сервере.
Заключение
Ошибка ERR_TOO_MANY_REDIRECTS
в конфигурациях с Load Balancer и Cloudflare часто вызвана циклом перенаправлений между различными компонентами системы. Настройка Load Balancer для обработки SSL и упрощение конфигурации nginx до простого HTTP-сервера обычно решает проблему.
Если, несмотря на внесенные изменения, проблема сохраняется, обратите внимание на логи ошибок вашего nginx и Hetzner Load Balancer для дополнительной информации о том, что может вызывать проблему.