ngx_http_fastcgi_module 模組

範例配置
指令
     fastcgi_bind
     fastcgi_buffer_size
     fastcgi_buffering
     fastcgi_buffers
     fastcgi_busy_buffers_size
     fastcgi_cache
     fastcgi_cache_background_update
     fastcgi_cache_bypass
     fastcgi_cache_key
     fastcgi_cache_lock
     fastcgi_cache_lock_age
     fastcgi_cache_lock_timeout
     fastcgi_cache_max_range_offset
     fastcgi_cache_methods
     fastcgi_cache_min_uses
     fastcgi_cache_path
     fastcgi_cache_purge
     fastcgi_cache_revalidate
     fastcgi_cache_use_stale
     fastcgi_cache_valid
     fastcgi_catch_stderr
     fastcgi_connect_timeout
     fastcgi_force_ranges
     fastcgi_hide_header
     fastcgi_ignore_client_abort
     fastcgi_ignore_headers
     fastcgi_index
     fastcgi_intercept_errors
     fastcgi_keep_conn
     fastcgi_limit_rate
     fastcgi_max_temp_file_size
     fastcgi_next_upstream
     fastcgi_next_upstream_timeout
     fastcgi_next_upstream_tries
     fastcgi_no_cache
     fastcgi_param
     fastcgi_pass
     fastcgi_pass_header
     fastcgi_pass_request_body
     fastcgi_pass_request_headers
     fastcgi_read_timeout
     fastcgi_request_buffering
     fastcgi_send_lowat
     fastcgi_send_timeout
     fastcgi_socket_keepalive
     fastcgi_split_path_info
     fastcgi_store
     fastcgi_store_access
     fastcgi_temp_file_write_size
     fastcgi_temp_path
傳遞至 FastCGI 伺服器的參數
內嵌變數

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 address [transparent] | off;
預設值
上下文 http, server, location

此指令出現於 0.8.22 版。

讓連至 FastCGI 伺服器的連出連線,以指定的本機 IP 位址與選用的連接埠(1.11.2)為來源。參數值可以包含變數 (1.3.12)。特殊值 off (1.3.12) 會取消從前一層設定繼承的 fastcgi_bind 指令效果,讓系統自動指派本機 IP 位址與連接埠。

transparent 參數 (1.11.0) 允許連至 FastCGI 伺服器的連出連線,以非本機 IP 位址為來源,例如,用戶端的實際 IP 位址。

fastcgi_bind $remote_addr transparent;

為了讓此參數運作,通常必須以超級使用者權限執行 nginx worker 程序。在 Linux 上則不需如此 (1.13.8),因為如果指定了 transparent 參數,worker 程序會從主程序繼承 CAP_NET_RAW 功能。此外,也必須設定核心路由表,以攔截來自 FastCGI 伺服器的網路流量。

語法 fastcgi_buffer_size size;
預設值
fastcgi_buffer_size 4k|8k;
上下文 http, server, location

設定用於讀取從 FastCGI 伺服器收到的回應第一部分的緩衝區的 size。此部分通常包含小的回應標頭。預設情況下,緩衝區大小等於一個記憶體頁面。這會是 4K 或 8K,視平台而定。不過,可以將其縮小。

語法 fastcgi_buffering on | off;
預設值
fastcgi_buffering on;
上下文 http, server, location

此指令出現於 1.5.6 版。

啟用或停用來自 FastCGI 伺服器的回應緩衝處理。

啟用緩衝處理時,nginx 會盡快從 FastCGI 伺服器接收回應,並將其儲存到 fastcgi_buffer_sizefastcgi_buffers 指令設定的緩衝區中。如果整個回應無法放入記憶體中,則可以將其中一部分儲存到磁碟上的暫存檔。寫入暫存檔由 fastcgi_max_temp_file_sizefastcgi_temp_file_write_size 指令控制。

停用緩衝處理時,回應會以同步方式傳遞至用戶端,並在收到後立即傳遞。nginx 不會嘗試從 FastCGI 伺服器讀取整個回應。nginx 一次可從伺服器接收的最大資料量由 fastcgi_buffer_size 指令設定。

也可以在 “X-Accel-Buffering” 回應標頭欄位中傳遞 “yes” 或 “no” 來啟用或停用緩衝處理。可以使用 fastcgi_ignore_headers 指令來停用此功能。

語法 fastcgi_buffers number size;
預設值
fastcgi_buffers 8 4k|8k;
上下文 http, server, location

