FastCGI在nginx中的參數



FastCGI參數

 

fastcgi主要用於http調用外部解釋器的接口,采用c/s結構,可以將http服務器和腳本解析器分開,同時在腳本解析服務器上啟動一個或者多個腳本解析守護進程。當HTTP服務器每次遇到動態程序時,可以將其直接交付給FastCGI進程來執行,然后將得到的結果返回給瀏覽器。這種方式可以讓HTTP服務器專一地處理靜態請求或者將動態腳本服務器的結果返回給客戶端,這在很大程度上提高了整個應用系統的性能。

fastcgi在nginx配置文件中的配置實例:

http {

.....

        fastcgi_connect_timeout 300;

        fastcgi_send_timeout 300;

        fastcgi_read_timeout 300;

        fastcgi_buffer_size 64k;

        fastcgi_buffers 4 64k;

        fastcgi_busy_buffers_size 128k;

        fastcgi_temp_file_write_size 128k;

        fastcgi_max_temp_file_size 0;

        fastcgi_temp_path /dev/shm/nginx_tmp;

        fastcgi_cache_path /dev/shm/nginx_cache levels=1:2 keys_zone=common_cache:20m inactive=5m max_size=1024m;

        fastcgi_cache_key "$request_method$host$request_uri";

        fastcgi_cache_min_uses 1;

        fastcgi_cache_bypass $cookie_nocache $arg_nocache;

        fastcgi_no_cache $cookie_nocache $arg_nocache;

        fastcgi_cache_use_stale error timeout http_500 http_404;

        fastcgi_cache_methods GET HEAD POST;

......

}

參數解釋:

1)fastcgi_connect_timeout : 指定連接到后端FastCGI的超時時間

2)fastcgi_send_timeout指定向FastCGI傳送請求的超時時間,這個值是已經完成兩次握手后向FastCGI傳送請求的超時時間。
3)fastcgi_read_timeout指定接收FastCGI應答的超時時間,這個值是已經完成兩次握手后接收FastCGI應答的超時時間。

4)fastcgi_buffer_size

語法:fastcgi_buffer_size the_size ;

默認值:fastcgi_buffer_size 4k/8k ;

使用字段:http, server, location 

作用:這個參數指定將用多大的緩沖區來讀取從FastCGI服務器到來應答的第一部分。

這個值表示將使用1個64KB的緩沖區讀取應答的第一部分(應答頭),可以設置為fastcgi_buffers選項指定的緩沖區大小。。

5)fastcgi_buffers

語法:fastcgi_buffers the_number is_size; 

默認值:fastcgi_buffers 8 4k/8k; 

使用字段:http, server, location 

這個參數指定了從FastCGI服務器到來的應答,指定本地需要用多少和多大的緩沖區來緩沖FastCGI的應答請求。如果一個PHP腳本所產生的頁面大小為256KB,那么會為其分配4個64KB的緩沖區來緩存;如果頁面大小大於256KB,那么大於256KB的部分會緩存到fastcgi_temp指定的路徑中,但是這並不是好方法,因為內存中的數據處理速度要快於硬盤。一般這個值應該為站點中PHP腳本所產生的頁面大小的中間值,如果站點大部分腳本所產生的頁面大小為256KB,那么可以把這個值設置為“16 16k”、“4 64k”等。

6)fastcgi_busy_buffers_size   系統很忙時可以使用的fastcgi_buffers大小,一般fastcgi_buffers的兩倍

7)fastcgi_temp_file_write_size 128k;  表示在寫入緩存文件時使用多大的數據塊,默認值是fastcgi_buffers的兩倍。

8)fastcgi_max_temp_file_size 0;   用於配置所有臨時文件的總體積大小

9)fastcgi_cache

語法:fastcgi_cache zone|off; 

默認值:off 

使用字段:http, server, location 

為緩存實際使用的共享內存指定一個區域,相同的區域可以用在不同的地方。

 

10)fastcgi_cache_key

語法:fastcgi_cache_key line

默認值:none 

使用字段:http, server, location 

設置緩存的關鍵字,如:

fastcgi_cache_key “$request_method$host$request_uri”;

11)fastcgi_cache_path

語法:fastcgi_cache_path path [levels=m:n] keys_zone=name:size [inactive=time] [max_size=size] 

默認值:none 

使用字段:http 

clean_time參數在0.7.45版本中已經移除。

這個指令指定FastCGI緩存的路徑以及其他的一些參數,所有的數據以文件的形式存儲,緩存的關鍵字(key)和文件名為代理的url計算出的MD5值。

Level參數設置緩存目錄的目錄分級以及子目錄的數量,例如指令如果設置為:

fastcgi_cache_path  /data/nginx/cache  levels=1:2   keys_zone=one:10m;

那么數據文件將存儲為:

/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c

緩存中的文件首先被寫入一個臨時文件並且隨后被移動到緩存目錄的最后位置,0.8.9版本之后可以將臨時文件和緩存文件存儲在不同的文件系統,但是需要明白這種移動並不是簡單的原子重命名系統調用,而是整個文件的拷貝,所以最好在fastcgi_temp_path和fastcgi_cache_path的值中使用相同的文件系統。

另外,所有活動的關鍵字及數據相關信息都存儲於共享內存池,這個值的名稱和大小通過key_zone參數指定,inactive參數指定了內存中的數據存儲時間,默認為10分鍾。

max_size參數設置緩存的最大值,一個指定的cache manager進程將周期性的刪除舊的緩存數據。

12)fastcgi_cache_methods

語法:fastcgi_cache_methods [GET HEAD POST]; 

默認值:fastcgi_cache_methods GET HEAD; 

使用字段:main,http,location

無法禁用GET/HEAD ,即使你只是這樣設置:

fastcgi_cache_methods  POST;

 

13)fastcgi_cache_min_uses

語法:fastcgi_cache_min_uses n 

默認值:fastcgi_cache_min_uses 1 

使用字段:http, server, location 

作用:指定了經過多少次請求的相同URL將被緩存。

 

14)fastcgi_cache_use_stale

語法:fastcgi_cache_use_stale [updating|error|timeout|invalid_header|http_500] 

默認值:fastcgi_cache_use_stale off; 

使用字段:http, server, location 

作用:定義哪些情況下用過期緩存

15)fastcgi_cache_valid

語法:fastcgi_cache_valid [http_error_code|time] 

默認值:none 

使用字段:http, server, location 

為指定的http返回代碼指定緩存時間,例如:

fastcgi_cache_valid  200 302  10m;

fastcgi_cache_valid  404      1m;

將響應狀態碼為200和302緩存10分鍾,404緩存1分鍾。

默認情況下緩存只處理200,301,302的狀態。

同樣也可以在指令中使用any表示任何一個。

fastcgi_cache_valid  200 302 10m;

fastcgi_cache_valid  301 1h;

fastcgi_cache_valid  any 1m;

 

16)fastcgi_index

語法:fastcgi_index file 

默認值:none 

使用字段:http, server, location 

如果URI以斜線結尾,文件名將追加到URI后面,這個值將存儲在變量$fastcgi_script_name中。例如:

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;

請求"/page.php"的參數SCRIPT_FILENAME將被設置為"/home/www/scripts/php/page.php",但是"/"為"/home/www/scripts/php/index.php"。

 

17) fastcgi_hide_header

語法:fastcgi_hide_header name 

使用字段:http, server, location 

默認情況下nginx不會將來自FastCGI服務器的"Status"和"X-Accel-..."頭傳送到客戶端,這個參數也可以隱藏某些其它的頭。

如果必須傳遞"Status"和"X-Accel-..."頭,則必須使用fastcgi_pass_header強制其傳送到客戶端。

 

18)fastcgi_ignore_client_abort

 

語法:fastcgi_ignore_client_abort on|off 

默認值:fastcgi_ignore_client_abort off 

使用字段:http, server, location 

作用:如果當前連接請求FastCGI服務器失敗,為防止其與nginx服務器斷開連接,可以用這個指令。

 

19)fastcgi_ignore_headers

語法:fastcgi_ignore_headers name [name...] 

使用字段:http, server, location 

這個指令禁止處理一些FastCGI服務器應答的頭部字段,比如可以指定像"X-Accel-Redirect", "X-Accel-Expires", "Expires"或"Cache-Control"等。

 

20)fastcgi_intercept_errors

 

語法:fastcgi_intercept_errors on|off 

默認值:fastcgi_intercept_errors off 

使用字段:http, server, location 

這個指令指定是否傳遞4xx和5xx錯誤信息到客戶端,或者允許nginx使用error_page處理錯誤信息。

你必須明確的在error_page中指定處理方法使這個參數有效,正如Igor所說“如果沒有適當的處理方法,nginx不會攔截一個錯誤,這個錯誤不會顯示自己的默認頁面,這里允許通過某些方法攔截錯誤。

 

21)fastcgi_no_cache

語法:fastcgi_no_cache variable [...]

默認值:None 

使用字段:http, server, location 

確定在何種情況下緩存的應答將不會使用,示例:

  fastcgi_no_cache $cookie_nocache  $arg_nocache$arg_comment;

  fastcgi_no_cache $http_pragma     $http_authorization;

如果為空字符串或者等於0,表達式的值等於false,例如,在上述例子中,如果在請求中設置了cookie "nocache",緩存將被繞過。

 

22)fastcgi_next_upstream

語法:fastcgi_next_upstream error|timeout|invalid_header|http_500|http_503|http_404|off

默認值:fastcgi_next_upstream error timeout 

使用字段:http, server, location 

指令指定哪種情況請求將被轉發到下一個FastCGI服務器:

·error — 傳送中的請求或者正在讀取應答頭的請求在連接服務器的時候發生錯誤。

·timeout — 傳送中的請求或者正在讀取應答頭的請求在連接服務器的時候超時。

·invalid_header — 服務器返回空的或者無效的應答。

·http_500 — 服務器返回500應答代碼。

·http_503 — 服務器返回503應答代碼。

·http_404 — 服務器返回404應答代碼。

·off — 禁止請求傳送到下一個FastCGI服務器。

注意傳送請求在傳送到下一個服務器之前可能已經將空的數據傳送到了客戶端,所以,如果在數據傳送中有錯誤或者超時發生,這個指令可能無法修復一些傳送錯誤。

 

23)fastcgi_param

語法:fastcgi_param parameter value 

默認值:none 

使用字段:http, server, location 

指定一些傳遞到FastCGI服務器的參數。

可以使用字符串,變量,或者其組合,這里的設置不會繼承到其他的字段,設置在當前字段會清除掉任何之前的定義。

下面是一個PHP需要使用的最少參數:

  fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;

  fastcgi_param  QUERY_STRING     $query_string;

PHP使用SCRIPT_FILENAME參數決定需要執行哪個腳本,QUERY_STRING包含請求中的某些參數。

如果要處理POST請求,則需要另外增加三個參數:

  fastcgi_param  REQUEST_METHOD   $request_method;

  fastcgi_param  CONTENT_TYPE     $content_type;

  fastcgi_param  CONTENT_LENGTH   $content_length;

如果PHP在編譯時帶有--enable-force-cgi-redirect,則必須傳遞值為200的REDIRECT_STATUS參數:

fastcgi_param  REDIRECT_STATUS  200;

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM