開發過程中遇見的問題集錦

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即可解決該問題

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