Выдержка из Wikipedia: ru.wikipedia.org/wiki/Список_кодов_состояния_HTTP#502
502 Bad Gateway - сервер в роли шлюза или прокси-сервера получил сообщение о неудачном выполнении промежуточной операции.
Из википедии DiPHOST: wiki.diphost.ru/Error502
Некоторые популярные программы написаны без соблюдения стандартов. При этом nginx служит неким фильтром "битых" запросов, чтобы избавить от обработки их внутренний уровень веб-системы. При невозможности передать запрос к apache, nginx выдаёт ошибку 502. Например, магазин PrestaShop хранит много информации в так называемых cookie, которые передаются в заголовках HTTP-запросов. По стандарту, они не могут превышать 4Kb. Однако PrestaShop игнорирует это ограничение. При попытке передать запрос с размером заголовков более 4Kb к apache, nginx выдаёт ошибку 502. Ошибка обнаруживается только просмотром специальных журналов, поскольку запрос не дошёл до apache, и устраняется установкой на страх и риск клиента конфигурации для сайта с "поправкой" на предел размера заголовков.
От себя:
В журнале nginx_error.log ошибка 502 обычно сопровождается записью типа upstream sent too big header while reading response header from upstream. Клиент может не знать, где смотреть лог и как в аккаунте хостинга сконфигурировать для сайта "поправку" на предел размера принимаемых заголовков. Тогда в шаблон index.tpl перед тегом body разумно добавить javascript автоматической чистки кукисов. Все по тому же стандарту, для одного значения path число куков не может быть больше 20, а их объем не должен превышать 4кб.
<script language="javascript">
// удаление
function eraseCookie (name) {
var date = new Date();
date.setTime(date.getTime() - 24 * 60 * 60 * 1000);
document.cookie = name + '=; expires=' + date.toGMTString() + '; path=/';
}
// чистка
function purgeCookie (count, size) {
var buf_size = 0;
var items = document.cookie.split(';');
for (var i = 0; i < items.length; i++) {
var name = items[i];
while (name.charAt(0) == ' ') name = name.substring(1, name.length);
buf_size += name.length;
if ((i > count) || (buf_size > size)) {
var offset = name.indexOf('=');
name = name.substring(0, offset);
eraseCookie(name);
}
}
}
// чистим кукисы, кроме первых 20 или превышающих 4кб
purgeCookie(20, 4096);
</script>