Сьогодні розбираємо дуже типовий, але підступний кейс - той самий “Too many redirects” після деплою через NGINX.
На перший погляд - нічого страшного, але коли бачиш це на проді в 2 ночі - одразу хочеться знайти винного (спойлер: часто це не дев, а конфіг).
Чому не (A) Проблема з SSL-сертифікатом
Якби би справа була у SSL, ви б побачили “SSL handshake failed” або “certificate verify failed”, а не безкінечні редіректи.
SSL тут ні до чого, він або працює, або ні. А от редіректи це логіка, не шифрування)
Чому не (D) Помилка у порті proxy_pass
Якщо був би неправильний порт, то запит просто не дійшов би - NGINX би повернув 502 Bad Gateway або connection refused.
А тут все навпаки: сайт живий, просто крутиться по колу)
І не зовсім (B) тільки NGINX редіректить http → https
Сам по собі такий редірект - нормальна практика.
Але коли і NGINX, і бекенд роблять однаковий редірект, то починається весела петля)
І чому саме правильна відповідь: C - подвійний редірект
Оце якраз той випадок, коли обидві сторони занадто старалися
NGINX каже: “Я тебе зараз гарно переведу на https”,
а бекенд каже: “О, я теж переведу, бо безпека понад усе!”
І все браузер біжить по колу, доки не здається
Виглядате це бути в логах шось типо такого
Client → http://ваш.com
↓ 301 Redirect
NGINX → https://ваш.com
↓ 301 Redirect
Backend → https://ваш.com
↓ 301 Redirect
NGINX знову → https://ваш.com
і так по колу(
Це можно також перевірити - принцепі яб сказав легко
Робите
curl -I -L http://site.com
І якщо бачиш купу 301/302, і вони цикляться між http та https - bingo
Або моєно подивитися конфіг у
/etc/nginx/sites-enabled/default
(або свій site.conf).
Якщо там побачите шось типо
return 301 https://$host$request_uri;
і при цьому бекенд ще раз редіректить - ось твій баг.
Що я маю вам сказать)
Коли бачите “Too many redirects” - не лізьте одразу в браузер або бекенд.
Спочатку curl -v, дивитесь Location-заголовки, і за 10 секунд бачиш, хто з сервісів зайвий герой)
Хто з першого разу вгадав - респект)
А якщо ні - тепер, коли почуєте “Too many redirects”, у голові одразу спалахне: ага, подвійний https, бачу тебе)
Обняв 🤗🤗🤗