上游太大 - nginx + codeigniter
上游太大 - nginx + codeigniter
我从Nginx得到了这个错误,但似乎无法解决它!我正在使用codeigniter,并且正在使用数据库进行会话。所以我想知道头部怎么可能太大。有没有办法检查头部是什么?或者可能看看我能做些什么来修复这个错误?
如果你需要我上传任何配置文件或其他东西,请告诉我,我会根据你的要求进行更新。
更新:
我将以下内容添加到配置文件中:
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/"
使用nginx + fcgiwrap时出现了"Upstream too big"的问题。原因是客户端发送的请求URL太长,导致nginx无法处理。解决方法是通过调整nginx的配置参数来增大请求URL的限制长度。
首先,需要在nginx的配置文件中添加以下内容:
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;
client_max_body_size 0;
client_body_in_file_only clean;
client_body_temp_path /opt/nginx/bugzilla/data/request_body 1 2;
}
然后,可以通过开启调试模式来查看nginx的日志信息,找到具体的错误原因:
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的配置参数:
# 在http或server块中添加以下内容
large_client_header_buffers 4 8k;
如果以上配置不起作用,可以尝试使用以下配置:
large_client_header_buffers 4 4k;
此外,还可以通过调整fastcgi的缓冲区大小来解决"upstream split a header line in FastCGI records"的问题。在nginx的配置文件中,添加以下内容:
location ~ ^.*\.cgi$ {
fastcgi_buffer_size 8k;
fastcgi_buffers 16 4k;
# ...
}
以上就是解决"Upstream too big"问题的方法。通过调整nginx和fastcgi的配置参数,可以增大请求URL的限制长度,从而解决请求过大的问题。
问题原因:nginx和codeigniter的结合导致了上游过大的问题。
解决方法:修改nginx的配置文件,在http或server部分添加或修改以下指令:
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
具体位置:在/etc/nginx/nginx.conf文件的http块中。
另外,还可以将以上三个指令的值增大为512k,以确保解决问题。
可能出现循环重定向的情况。
在访问日志中没有发现在故障发生之前的重定向。
使用以上配置时出现错误:"proxy_busy_buffers_size" must be less than the size of all "proxy_buffers" minus one buffer
。
在nginx和codeigniter中出现"Upstream too big"这个问题的原因是代理和fastcgi缓冲区的大小不足。解决方法是在nginx.conf文件的http块中添加以下内容:
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
然后在php的location块中添加以下内容:
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
这样做的区别是代理和fastcgi缓冲区的设置不同。更多关于HttpProxyModule模块和HttpFastcgiModule的信息可以参考nginx的官方文档。在http块中添加这些配置可以避免在每个子域服务器上都进行配置,提高了配置的简洁性。另外,需要注意的是以proxy_开头的配置项需要插入到nginx.conf文件的http{}部分。
关于fastcgi_buffers配置项,数字4表示缓冲区的数量,256k表示每个缓冲区的大小。这样的配置可以提高nginx处理PHP请求的效率。
至于为什么设置fastcgi_buffer_size为128k,以及如何在服务器上进行测量以使nginx正常工作,目前文中没有提供明确的解释。
另外,需要注意的是"proxy_busy_buffers_size"的大小必须小于"proxy_buffers"的总大小减去一个缓冲区的大小。
最后,还有读者提到可以只在location ~ .php$块中添加配置,而不必在两个地方都添加。这样也可以解决问题。
以上是关于解决"Upstream too big"问题的原因和解决方法的整理总结。这些配置可以帮助优化nginx和codeigniter的性能,提高网站的响应速度和流畅度。