設定用於讀取來自 FastCGI 伺服器回應的緩衝區的 numbersize,適用於單一連線。預設情況下,緩衝區大小等於一個記憶體頁面。這會是 4K 或 8K,視平台而定。

語法 fastcgi_busy_buffers_size size;
預設值
fastcgi_busy_buffers_size 8k|16k;
上下文 http, server, location

啟用來自 FastCGI 伺服器的回應緩衝處理時,限制在尚未完全讀取回應時,可能忙於將回應傳送至用戶端的緩衝區總 size。在此期間,其餘的緩衝區可用於讀取回應,並且在需要時,將回應的一部分緩衝至暫存檔。預設情況下,sizefastcgi_buffer_sizefastcgi_buffers 指令設定的兩個緩衝區大小限制。

語法 fastcgi_cache zone | off;
預設值
fastcgi_cache off;
上下文 http, server, location

定義用於快取的共用記憶體區域。相同的區域可以在多個位置使用。參數值可以包含變數 (1.7.9)。off 參數會停用從前一層設定繼承的快取。

語法 fastcgi_cache_background_update on | off;
預設值
fastcgi_cache_background_update off;
上下文 http, server, location

此指令出現於 1.11.10 版。

允許啟動背景子要求,以更新過期的快取項目,同時將過期的快取回應傳回給用戶端。請注意,在更新過期快取回應時,必須允許使用過期的快取回應。

語法 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 string;
預設值
上下文 http, server, location

定義快取的金鑰,例如

fastcgi_cache_key localhost:9000$request_uri;

語法 fastcgi_cache_lock on | off;
預設值
fastcgi_cache_lock off;
上下文 http, server, location

此指令出現於 1.1.12 版。

啟用時,每次只允許一個要求,根據 fastcgi_cache_key 指令識別,將要求傳遞至 FastCGI 伺服器,以填入新的快取元素。相同快取元素的其他要求將會等待回應出現在快取中,或是此元素的快取鎖定釋出,最多等到 fastcgi_cache_lock_timeout 指令設定的時間。

語法 fastcgi_cache_lock_age time;
預設值
fastcgi_cache_lock_age 5s;
上下文 http, server, location

此指令出現於 1.7.8 版。

如果傳遞至 FastCGI 伺服器以填入新快取元素的最後一個要求,在指定的 time 內尚未完成,則可以將另一個要求傳遞至 FastCGI 伺服器。

語法 fastcgi_cache_lock_timeout time;
預設值
fastcgi_cache_lock_timeout 5s;
上下文 http, server, location

此指令出現於 1.1.12 版。

設定 fastcgi_cache_lock 的逾時。當 time 過期時,要求將會傳遞至 FastCGI 伺服器,不過,回應將不會快取。

在 1.7.8 之前,回應可能會快取。

語法 fastcgi_cache_max_range_offset number;
預設值
上下文 http, server, location

此指令出現於 1.11.6 版。

設定位元組範圍要求的位元組位移量。如果範圍超出位移量,範圍要求將會傳遞至 FastCGI 伺服器,且回應將不會快取。

語法 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 number;
預設值
fastcgi_cache_min_uses 1;
上下文 http, server, location

設定在回應將會快取之前的要求 number

