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
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