Решено: upstream sent too big header while reading response header from upstream, client

Решено: upstream sent too big header while reading response header from upstream, client Ошибка upstream sent too big header while reading response header from upstream, client
Иногда сайт недоступен и вы наблюдаете ошибку 502

Данная ошибка часто связана с тем, что nginx передал данные для apache, а тот не смог с ними справиться.

Но бывает и другое: когда apache работает нормально, и вся проблема с nginx.

Это легко проверить, просто откройте ваш сайт отдельно через порт nginx и отдельно через порт apache.
1
2
http://ваш-сайт:80/
http://ваш-сайт:81/
Если вы увидели, что сайт работает на порту 81 (или 8080 - смотря как настроено у вас), то заходим в логи nginx и смотрим в чем дело:
1
tail -f /var/log/nginx/error.log
И так видим:
1
upstream sent too big header while reading response header from upstream, client
Исправляется добавлением двух строк в конфиг Nginx, а именно в раздел http:
1
2
3
4
5
http {
.....
proxy_buffers 8 16k;
proxy_buffer_size 32k;
}
Ну и рестарт nginx:
1
/etc/init.d/nginx restart
Что же такое proxy_buffer_size и proxy_buffers?????????:
proxy_buffer_size - задаёт размер буфера, в который будет читаться первая часть ответа, получаемого от проксируемого сервера. В этой части ответа находится, как правило, небольшой заголовок ответа. По умолчанию размер одного буфера равен размеру страницы памяти. В зависимости от платформы это или 4K, или 8K, однако его можно сделать меньше.

proxy_buffers - задаёт число и размер буферов для одного соединения, в которые будет читаться ответ, получаемый от проксируемого сервера. По умолчанию размер одного буфера равен размеру страницы. В зависимости от платформы это или 4K, или 8K.

А если нормальными словами, то proxy_buffer_size предназначен для хранения, прочтенного с бэкэнда хидера:
1
2
proxy_buffer_size and fastgci_buffer_size set buffer to read the whole of
response header from backend or fastcgi server.
То есть, если Вы уже выставили 32к, а ошибка все равно появляется, то нужно тюнить дальше.

Если же просто увеличить 32к до 64к, то можно получить вот такую ошибку:
1
Restarting nginx: [emerg]: "proxy_busy_buffers_size" must be less than the size of all "proxy_buffers" minus one buffer in /etc/nginx/nginx.conf:34017
Итого, если указанных в самом верху настроек мало, корректируем так:
1
2
proxy_buffers 8 32k;
proxy_buffer_size 64k;
More
hit.ua: посетителей за сегодня