語法 fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [min_free=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

設定快取的路徑和其他參數。快取資料儲存在檔案中。快取中的金鑰和檔案名稱都是將 MD5 函數套用至代理 URL 的結果。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,暫存檔將會直接放置在快取目錄中。

此外,所有有效的金鑰和有關資料的資訊都會儲存在共用記憶體區域中,其 namesizekeys_zone 參數設定。一個百萬位元組區域可以儲存約 8 千個金鑰。

作為商業訂閱的一部分,共用記憶體區域也會儲存擴展的快取資訊,因此,需要為相同數量的金鑰指定更大的區域大小。例如,一個百萬位元組區域可以儲存約 4 千個金鑰。

inactive 參數指定的時間內未存取的快取資料,會從快取中移除,無論其是否為最新資料。預設情況下,inactive 設定為 10 分鐘。

特殊的「快取管理員」程序會監控 max_size 參數設定的最大快取大小,以及 min_free (1.19.1) 參數設定快取檔案系統上的最小可用空間量。當大小超過或沒有足夠的可用空間時,它會移除最近最少使用的資料。資料會以 manager_filesmanager_thresholdmanager_sleep 參數 (1.11.5) 設定的迭代次數移除。在一次迭代中,刪除的項目不超過 manager_files 個(預設為 100 個)。一次迭代的持續時間受 manager_threshold 參數限制(預設為 200 毫秒)。在迭代之間,會暫停 manager_sleep 參數(預設為 50 毫秒)設定的時間。

在啟動後一分鐘,特殊的「快取載入器」程序會被啟動。它會將檔案系統上先前快取的資料資訊載入到快取區域。載入也是以迭代方式進行。在一次迭代中,載入的項目不會超過 loader_files 個(預設為 100)。此外,一次迭代的持續時間受 loader_threshold 參數限制(預設為 200 毫秒)。在迭代之間,會根據 loader_sleep 參數設定的暫停時間(預設為 50 毫秒)進行暫停。

此外,以下參數可作為我們的 商業訂閱 的一部分提供

purger=on|off
指示快取清除器是否會從磁碟中移除符合萬用字元鍵的快取項目(1.7.12)。將參數設定為 on(預設為 off)將啟動「快取清除器」程序,該程序會永久迭代所有快取項目,並刪除符合萬用字元鍵的項目。
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 string ...;
預設值
上下文 http, server, location

此指令出現在 1.5.7 版本中。

定義將請求視為快取清除請求的條件。如果字串參數中至少有一個值不為空且不等於「0」,則會移除具有相應快取鍵的快取項目。成功操作的結果以返回 204 (No Content) 響應表示。

如果清除請求的快取鍵以星號(「*」)結尾,則會從快取中移除所有符合萬用字元鍵的快取項目。但是,這些項目將保留在磁碟上,直到因為閒置、或由快取清除器處理 (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 on | off;
預設值
fastcgi_cache_revalidate off;
上下文 http, server, location

此指令出現在 1.5.7 版本中。

啟用使用具有「If-Modified-Since」和「If-None-Match」標頭欄位的條件請求來重新驗證過期的快取項目。

語法 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)。這比使用指令參數的優先權低。

為了在填充新的快取元素時盡量減少對 FastCGI 伺服器的存取次數,可以使用 fastcgi_cache_lock 指令。

語法 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;

快取的參數也可以直接在響應標頭中設定。這比使用指令設定快取時間具有更高的優先權。

可以使用 fastcgi_ignore_headers 指令停用處理這些響應標頭欄位中的一個或多個。

語法 fastcgi_catch_stderr string;
預設值
上下文 http, server, location

設定一個字串,以在從 FastCGI 伺服器收到的響應的錯誤流中進行搜尋。如果找到 string,則會認為 FastCGI 伺服器已返回無效的響應。這允許在 nginx 中處理應用程式錯誤,例如

location /php/ {
    fastcgi_pass backend:9000;
    ...
    fastcgi_catch_stderr "PHP Fatal error";
    fastcgi_next_upstream error timeout invalid_header;
}

語法 fastcgi_connect_timeout time;
預設值
fastcgi_connect_timeout 60s;
上下文 http, server, location

定義與 FastCGI 伺服器建立連線的逾時時間。應該注意的是,此逾時時間通常不能超過 75 秒。

語法 fastcgi_force_ranges on | off;
預設值
fastcgi_force_ranges off;
上下文 http, server, location

此指令出現在 1.7.7 版本中。

為來自 FastCGI 伺服器的快取和未快取響應啟用位元組範圍支援,無論這些響應中的「Accept-Ranges」欄位如何。

語法 fastcgi_hide_header field;
預設值
上下文 http, server, location

預設情況下,nginx 不會將 FastCGI 伺服器響應中的「Status」和「X-Accel-...」標頭欄位傳遞給用戶端。 fastcgi_hide_header 指令設定其他將不傳遞的欄位。相反地,如果需要允許傳遞欄位,則可以使用 fastcgi_pass_header 指令。

語法 fastcgi_ignore_client_abort on | off;
預設值
fastcgi_ignore_client_abort off;
上下文 http, server, location

決定當用戶端關閉連線而不等待響應時,是否應關閉與 FastCGI 伺服器的連線。

語法 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)。

如果未停用,處理這些標頭欄位會產生以下效果

語法 fastcgi_index name;
預設值
上下文 http, server, location

在 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」。

語法 fastcgi_intercept_errors on | off;
預設值
fastcgi_intercept_errors off;
上下文 http, server, location

決定是否應將代碼大於或等於 300 的 FastCGI 伺服器響應傳遞給用戶端,或攔截並重新導向到 nginx,以便使用 error_page 指令進行處理。

