#Что означает и когда возникает ошибка
Нужно отличить заголовки ответа PHP-FPM от слишком длинного входящего Cookie: во втором случае чаще появляется 400, а не описанная 502. Простое увеличение лимитов PHP на загрузку файлов проблему не решает.
#Причины и как их различить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Велик заголовок ответа PHPПриложение отправляет много Set-Cookie или длинные значения заголовков. | 502 именно после входа или при запуске сессии, error.log указывает too big header. | Сократить ответные заголовки в приложении. |
| Мал fastcgi_buffer_sizeПервый буфер FastCGI не вмещает сформированные заголовки ответа. | После изменения авторизации, плагина или переменных выросла длина заголовков. | Точечно увеличить fastcgi_buffer_size после оценки. |
| Причина не в размерах заголовков502 вызывают недоступный сокет, падение PHP-FPM или нарушение протокола. | В error.log есть connect() failed, prematurely closed или другой текст, не too big header. | Диагностировать сокет/пул отдельно, не применять решение этой статьи. |
#Пошаговая диагностика и исправление
- Зафиксируйте точное сообщениеОткройте проблемный URL в безопасном тестовом сценарии и запишите время. По SSH найдите путь
error_logчерезsudo nginx -Tи посмотрите строки за этот интервал. Для данной инструкции ключевая фраза —upstream sent too big header while reading response header from upstream. Если её нет, не меняйте буферы; сначала разберите фактическую запись журнала. - Определите блок FastCGI, который обслуживает URLВыполните
sudo nginx -T 2>&1 | grep -nE "fastcgi_pass|fastcgi_buffer_size|fastcgi_buffers|server_name". Найдитеlocationдля PHP соответствующего сайта и убедитесь, что там именноfastcgi_passк PHP-FPM, а неproxy_passк HTTP-серверу. Дляproxy_passдействует другой параметрproxy_buffer_size; подменять ими друг друга нельзя. - Проверьте заголовки на тестовой копии запросаЕсли сайт доступен без риска для данных, в браузере откройте F12 → «Сеть», выполните действие и посмотрите заголовки ответа успешных похожих запросов. Особое внимание уделите количеству и длине
Set-Cookie,Locationи служебных заголовков. Не пересылайте cookie третьим лицам: они могут содержать действующие ключи сеанса. При статусе 502 Nginx может не показать клиенту исходные заголовки — тогда нужен журнал приложения. - Уберите из приложения лишние заголовкиПроверьте код входа/сессий и плагины, которые ставят повторные cookie или длинные JWT в заголовок. Для штатных идентификаторов сеанса храните сведения на сервере, а не огромные структуры в cookie. Сначала исправьте причину на тестовой площадке, затем повторите операцию: если 502 исчезла, конфигурацию Nginx можно не менять.
- При необходимости увеличьте только FastCGI-буферСохраните копию файла конфигурации реального сайта, затем в его блоке
locationсfastcgi_passдобавьтеfastcgi_buffer_size 32k;как пример, предварительно оценив размер заголовка и расход памяти. Не задавайте огромные значения во всех сайтах. Проверьтеsudo nginx -t; только если вывод сообщает, что тест успешен, выполнитеsudo systemctl reload nginx. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
- Проверьте результат и путь откатаЕщё раз войдите в приложение или откройте страницу, вызывавшую 502. Должен появиться нужный контент без 502, а в error.log не должно быть новой записи
too big header. Если ошибка сохранилась, верните файл из сделанной копии, запуститеsudo nginx -tиsudo systemctl reload nginx. Далее исследуйте размер заголовков и логи PHP, а не увеличивайте буфер вслепую.
#Проверка результата
Точный тест — ранее сбойный запрос возвращает правильный код и содержимое, а в журнале нет нового сообщения upstream sent too big header.
#Если проблема осталась
Сохраните дату, точный URL без паролей и токенов, код ответа, обезличенные строки error.log и access.log за это время и перечень уже сделанных изменений. Сравните работу при обращении через публичный адрес и через внутренний балансировщик, если он есть. Если причину пока не удалось подтвердить, восстановите исходную конфигурацию из копии и передайте эти сведения администратору или разработчику приложения; не меняйте несколько параметров одновременно.