ERR_TOO_MANY_REDIRECTS (nginx + балансировщик нагрузки Hetzner + Cloudflare)

Вопрос или проблема

Я хотел бы настроить балансировщик нагрузки 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

  1. SSL-сертификаты: Убедитесь, что SSL-сертификаты настроены на Hetzner Load Balancer, а не на вашем сервере nginx. Поскольку Load Balancer обрабатывает SSL-соединения, ваш nginx должен быть настроен только для работы с HTTP.

  2. Перенаправление: Ваша текущая конфигурация nginx содержит перенаправление с HTTP на HTTPS. Это может вызвать циклы перенаправления, когда Load Balancer направляет HTTPS-запросы обратно на сервер, который снова перенаправляет их в HTTPS.

  3. Настройка 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:

  1. SSL/TLS Encryption Mode: Убедитесь, что режим шифрования установлен на Full или Full (strict), если ваши сертификаты настроены правильно.

  2. Page Rules: Ваши правила перенаправления в Cloudflare могут оказывать влияние. Если вы перенаправляете HTTP на HTTPS в Cloudflare, это также может вызвать цикл перенаправлений. Рассмотрите возможность удаления или изменения правил, чтобы они не конфликтовали с правилами на Dockercontainer и настройки Load Balancer.

  3. IPv6: Если у вас включен IPv6 в Cloudflare, убедитесь, что он также правильно настроен на вашем сервере.

Заключение

Ошибка ERR_TOO_MANY_REDIRECTS в конфигурациях с Load Balancer и Cloudflare часто вызвана циклом перенаправлений между различными компонентами системы. Настройка Load Balancer для обработки SSL и упрощение конфигурации nginx до простого HTTP-сервера обычно решает проблему.

Если, несмотря на внесенные изменения, проблема сохраняется, обратите внимание на логи ошибок вашего nginx и Hetzner Load Balancer для дополнительной информации о том, что может вызывать проблему.

Оцените материал
Добавить комментарий

Капча загружается...