語法 fastcgi_keep_conn on | off;
預設值
fastcgi_keep_conn off;
上下文 http, server, location

此指令出現在 1.1.4 版本中。

預設情況下,FastCGI 伺服器會在傳送響應後立即關閉連線。但是,當此指令設定為值 on 時,nginx 將指示 FastCGI 伺服器保持連線開啟。這對於 FastCGI 伺服器的 keepalive 連線正常運作是必要的。

語法 fastcgi_limit_rate rate;
預設值
fastcgi_limit_rate 0;
上下文 http, server, location

此指令出現在 1.7.7 版本中。

限制從 FastCGI 伺服器讀取響應的速度。rate 以每秒位元組為單位指定。零值將停用速率限制。該限制是針對每個請求設定的,因此如果 nginx 同時開啟兩個與 FastCGI 伺服器的連線,則整體速率將是指定限制的兩倍。僅當啟用來自 FastCGI 伺服器的響應緩衝時,限制才起作用。參數值可以包含變數 (1.27.0)。

語法 fastcgi_max_temp_file_size size;
預設值
fastcgi_max_temp_file_size 1024m;
上下文 http, server, location

當啟用來自 FastCGI 伺服器的響應緩衝,且整個響應不符合 fastcgi_buffer_sizefastcgi_buffers 指令設定的緩衝區時,響應的一部分可以儲存到臨時檔案。此指令設定臨時檔案的最大 size。一次寫入臨時檔案的資料大小由 fastcgi_temp_file_write_size 指令設定。

零值將停用響應緩衝到臨時檔案。

此限制不適用於將在磁碟上快取儲存的響應。

語法 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

指定在哪些情況下,請求應該被傳遞到下一個伺服器。

error
在建立與伺服器的連線、將請求傳遞給伺服器或讀取回應標頭時發生錯誤;
timeout
在建立與伺服器的連線、將請求傳遞給伺服器或讀取回應標頭時發生逾時;
invalid_header
伺服器返回空的回應或無效的回應;
http_500
伺服器返回代碼為 500 的回應;
http_503
伺服器返回代碼為 503 的回應;
http_403
伺服器返回代碼為 403 的回應;
http_404
伺服器返回代碼為 404 的回應;
http_429
伺服器返回代碼為 429 的回應 (1.11.13);
non_idempotent
通常,如果請求已傳送到上游伺服器,則具有非冪等方法 (POSTLOCKPATCH) 的請求不會傳遞到下一個伺服器 (1.9.13);啟用此選項可明確允許重試此類請求;
off
停用將請求傳遞到下一個伺服器。

請務必記住,只有在尚未將任何內容傳送給用戶端時,才有可能將請求傳遞到下一個伺服器。也就是說,如果在傳輸回應的中途發生錯誤或逾時,則無法修復此問題。

此指令還定義了何種情況被視為與伺服器通訊的不成功嘗試errortimeoutinvalid_header 的情況始終被視為不成功嘗試,即使它們未在此指令中指定。http_500http_503http_429 的情況僅在指令中指定時才被視為不成功嘗試。http_403http_404 的情況永遠不會被視為不成功嘗試。

將請求傳遞到下一個伺服器的行為可以透過嘗試次數時間來限制。

語法 fastcgi_next_upstream_timeout time;
預設值
fastcgi_next_upstream_timeout 0;
上下文 http, server, location

此指令出現在 1.7.5 版本中。

限制將請求傳遞到下一個伺服器的時間。 0 值會關閉此限制。

語法 fastcgi_next_upstream_tries number;
預設值
fastcgi_next_upstream_tries 0;
上下文 http, server, location

此指令出現在 1.7.5 版本中。

限制將請求傳遞到下一個伺服器的可能嘗試次數。 0 值會關閉此限制。

語法 fastcgi_no_cache string ...;
預設值
上下文 http, server, location

定義在哪些條件下不會將回應儲存到快取。如果字串參數的至少一個值不為空且不等於「0」,則不會儲存回應。

fastcgi_no_cache $cookie_nocache $arg_nocache$arg_comment;
fastcgi_no_cache $http_pragma    $http_authorization;

可以與 fastcgi_cache_bypass 指令一起使用。

語法 fastcgi_param parameter value [if_not_empty];
預設值
上下文 http, server, location

設定應傳遞給 FastCGI 伺服器的 parametervalue 可以包含文字、變數及其組合。如果目前層級上沒有定義 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 address;
預設值
上下文 location, if in location

