Upstream слишком большой - nginx + codeigniter

Я получаю эту ошибку от Nginx, но, похоже, не понимаю ее! Я использую codeigniter и использую базу данных для сеансов. Поэтому мне интересно, как заголовок может быть слишком большим. Есть ли способ проверить, что такое заголовок? или потенциально увидеть, что я могу сделать, чтобы исправить эту ошибку?

Дайте мне знать, если вам нужно, чтобы я размещал любые файлы conf или что-то еще, и я буду обновлять их по мере их запроса.

2012/12/15 11:51:39 [error] 2007#0: *5778 upstream sent too big header while reading response header from upstream, client: 24.63.77.149, server: jdobres.xxxx.com, request: "POST /main/login HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "jdobres.xxxxx.com", referrer: "http://jdobres.xxxx.com/"

UPDATE

Я добавил следующее в conf:

proxy_buffer_size   512k;
proxy_buffers   4 512k;
proxy_busy_buffers_size   512k;

И теперь я все еще получаю следующее:

2012/12/16 12:40:27 [error] 31235#0: *929 upstream sent too big header while reading response header from upstream, client: 24.63.77.149, server: jdobres.xxxx.com, request: "POST /main/login HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "jdobres.xxxx.com", referrer: "http://jdobres.xxxx.com/"

Ответ 1

Добавьте это в свой http {} файла nginx.conf, который обычно находится в /etc/nginx/nginx.conf:

proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;

Затем добавьте это в свой блок местоположения php, он будет находиться в вашем файле vhost для поиска блока, который начинается с location ~.php ${

fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;

Ответ 2

Измените конфигурацию nginx и измените/установите следующие директивы:

    proxy_buffer_size   128k;
    proxy_buffers   4 256k;
    proxy_busy_buffers_size   256k;

Ответ 3

Я доказал, что это также отправляется, когда передается недопустимый заголовок. Недопустимые символы или форматирование заголовков HTTP, истечение срока действия cookie, заданных более чем на месяц, и т.д. Все это приведет к тому, что: восходящий поток отправил слишком большой заголовок при чтении заголовка ответа вверх по течению

Ответ 4

с помощью nginx + fcgiwrap + запрос слишком долго

У меня была такая же проблема, потому что я использую конфигурацию nginx + fcgiwrap:

location ~ ^.*\.cgi$ {
    fastcgi_pass  unix:/var/run/fcgiwrap.sock;
    fastcgi_index index.cgi;
    fastcgi_param SCRIPT_FILENAME /opt/nginx/bugzilla/$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
    # attachments can be huge
    client_max_body_size 0;
    client_body_in_file_only clean;
    # this is where requests body are saved
    client_body_temp_path /opt/nginx/bugzilla/data/request_body 1 2;
}

и клиент выполнял запрос с URL-адресом, который составлял около 6000 символов (запрос bugzilla).

отладки...

location ~ ^.*\.cgi$ {
    error_log /var/log/nginx/bugzilla.log debug;
    # ...
}

Это то, что я получил в журналах:

2015/03/18 10:24:40 [debug] 4625#0: *2 upstream split a header line in FastCGI records
2015/03/18 10:24:40 [error] 4625#0: *2 upstream sent too big header while reading response header from upstream, client: 10....

Можно ли "414 request-uri too large" вместо "502 bad gateway"?

Да, вы можете! Я читал Как установить допустимую длину URL-адреса для запроса nginx (код ошибки: 414, слишком большой uri), потому что я думал, что "слишком длинный URL-адрес", но Я получал 502, а не 414.

large_client_header_buffers

Попробуйте # 1:

# this goes in http or server block... so outside the location block
large_client_header_buffers 4 8k;

Это не удается, мой URL - 6000 символов < 8k. Попробуйте №2:

large_client_header_buffers 4 4k;

Теперь я больше не вижу 502 Bad Gateway, и вместо этого вижу a 414 Request-URI Too Large

"upstream разделяет строку заголовка в записях FastCGI"

Было ли какое-то исследование и найдено где-то в Интернете:

Этого было достаточно для меня:

location ~ ^.*\.cgi$ {
    # holds request bigger than 4k but < 8k
    fastcgi_buffer_size 8k;
    # getconf PAGESIZE is 4k for me...
    fastcgi_buffers 16 4k;
    # ...
}

Ответ 5

Я столкнулся с этой проблемой в прошлом (не используя codeigniter, но это происходит всякий раз, когда ответы содержат много данных заголовка) и привык к настройке буферов, как это предлагается здесь, но в последнее время я снова укусил эту проблему, и буферы были, очевидно, в порядке.

Оказалось, что это была ошибка spdy, которую я использовал в этом конкретном проекте, и решил, включив сжатие заголовков spdy следующим образом:

spdy_headers_comp 6;