nginx返回大数据长的json数据问题解决方案
1、fastcgi和proxy的区别
Nginx本身不支持PHP/Python/Perl等语言,但是它可以通过FastCGI来将请求扔给某些语言或框架处理。例如将.php为后缀的请求通过FashCGI交给PHP的一个FastCGI管理器PHP-FPM来处理。
关于proxy_pass和fastcgi_pass的区别也就在于一个Nginx本身是否支持。
如果做proxy,可以将proxy配置修改buffer长度,或者直接关闭buffer。
http {
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}
http {
proxy_buffering off;
}
如果做fastcgi,可以将配置改为:
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_buffers:控制 nginx 最多创建 256个大小为 128K 的缓冲区,而 fastcgi_buffer_size 则是处理 Response 时第一个缓冲区的大小,不包含在前者中。
2 添加Nginx参数,增加缓存字符串大小
当nginx 代理解析大量数据流时,会把数据先放在自己的缓冲区,然后一并发给客户端
一次请求的数据量很大, 则会有一部分数据会被忽略掉 前端解析数据会有问题 致使页面白屏
nginx 返回数据不完整的解决办法
server {
...
proxy_buffers 16 1024k;
proxy_buffer_size 1024k;
...
}
或是
server {
listen **;
server_name *********.com;
#charset koi8-r;
access_log logs/***.access.log;
error_log logs/****.error.log;
location / {
root /server/***/**;
index **.html ;
}
location ^~ /**/ {
proxy_pass http://*****。****;
proxy_connect_timeout 60s;
proxy_read_timeout 5400s;
proxy_send_timeout 5400s;
proxy_redirect off;
proxy_buffers 16 1024k;
proxy_buffer_size 1024k;
}
3、示例
#此处值代表nginx 设置 16个 1024k 的块进行缓存,总共大小为16*1024k 解决问题
1 //磁珠值代表每块大小 解决问题2
location ^~/apiswr/ {
proxy_pass http://ip:端口;
client_max_body_size 100m;
proxy_buffers 16 1024k;
proxy_buffer_size 1024k;
}
2 遇到权限问题,原因是大文件会先缓存到/proxy-temp文件夹下面,然后再返回
Permission denied) while reading upstream
修改文件夹的权限为Nginx用户,根据你项目的实际情况来修改
chown -R www:www /usr/local/nginx/proxy-temp
更多推荐
所有评论(0)