設定 FastCGI 伺服器的位址。該位址可以指定為網域名稱或 IP 位址,以及連接埠

fastcgi_pass localhost:9000;

或作為 UNIX 網域通訊端路徑

fastcgi_pass unix:/tmp/fastcgi.socket;

如果網域名稱解析為多個位址,則將以循環方式使用所有位址。此外,位址可以指定為伺服器群組

參數值可以包含變數。在這種情況下,如果位址指定為網域名稱,則會先在描述的伺服器群組中搜尋該名稱,如果找不到,則會使用解析器來判斷。

語法 fastcgi_pass_header field;
預設值
上下文 http, server, location

允許將原本停用的標頭欄位從 FastCGI 伺服器傳遞到用戶端。

語法 fastcgi_pass_request_body on | off;
預設值
fastcgi_pass_request_body on;
上下文 http, server, location

指示是否將原始請求主體傳遞給 FastCGI 伺服器。另請參閱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 time;
預設值
fastcgi_read_timeout 60s;
上下文 http, server, location

定義從 FastCGI 伺服器讀取回應的逾時時間。逾時時間僅設定在兩個連續讀取操作之間,而不是針對整個回應的傳輸。如果 FastCGI 伺服器在此時間內未傳輸任何內容,則會關閉連線。

語法 fastcgi_request_buffering on | off;
預設值
fastcgi_request_buffering on;
上下文 http, server, location

此指令出現在 1.7.11 版本中。

啟用或停用用戶端請求主體的緩衝處理。

啟用緩衝處理時,會在將請求傳送到 FastCGI 伺服器之前,從用戶端讀取整個請求主體。

停用緩衝處理時,會立即將請求主體傳送到 FastCGI 伺服器。在這種情況下,如果 nginx 已經開始傳送請求主體,則無法將請求傳遞到下一個伺服器

語法 fastcgi_send_lowat size;
預設值
fastcgi_send_lowat 0;
上下文 http, server, location

如果將指令設定為非零值,nginx 會嘗試透過使用 kqueue 方法的 NOTE_LOWAT 旗標或具有指定 sizeSO_SNDLOWAT 通訊端選項,來盡量減少傳出連線到 FastCGI 伺服器的傳送操作次數。

在 Linux、Solaris 和 Windows 上會忽略此指令。

語法 fastcgi_send_timeout time;
預設值
fastcgi_send_timeout 60s;
上下文 http, server, location

設定將請求傳輸到 FastCGI 伺服器的逾時時間。逾時時間僅設定在兩個連續寫入操作之間,而不是針對整個請求的傳輸。如果 FastCGI 伺服器在此時間內未收到任何內容,則會關閉連線。

語法 fastcgi_socket_keepalive on | off;
預設值
fastcgi_socket_keepalive off;
上下文 http, server, location

此指令出現在 1.15.6 版本中。

設定傳出連線到 FastCGI 伺服器的「TCP keepalive」行為。依預設,通訊端會使用作業系統的設定。如果將指令設定為值「on」,則會為通訊端開啟 SO_KEEPALIVE 通訊端選項。

語法 fastcgi_split_path_info regex;
預設值
上下文 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 on | off | string;
預設值
fastcgi_store off;
上下文 http, server, location

啟用將檔案儲存到磁碟。 on 參數會儲存具有與 aliasroot 指令對應路徑的檔案。 off 參數會停用檔案儲存。此外,可以使用具有變數的 string 來明確設定檔案名稱

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 users:permissions ...;
預設值
fastcgi_store_access user:rw;
上下文 http, server, location

設定新建立的檔案和目錄的存取權限,例如

fastcgi_store_access user:rw group:rw all:r;

如果指定了任何 groupall 存取權限,則可以省略 user 權限

fastcgi_store_access group:rw all:r;

語法 fastcgi_temp_file_write_size size;
預設值
fastcgi_temp_file_write_size 8k|16k;
上下文 http, server, location

當啟用將來自 FastCGI 伺服器的回應緩衝處理到暫存檔時,限制每次寫入暫存檔的資料 size。依預設,sizefastcgi_buffer_sizefastcgi_buffers 指令設定的兩個緩衝區限制。暫存檔的最大大小由 fastcgi_max_temp_file_size 指令設定。

語法 fastcgi_temp_path path [level1 [level2 [level3]]];
預設值
fastcgi_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_FILENAMEPATH_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 參數。