一台測試服務器由於沒做fastcgi_buffer單獨設置,在跑一個顯示10w條數據的循環輸出時只能顯示4700-5200條記錄
<?php $str = ''; for($i = 0; $i < 100000;$i++) { //echo $i."<br>"; $str .= $i."<br>"; } echo $str; ?>
訪問測試得到數據不完整,查看nginx手冊后發現原因在於fastcgi_buffer設置
增加 fastcgi_buffers 256 128k;數據顯示正常
關於這個參數的解釋:
fastcgi_buffers
語法:fastcgi_buffers the_number is_size;
默認值:fastcgi_buffers 8 4k/8k;
使用字段:http, server, location
這個參數指定了從FastCGI進程到來的應答,本地將用多少和多大的緩沖區讀取。
fastcgi_buffers可以設置為你的FastCGI返回的大部分應答大小,這樣可以處理大部分的請求,較大的請求將被緩沖到磁盤。
如果想關閉對所有請求道磁盤的緩沖,可以將fastcgi_max_temp_file_size 設置為0。
fastcgi_buffer等於:fastcgi_buffer_size + the_number * is_size
如果一個fastcgi應答為12k,那么fastcgi_buffers 64 4k將分配3個4k的buffer。這便是為什么fastcgi_buffers有兩個參數,而fastcgi_buffer_size(用於應答頭與應答的第一部分)只有1個參數,在fastcgi_buffer_size被清空后,它們和fastcgi_buffers一起被使用。
例如: