ngx_http_fastcgi_module
模塊允許將請求傳遞給 FastCGI 服務器。
示例配置
location / { fastcgi_pass localhost:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; }
指令
fastcgi_bind
- | 說明 |
---|---|
語法 | fastcgi_bind address [transparent] | off ; |
默認 | —— |
上下文 | http、server、location |
提示 | 該指令在 0.8.22 版本中出現 |
通過一個可選的端口(1.11.2)從指定的本地 IP 地址發出到 FastCGI 服務器的傳出連接。參數值可以包含變量(1.3.12)。特殊值 off
(1.3.12)取消從上層配置級別繼承到的 fastcgi_bind
指令作用,這允許系統自動分配本地 IP 地址和端口。
transparent
參數(1.11.0)允許從非本地 IP 地址(例如來自客戶端的真實 IP 地址)的到 FastCGI 服務器的傳出連接:
fastcgi_bind $remote_addr transparent;
為了使這個參數起作用,有必要以超級用戶權限運行 nginx 工作進程,並配置內核路由來攔截來自 FastCGI 服務器的網絡流量。
fastcgi_buffer_size
- | 說明 |
---|---|
語法 | fastcgi_buffer_size size ; |
默認 | fastcgi_buffer_size 4k|8k; |
上下文 | http、server、location |
設置讀取 FastCGI 服務器收到的響應的第一部分的緩沖區的 size
(大小)。該部分通常包含一個小的響應頭。默認情況下,緩沖區大小等於一個內存頁。為 4K 或 8K,因平台而異。但是,它可以設置得更小。
fastcgi_buffering
- | 說明 |
---|---|
語法 | fastcgi_buffering on | off ; |
默認 | fastcgi_buffering on; |
上下文 | http、server、location |
提示 | 該指令在 1.5.6 版本中出現 |
啟用或禁用來自 FastCGI 服務器的響應緩沖。
當啟用緩沖時,nginx 會盡可能快地收到接收來自 FastCGI 服務器的響應,並將其保存到由 fastcgi_buffer_size 和 fastcgi_buffers 指令設置的緩沖區中。如果內存放不下整個響應,響應的一部分可以保存到磁盤上的臨時文件中。寫入臨時文件由 fastcgi_max_temp_file_size 和 fastcgi_temp_file_write_size 指令控制。
當緩沖被禁用時,nginx 在收到響應時立即同步傳遞給客戶端,不會嘗試從 FastCGI 服務器讀取整個響應。nginx 一次可以從服務器接收的最大數據量由 fastcgi_buffer_size 指令設置。
通過在 X-Accel-Buffering
響應頭字段中通過 yes
或 no
也可以啟用或禁用緩沖。可以使用 fastcgi_ignore_headers 指令禁用此功能。
fastcgi_buffes
- | 說明 |
---|---|
語法 | fastcgi_buffes number size ; |
默認 | fastcgi_buffers 8 4k|8k; |
上下文 | http、server、location |
設置單個連接從 FastCGI 服務器讀取響應的緩沖區的 number
(數量)和 size
(大小)。默認情況下,緩沖區大小等於一個內存頁。為 4K 或 8K,因平台而異。
fastcgi_busy_buffers_size
- | 說明 |
---|---|
語法 | fastcgi_busy_buffers_size size ; |
默認 | fastcgi_busy_buffers_size 8k|16k; |
上下文 | http、server、location |
當啟用 FastCGI 服務器響應緩沖時,限制緩沖區的總大小(size
)在當響應尚未被完全讀取時可向客戶端發送響應。同時,其余的緩沖區可以用來讀取響應,如果需要的話,緩沖部分響應到臨時文件中。默認情況下,size
受 fastcgi_buffer_size 和 fastcgi_buffers 指令設置的兩個緩沖區的大小限制。
fastcgi_cache
- | 說明 |
---|---|
語法 | fastcgi_cache zone | off ; |
默認 | fastcgi_cache off; |
上下文 | http、server、location |
定義用於緩存的共享內存區域。同一個區域可以在幾個地方使用。參數值可以包含變量(1.7.9)。off
參數將禁用從上級配置級別繼承的緩存配置。
fastcgi_cache_background_update
- | 說明 |
---|---|
語法 | fastcgi_cache_background_update on | off ; |
默認 | fastcgi_cache_background_update off; |
上下文 | http、server、location |
提示 | 該指令在 1.11.10. 版本中出現 |
允許啟動后台子請求來更新過期的緩存項,而過時的緩存響應則返回給客戶端。請注意,有必要在更新時允許使用陳舊的緩存響應。
fastcgi_cache_bypass
- | 說明 |
---|---|
語法 | fastcgi_cache_bypass string ... ; |
默認 | —— |
上下文 | http、server、location |
定義不從緩存中獲取響應的條件。如果字符串參數中有一個值不為空且不等於 0
,則不會從緩存中獲取響應:
fastcgi_cache_bypass $cookie_nocache $arg_nocache$arg_comment; fastcgi_cache_bypass $http_pragma $http_authorization;
可以和 fastcgi_no_cache 指令一起使用。
fastcgi_cache_key
- | 說明 |
---|---|
語法 | fastcgi_cache_key string ; |
默認 | —— |
上下文 | http、server、location |
為緩存定義一個 key,例如:
fastcgi_cache_key localhost:9000$request_uri;
fastcgi_cache_lock
- | 說明 |
---|---|
語法 | fastcgi_cache_lock on | off ; |
默認 | fastcgi_cache_lock off; |
上下文 | http、server、location |
提示 | 該指令在 1.1.12 版本中出現 |
當啟用時,同一時間只允許一個請求通過將請求傳遞給 FastCGI 服務器來填充 fastcgi_cache_key 指令標識的新緩存元素。同一緩存元素的其他請求將等待響應出現在緩存中,或等待此元素的緩存鎖釋放,直到 fastcgi_cache_lock_timeout 指令設置的時間。
fastcgi_cache_lock_age
- | 說明 |
---|---|
語法 | fastcgi_cache_lock_age time ; |
默認 | fastcgi_cache_lock_age 5s; |
上下文 | http、server、location |
提示 | 該指令在 1.7.8 版本中出現 |
如果傳遞給 FastCGI 服務器的最后一個請求填充新緩存元素沒能在指定的 time
內完成,則可能會有其他另一個請求被傳遞給 FastCGI 服務器。
fastcgi_cache_lock_timeout
- | 說明 |
---|---|
語法 | fastcgi_cache_lock_timeout time ; |
默認 | fastcgi_cache_lock_timeout 5s; |
上下文 | http、server、location |
提示 | 該指令在 1.1.12 版本中出現 |
設置 fastcgi_cache_lock 的超時時間。當時間到期時,請求將被傳遞給 FastCGI 服務器,但是,響應不會被緩存。
在 1.7.8 之前,響應可以被緩存。
fastcgi_cache_max_range_offset
- | 說明 |
---|---|
語法 | fastcgi_cache_max_range_offset number ; |
默認 | —— |
上下文 | http、server、location |
提示 | 該指令在 1.11.6 版本中出現 |
為 byte-range 請求設置字節偏移量。如果 range 超出 number
(偏移量),range 請求將被傳遞給 FastCGI 服務器,並且不會緩存響應。
fastcgi_cache_methods
- | 說明 |
---|---|
語法 | fastcgi_cache_methods GET | HEAD | POST ... ; |
默認 | fastcgi_cache_methods GET HEAD; |
上下文 | http、server、location |
提示 | 該指令在 0.7.59 版本中出現 |
如果此指令中存在當前客戶端請求方法,那么響應將被緩存。雖然 GET
和 HEAD
方法總是在該列表中,但我們還是建議您明確指定它們。另請參閱 fastcgi_no_cache 指令。
fastcgi_cache_min_uses
- | 說明 |
---|---|
語法 | fastcgi_cache_min_uses number ; |
默認 | fastcgi_cache_min_uses 1; |
上下文 | http、server、location |
設置指定數量(number
)請求后響應將被緩存。
fastcgi_cache_path
- | 說明 |
---|---|
語法 | fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time] ; |
默認 | —— |
上下文 | http |
設置緩存的路徑和其他參數。緩存數據存儲在文件中。緩存中的 key 和文件名是代理 URL 經過 MD5 函數處理后得到的值。levels
參數定義緩存的層次結構級別:范圍從 1
到 3
,每個級別可接受值為 1
或 2
。例如,在以下配置中
fastcgi_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
緩存中的文件名如下所示:
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
首先將緩存的響應寫入臨時文件,然后重命名該文件。從 0.8.9 版本開始,臨時文件和緩存可以放在不同的文件系統上。但是,請注意,在這種情況下,文件復制將要跨兩個文件系統,而不是簡單的重命名操作。因此建議,對於任何給定的位置,緩存和保存臨時文件的目錄都應該放在同一個文件系統上。臨時文件的目錄根據 use_temp_path
參數(1.7.10)設置。如果忽略此參數或將其設置為 on
,則將使用由 fastcgi_temp_path 指令設置的目錄。如果該值設置為 off
,臨時文件將直接放在緩存目錄中。
另外,所有活躍的 key 和有關數據的信息都存儲在共享內存區中,其名稱和大小由 keys_zone
參數配置。一個兆字節的區域可以存儲大約 8 千個 key。
作為商業訂閱的一部分,共享內存區還存儲其他緩存信息,因此,需要為相同數量的 key區域大小。例如,一個兆字節區域可以存儲大約 4 千個 key。
在 inactive
參數指定的時間內未被訪問的緩存數據將從緩存中刪除。默認情況下,inactive
設置為 10 分鍾。
“緩存管理器”(cache manager)進程監視的最大緩存大小由 max_size
參數設置。當超過此大小時,它將刪除最近最少使用的數據。數據在由 manager_files
、manager_threshold
和 manager_sleep
參數(1.11.5)配置下進行迭代刪除。在一次迭代中,不會超過 manager_files
項被刪除(默認為 100)。一次迭代的持續時間受到 manager_threshold
參數(默認為 200 毫秒)的限制。在每次迭代之間存在間隔時間,由 manager_sleep
參數(默認為 50 毫秒)配置。
開始后一分鍾,“緩存加載器”(cache loader)進程被激活。它將先前存儲在文件系統中的緩存數據的有關信息加載到緩存區中。加載也是在迭代中完成。在每一次迭代中,不會加載 loader_files
個項(默認情況下為 100)。此外,每一次迭代的持續時間受到 loader_threshold
參數的限制(默認情況下為 200 毫秒)。在迭代之間存在間隔時間,由 loader_sleep
參數(默認為 50 毫秒)配置。
此外,以下參數作為我們商業訂閱的一部分:
-
purger=on|off
指明緩存清除程序(1.7.12)是否將與通配符鍵匹配的緩存條目從磁盤中刪除。將該參數設置為on
(默認為off
)將激活“緩存清除器”(cache purger)進程,該進程不斷遍歷所有緩存條目並刪除與通配符匹配的條目。 -
purger_files=number
設置在一次迭代期間將要掃描的條目數量(1.7.12)。默認情況下,purger_files
設置為 10。 -
purger_threshold=number
設置一次迭代的持續時間(1.7.12)。默認情況下,purger_threshold
設置為 50 毫秒。 -
purger_sleep=number
在迭代之間設置暫停時間(1.7.12)。默認情況下,purger_sleep
設置為 50 毫秒。
在 1.7.3、1.7.7 和 1.11.10 版本中,緩存頭格式發生了更改。升級到更新的 nginx 版本后,以前緩存的響應將視為無效。
fastcgi_cache_purge
- | 說明 |
---|---|
語法 | fastcgi_cache_purge string ... ; |
默認 | —— |
上下文 | http、server、location |
提示 | 該指令在 1.5.7 版本中出現 |
定義將請求視為緩存清除請求的條件。如果 string 參數中至少有一個不為空的值並且不等於“0”,則帶有相應緩存鍵的緩存條目將被刪除。通過返回 204(無內容)響應來表示操作成功。
如果清除請求的緩存鍵以星號(*
)結尾,則將匹配通配符鍵的所有緩存條目從緩存中刪除。但是,這些條目仍然保留在磁盤上,直到它們因為不活躍而被刪除或被緩存清除程序(1.7.12)處理,或者客戶端嘗試訪問它們。
配置示例:
fastcgi_cache_path /data/nginx/cache keys_zone=cache_zone:10m; map $request_method $purge_method { PURGE 1; default 0; } server { ... location / { fastcgi_pass backend; fastcgi_cache cache_zone; fastcgi_cache_key $uri; fastcgi_cache_purge $purge_method; } }
該功能可作為我們商業訂閱的一部分。
fastcgi_cache_revalidate
- | 說明 |
---|---|
語法 | fastcgi_cache_purge on | off ; |
默認 | fastcgi_cache_revalidate off; |
上下文 | http、server、location |
提示 | 該指令在 1.5.7 版本中出現 |
開啟使用帶有 If-Modified-Since
和 If-None-Match
頭字段的條件請求對過期緩存項進行重新驗證。
fastcgi_cache_use_stale
- | 說明 |
---|---|
語法 | fastcgi_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_503 | http_403 | http_404 | http_429 | off ... ; |
默認 | fastcgi_cache_use_stale off; |
上下文 | http、server、location |
當在與 FastCGI 服務器通信期間發生錯誤時可以使用陳舊的緩存響應。該指令的參數與 fastcgi_next_upstream 指令的參數相匹配。
如果無法選擇使用 FastCGI 服務器處理請求,則 error
參數還允許使用陳舊的緩存響應。
此外,如果它當前正在更新,updating
參數允許使用陳舊的緩存響應。這樣可以在更新緩存數據時最大限度地減少對 FastCGI 服務器的訪問次數。
也可以在響應頭中直接啟用在響應變為陳舊的指定秒數后使用陳舊的緩存響應(1.11.10)。這比使用指令參數的優先級低。
Cache-Control
頭字段的stale-while-revalidate
擴展允許使用陳舊的緩存響應當它正在更新。Cache-Control
頭字段的stale-if-error
擴展允許在發生錯誤時使用陳舊的緩存響應。
為了最大限度地減少填充新緩存元素時對 FastCGI 服務器的訪問次數,可以使用 fastcgi_cache_lock 指令。
fastcgi_cache_valid
- | 說明 |
---|---|
語法 | fastcgi_cache_valid [code ...] time ; |
默認 | —— |
上下文 | http、server、location |
為不同的響應碼設置緩存時間。例如:
fastcgi_cache_valid 200 302 10m; fastcgi_cache_valid 404 1m;
對響應碼為 200 和 302 的響應設置 10 分鍾緩存,對響應碼為 404 的響應設置為 1 分鍾。
如果只指定緩存時間(time
):
fastcgi_cache_valid 5m;
那么只緩存 200 、301 和 302 響應。
另外,可以指定 any
參數來緩存任何響應:
fastcgi_cache_valid 200 302 10m; fastcgi_cache_valid 301 1h; fastcgi_cache_valid any 1m;
緩存參數也可以直接在響應頭中設置。這比使用指令設置緩存時間具有更高的優先級。
X-Accel-Expires
頭字段以秒為單位設置響應的緩存時間。零值會禁用響應緩存。如果該值以@
前綴開頭,則它會設置自 Epoch 以來的絕對時間(以秒為單位),最多可以緩存該時間段內的響應。- 如果頭中不包含
X-Accel-Expires
字段,則可以在頭字段Expires
或Cache-Control
中設置緩存參數。 - 如果頭中包含
Set-Cookie
字段,則不會緩存此類響應。 - 如果頭中包含具有特殊值
*
的Vary
字段,則這種響應不會被緩存(1.7.7)。如果頭中包含帶有另一個值的Vary
字段,考慮到相應的請求頭字段(1.7.7),這樣的響應將被緩存。
使用 fastcgi_ignore_headers 指令可以禁用一個或多個響應頭字段的處理。
fastcgi_catch_stderr
- | 說明 |
---|---|
語法 | fastcgi_catch_stderr string ; |
默認 | —— |
上下文 | http、server、location |
設置一個字符串,用於在從 FastCGI 服務器接收到的響應的錯誤流中搜索匹配。如果找到該字符串,則認為 FastCGI 服務器返回無效響應。此時將啟用 nginx 中的應用程序錯誤處理,例如:
location /php { fastcgi_pass backend:9000; ... fastcgi_catch_stderr "PHP Fatal error"; fastcgi_next_upstream error timeout invalid_header; }
fastcgi_connect_timeout
- | 說明 |
---|---|
語法 | fastcgi_connect_timeout time ; |
默認 | fastcgi_connect_timeout 60s; |
上下文 | http、server、location |
設置與 FastCGI 服務器建立連接的超時時間。需要注意的是,這個超時通常不能超過 75 秒。
fastcgi_force_ranges
- | 說明 |
---|---|
語法 | fastcgi_force_ranges on | off ; |
默認 | fastcgi_force_ranges off; |
上下文 | http、server、location |
提示 | 該指令在 1.7.7 版本中出現 |
啟用來自 FastCGI 服務器的緩存和未緩存響應的 byte-range 支持,忽略響應中的 Accept-Ranges
頭字段。
fastcgi_hide_header
- | 說明 |
---|---|
語法 | fastcgi_hide_header field ; |
默認 | —— |
上下文 | http、server、location |
默認情況下,nginx 不會將 FastCGI 服務器響應中的頭字段 Status
和 X-Accel-...
傳遞給客戶端。fastcgi_hide_header
指令設置不會被傳遞的附加字段。但是,如果需要允許傳遞字段,則可以使用 fastcgi_pass_header 指令。
fastcgi_ignore_client_abort
- | 說明 |
---|---|
語法 | fastcgi_ignore_client_abort on | off ; |
默認 | fastcgi_ignore_client_abort off; |
上下文 | http、server、location |
確定當客戶端關閉連接而不等待響應時是否關閉與 FastCGI 服務器的連接。
fastcgi_ignore_headers
- | 說明 |
---|---|
語法 | fastcgi_ignore_headers field ... ; |
默認 | —— |
上下文 | http、server、location |
禁止處理來自 FastCGI 服務器的某些響應頭字段。以下字段將被忽略:X-Accel-Redirect
、X-Accel-Expires
、X-Accel-Limit-Rate
(1.1.6)、X-Accel-Buffering
(1.1.6)、X-Accel-Charset
(1.1.6)、Expires
、Cache-Control
、Set-Cookie
(0.8.44)和 Vary
(1.7.7)。
如果未禁用,則處理這些頭字段產生以下效果:
X-Accel-Expires
、Expires
、Cache-Control
、Set-Cookie
和Vary
設置響應緩存的參數X-Accel-Redirect
執行內部重定向到指定的 URIX-Accel-Limit-Rate
設置響應的傳送速率限制回客戶端X-Accel-Buffering
啟用或禁用緩沖響應X-Accel-Charset
設置所需的響應字符集
fastcgi_index
- | 說明 |
---|---|
語法 | fastcgi_index name ; |
默認 | —— |
上下文 | http、server、location |
在 $fastcgi_script_name
變量的值中設置一個文件名,該文件名追加到 URL 后面並以一個斜杠結尾。例如以下設置
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
。
fastcgi_intercept_errors
- | 說明 |
---|---|
語法 | fastcgi_intercept_errors on | off ; |
默認 | fastcgi_intercept_errors off; |
上下文 | http、server、location |
確定當 FastCGI 服務器響應碼大於或等於 300 時是否應傳遞給客戶端,或者攔截並重定向到 nginx 以便使用 error_page 指令進行處理。
fastcgi_keep_conn
- | 說明 |
---|---|
語法 | fastcgi_keep_conn on | off ; |
默認 | fastcgi_keep_conn off; |
上下文 | http、server、location |
提示 | 該指令在 1.1.4 版本中出現 |
默認情況下,FastCGI 服務器將在發送響應后立即關閉連接。但是,如果當此指令設置為 on
值,則 nginx 將指示 FastCGI 服務器保持連接處於打開狀態。這對保持 FastCGI 服務器連接 keepalive 尤為重要。
fastcgi_limit_rate
- | 說明 |
---|---|
語法 | fastcgi_limit_rate rate ; |
默認 | fastcgi_limit_rate 0; |
上下文 | http、server、location |
提示 | 該指令在 1.7.7 版本中出現 |
限制讀取 FastCGI 服務器響應的速度。rate
以每秒字節數為單位。零值則禁用速率限制。該限制是針對每個請求設置的,因此如果 nginx 同時打開兩個連接到 FastCFI 服務器的連接,則整體速率將是指定限制的兩倍。該限制僅在啟用緩沖來自 FastCGI 服務器的響應時才起作用。
fastcgi_max_temp_file_size
- | 說明 |
---|---|
語法 | fastcgi_max_temp_file_size size ; |
默認 | fastcgi_max_temp_file_size 1024m; |
上下文 | http、server、location |
當啟用緩沖](#fastcgi_buffering)來自 FastCGI 服務器的響應時並且整個響應不適合由 {fastcgi_buffer_size 和 fastcgi_buffers 指令設置的緩沖時,響應的一部分可以保存到臨時文件中。該指令用於設置臨時文件的最大大小(size
)。一次寫入臨時文件的數據大小由 fastcgi_temp_file_write_size 指令設置。
零值將禁用臨時文件響應緩沖。
fastcgi_next_upstream
- | 說明 |
---|---|
語法 | fastcgi_next_upstream error | timeout | invalid_header | http_500 | http_503 | http_403 | http_404 | http_429 | non_idempotent | off ... ; |
默認 | fastcgi_next_upstream error timeout; |
上下文 | http、server、location |
指定在哪些情況下請求應傳遞給下一台服務器:
-
erorr
在與服務器建立連接、傳遞請求或讀取響應頭時發生錯誤
-
timeout
在與服務器建立連接、傳遞請求或讀取響應頭時發生超時
-
invalid_header
服務器返回了空的或無效的響應
-
http_500
服務器返回 500 響應碼
-
http_503
服務器返回 503 響應碼
-
http_403
服務器返回 403 響應碼
-
http_404
服務器返回 404 響應碼
-
http_429
服務器返回 429 響應碼(1.11.13)
-
non_idempotent
通常,如果請求已發送到上游服務器(1.9.13),則具有非冪等方法(POST、LOCK、PATCH)的請求不會傳遞到下一個服務器,使這個選項明確允許重試這樣的請求
-
off
禁用將請求傳遞給下一個服務器
我們應該記住,只有在沒有任何內容發送給客戶端的情況下,才能將請求傳遞給下一台服務器。也就是說,如果在響應傳輸過程中發生錯誤或超時,要修復是不可能的。
該指令還定義了與服務器進行通信的不成功嘗試。erorr
、timeout
和 invalid_header
的情況總是被認為是不成功的嘗試,即使它們沒有在指令中指定。只有在指令中指定了 http_500
、http_503
和 http_429
的情況下,它們才被視為不成功嘗試。http_403
和 http_404
的情況永遠不會被視為不成功嘗試。
fastcgi_next_upstream_timeout
- | 說明 |
---|---|
語法 | fastcgi_next_upstream_timeout time ; |
默認 | fastcgi_next_upstream_timeout 0; |
上下文 | http、server、location |
提示 | 該指令在 1.7.5 版本中出現 |
限制請求可以傳遞到下一個服務器的時間。0
值關閉此限制。
fastcgi_next_upstream_tries
- | 說明 |
---|---|
語法 | fastcgi_next_upstream_tries number ; |
默認 | fastcgi_next_upstream_tries 0; |
上下文 | http、server、location |
提示 | 該指令在 1.7.5 版本中出現 |
限制將請求傳遞到下一個服務器的嘗試次數。0
值關閉此限制。
fastcgi_no_cache
- | 說明 |
---|---|
語法 | fastcgi_no_cache string ... ; |
默認 | —— |
上下文 | http、server、location |
定義響應不會保存到緩存中的條件。如果 string
參數中有一個值不為空且不等於 0
,則不會保存響應:
fastcgi_no_cache $cookie_nocache $arg_nocache$arg_comment; fastcgi_no_cache $http_pragma $http_authorization;
可以與 fastcgi_cache_bypass 指令一起使用。
fastcgi_param
- | 說明 |
---|---|
語法 | fastcgi_param parameter value [if_not_empty] ; |
默認 | —— |
上下文 | http、server、location |
設置應傳遞給 FastCGI 服務器的 parameter
(參數)。該值可以包含文本、變量及其組合。當且僅當在當前級別上沒有定義 fastcgi_param 指令時,這些指令才從前一級繼承。
以下示例展示了 PHP 的最小要求配置:
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string;
SCRIPT_FILENAME
參數在 PHP 中用於確定腳本名稱,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;
如果該指令是通過 if_not_empty
(1.1.11)指定的,那么只有當它的值不為空時,這個參數才會被傳遞給服務器:
fastcgi_param HTTPS $https if_not_empty;
fastcgi_pass
- | 說明 |
---|---|
語法 | fastcgi_pass address ; |
默認 | —— |
上下文 | http、server、location |
設置 FastCGI 服務器的地址。該地址可以指定為域名或 IP 地址,以及端口:
fastcgi_pass localhost:9000;
或者作為 UNIX 域套接字路徑:
fastcgi_pass unix:/tmp/fastcgi.socket;
如果域名解析為多個地址,則所有這些地址都將以循環方式使用。另外,地址可以被指定為服務器組。
參數值可以包含變量。在這種情況下,如果地址被指定為域名,則在所描述的服務器組中搜索名稱,如果未找到,則使用解析器來確定。
fastcgi_pass_header
- | 說明 |
---|---|
語法 | fastcgi_pass_header field ; |
默認 | —— |
上下文 | http、server、location |
允許從 FastCGI 服務器向客戶端傳遞隱藏禁用的頭字段。
fastcgi_pass_request_body
- | 說明 |
---|---|
語法 | fastcgi_pass_request_body on | off ; |
默認 | fastcgi_pass_request_body on; |
上下文 | http、server、location |
指示是否將原始請求主體傳遞給 FastCGI 服務器。另請參閱 fastcgi_pass_request_headers 指令。
fastcgi_pass_request_headers
- | 說明 |
---|---|
語法 | fastcgi_pass_request_headers on | off ; |
默認 | fastcgi_pass_request_headers on; |
上下文 | http、server、location |
指示原始請求的頭字段是否傳遞給 FastCGI 服務器。另請參閱 fastcgi_pass_request_body 指令。
fastcgi_read_timeout
- | 說明 |
---|---|
語法 | fastcgi_read_timeout time ; |
默認 | fastcgi_read_timeout 60s; |
上下文 | http、server、location |
定義從 FastCGI 服務器讀取響應的超時時間。超時設置在兩次連續的讀操作之間,而不是傳輸整個響應的過程。如果 FastCGI 服務器在此時間內沒有發送任何內容,則連接將被關閉。
fastcgi_request_buffering
- | 說明 |
---|---|
語法 | fastcgi_request_buffering on | off ; |
默認 | fastcgi_request_buffering on; |
上下文 | http、server、location |
提示 | 該指令在 1.7.11 版本中出現 |
啟用或禁用客戶端請求體緩沖。
啟用緩沖時,在將請求發送到 FastCGI 服務器之前,將從客戶端讀取整個請求體。
當緩沖被禁用時,請求體在收到時立即發送到 FastCGI 服務器。在這種情況下,如果 nginx 已經開始發送請求體,則請求不能傳遞到下一個服務器。
fastcgi_send_lowat
- | 說明 |
---|---|
語法 | fastcgi_send_lowat size ; |
默認 | fastcgi_send_lowat 0; |
上下文 | http、server、location |
如果指令設置為非零值,則 nginx 將嘗試通過使用 kqueue 方式的 NOTE_LOWAT
標志或 SO_SNDLOWAT
套接字選項,以指定的 size
(大小)來最小化傳出連接到 FastCGI 服務器上的發送操作次數。
該指令在 Linux、Solaris 和 Windows 上被忽略。
fastcgi_send_timeout
- | 說明 |
---|---|
語法 | fastcgi_send_timeout time ; |
默認 | fastcgi_send_timeout 60s; |
上下文 | http、server、location |
設置向 FastCGI 服務器發送請求的超時時間。超時設置在兩次連續寫入操作之間,而不是傳輸整個請求的過程。如果 FastCGI 服務器在此時間內沒有收到任何內容,則連接將關閉。
fastcgi_split_path_info
- | 說明 |
---|---|
語法 | fastcgi_split_path_info regex ; |
默認 | fastcgi_send_timeout 60s; |
上下文 | location |
定義一個捕獲 $fastcgi_path_info
變量值的正則表達式。正則表達式應該有兩個捕獲:第一個為 $fastcgi_script_name
變量的值,第二個為 $fastcgi_path_info
變量的值。例如以下設置
location ~ ^(.+\.php)(.*)$ { fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info;
和 /show.php/article/0001
請求,SCRIPT_FILENAME
參數等於 /path/to/php/show.php
,並且 PATH_INFO
參數等於 /article/0001
。
fastcgi_store
- | 說明 |
---|---|
語法 | fastcgi_store on | off | string ; |
默認 | fastcgi_store off; |
上下文 | http、server、location |
啟用將文件保存到磁盤。on
參數將文件保存為與指令 alias 或 root 相對應的路徑。off
參數禁用保存文件。另外,可以使用帶變量的字符串顯式設置文件名:
fastcgi_store /data/www$original_uri;
文件的修改時間根據收到的 Last-Modified
響應頭字段設置。首先將響應寫入臨時文件,然后重命名該文件。從 0.8.9 版本開始,臨時文件和持久存儲可以放在不同的文件系統上。但是,請注意,在這種情況下,文件將跨兩個文件系統進行復制,而不是簡單地進行重命名操作。因此建議,對於任何給定位置,保存的文件和由 fastcgi_temp_path 指令設置的保存臨時文件的目錄都放在同一個文件系統上。
該指令可用於創建靜態不可更改文件的本地副本,例如:
location /images/ { root /data/www; error_page 404 = /fetch$uri; } location /fetch/ { internal; fastcgi_pass backend:9000; ... fastcgi_store on; fastcgi_store_access user:rw group:rw all:r; fastcgi_temp_path /data/temp; alias /data/www/; }
fastcgi_store_access
- | 說明 |
---|---|
語法 | fastcgi_store_access users:permissions ... ; |
默認 | fastcgi_store_access user:rw; |
上下文 | http、server、location |
為新創建的文件和目錄設置訪問權限,例如:
fastcgi_store_access user:rw group:rw all:r;
如果指定了任何組或所有訪問權限,則可以省略用戶權限
fastcgi_store_access group:rw all:r;
fastcgi_temp_file_write_size
- | 說明 | |
---|---|---|
語法 | fastcgi_temp_file_write_size size ; |
|
默認 | fastcgi_temp_file_write_size 8k | 16k; |
上下文 | http、server、location |
設置當開啟緩沖 FastCGI 服務器響應到臨時文件時,限制寫入臨時文件的數據 size
(大小)。默認情況下,大小受 fastcgi_buffer_size 和 fastcgi_buffers 指令設置的兩個緩沖區限制。臨時文件的最大大小由 fastcgi_max_temp_file_size 指令設置。
fastcgi_temp_path
- | 說明 |
---|---|
語法 | fastcgi_temp_path path [level1 [level2 [level3]]] ; |
默認 | astcgi_temp_path fastcgi_temp; |
上下文 | http、server、location |
定義一個目錄,用於存儲從 FastCGI 服務器接收到的數據的臨時文件。指定目錄下最多可有三級子目錄。例如以下配置
fastcgi_temp_path /spool/nginx/fastcgi_temp 1 2;
臨時文件如下所示:
/spool/nginx/fastcgi_temp/7/45/00000123457
另請參見 fastcgi_cache_path 指令的 use_temp_path
參數。
傳參到 FastCGI 服務器
HTTP 請求頭字段作為參數傳遞給 FastCGI 服務器。在作為 FastCGI 服務器運行的應用程序和腳本中,這些參數通常作為環境變量提供。例如,User-Agent
頭字段作為 HTTP_USER_AGENT
參數傳遞。除 HTTP 請求頭字段外,還可以使用 fastcgi_param 指令傳遞任意參數。
內嵌變量
ngx_http_fastcgi_module
模塊支持在 fastcgi_param 指令設置參數時使用內嵌變量:
-
$fastcgi_script_name
請求 URI,或者如果 URI 以斜杠結尾,則請求 URI 的索引文件名稱由 fastcgi_index 指令配置。該變量可用於設置
SCRIPT_FILENAME
和PATH_TRANSLATED
參數,以確定 PHP 中的腳本名稱。例如,對/info/
請求的指令設置fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
SCRIPT_FILENAME
參數等於/home/www/scripts/php/info/index.php
。使用 fastcgi_split_path_info 指令時,
$fastcgi_script_name
變量等於指令設置的第一個捕獲值。 -
$fastcgi_path_info
由 fastcgi_split_path_info 指令設置的第二個捕獲值。這個變量可以用來設置
PATH_INFO
參數。