Решено: 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;
|