开发过程中遇见的问题集锦

1. 前端接口返回json数据不完整:

    原因:当返回数据量过大时,nginx将数据进行拦截,数据量小时,nginx是将返回的数据放在内存中,然后转发给客户端进行相应,当数据量过大时,nginx会将数据作为临时文件存放在服务器端,Nginx 的 buffer 机制,对于来自 FastCGI Server 的 Response,Nginx 将其缓冲到内存中,然后依次发送到客户端浏览器。缓冲区的大小由 fastcgi_buffers 和 fastcgi_buffer_size 两个值控制。

当出现这种问题时,可以通过查看nginx的logs/下的日志文件查询报错记录

*1380677 pwritev() "/usr/local/nginx/proxy_temp/4/07/0000027074" failed (28: No space left on device) while reading upstream, client: 122.231.224.115, server: teiimwork.com, request: "POST /api/agree/findDrugDetails HTTP/1.1", upstream: "http://127.0.0.1:8080/api/agree/findDrugDetails", host: "teiimwork.com", referrer: "https://teiimwork.com/"

可以看出 No space left on device是因为磁盘空间不足,临时文件无法存放导致的返回数据不完整

还有一种可能就是nginx的运行用户,对fastcgi的临时文件存放路径没有读写权限导致,通过chmod 777 /usr/local/nginx/fastcgi_temp赋予读写权限

fastcgi的配置:fastcgi_buffers 8 4K; 
fastcgi_buffer_size 4K;

配置在http/server/location都可

 server {
        listen       443;
        server_name  teiimwork.com;
        client_max_body_size 10M;
        fastcgi_buffers  8 4K;
        fastcgi_buffer_size 4k;
        # Load configuration files for the default server block.
        #include /etc/nginx/default.d/*.conf; 
 

 然后重启nginx即可解决该问题

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章