上游太大了 – 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/"
将其添加到通常位于/etc/nginx/nginx.conf中的nginx.conf文件的http {}
中:
proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k;
然后将这个添加到你的php位置块,这将位于你的虚拟主机文件寻找以位置开头的块〜.php $ {
fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k;
修改您的nginxconfiguration并更改/设置以下指令:
proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k;
我已经certificate,当一个无效的头被传送时,这也被发送。 HTTP标头的无效字符或格式,超过一个月的cookie过期等等都将导致:上游在从上游读取响应标题时发送太大的标题
使用nginx + fcgiwrap +请求太长
我有同样的问题,因为我使用nginx + fcgiwrapconfiguration:
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; }
而客户端正在做一个约6000个字符(一个bugzilla请求)的请求。
debugging…
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”吗?
是的你可以! 我正在阅读如何设置一个nginx请求的允许的URL长度(错误代码: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
,而是看到一个414 Request-URI Too Large
“在FastCGIlogging中上游分割标题行”
做了一些研究并在互联网上find了某个地方:
- http://forum.nginx.org/read.php?2,4704,4704
- https://www.ruby-forum.com/topic/4422529
- http://mailman.nginx.org/pipermail/nginx/2009-August/014709.html
- http://mailman.nginx.org/pipermail/nginx/2009-August/014716.html
这对我来说是足够的:
location ~ ^.*\.cgi$ { # holds request bigger than 4k but < 8k fastcgi_buffer_size 8k; # getconf PAGESIZE is 4k for me... fastcgi_buffers 16 4k; # ... }
我在过去遇到过这个问题(不是使用codeigniter,而是每当响应包含大量头数据时就会发生),并按照这里所build议的习惯来调整缓冲区,但是最近我又被这个问题困住了,缓冲区显然是好的。
原来,这是我在这个特定的项目上使用spdy的错误,并通过启用spdy头压缩来解决:
spdy_headers_comp 6;