nginx之詳解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;
}
詳解
1.fastcgi_bind
語法:fastcgi_bind address
默認(rèn)值:none
使用字段:http, server, location
可用版本:大于0.8.22
示例:
fastcgi_bind 192.168.1.1;
指令在調(diào)用connect()函數(shù)之前將解析每個(gè)上游socket到一個(gè)本地地址,可以使用在主機(jī)擁有多個(gè)網(wǎng)卡接口或別名,但是你只允許到外的連接來自指定的網(wǎng)卡或者地址的情況下。
2.fastcgi_buffer_size
語法:fastcgi_buffer_size the_size ;
默認(rèn)值:fastcgi_buffer_size 4k/8k ;
使用字段:http, server, location
這個(gè)參數(shù)指定將用多大的緩沖區(qū)來讀取從FastCGI進(jìn)程到來應(yīng)答頭。
默認(rèn)的緩沖區(qū)大小為fastcgi_buffers指令中的每塊大小,可以將這個(gè)值設(shè)置更小。
3.fastcgi_buffers
語法:fastcgi_buffers the_number is_size;
默認(rèn)值:fastcgi_buffers 8 4k/8k;
使用字段:http, server, location
這個(gè)參數(shù)指定了從FastCGI進(jìn)程到來的應(yīng)答,本地將用多少和多大的緩沖區(qū)讀取。
fastcgi_buffers可以設(shè)置為你的FastCGI返回的大部分應(yīng)答大小,這樣可以處理大部分的請(qǐng)求,較大的請(qǐng)求將被緩沖到磁盤。
如果想關(guān)閉對(duì)所有請(qǐng)求道磁盤的緩沖,可以將fastcgi_max_temp_file_size設(shè)置為0。
fastcgi_buffer等于:fastcgi_buffer_size + the_number * is_size
如果一個(gè)fastcgi應(yīng)答為12k,那么fastcgi_buffers 64 4k將分配3個(gè)4k的buffer。這便是為什么fastcgi_buffers有兩個(gè)參數(shù),而fastcgi_buffer_size(用于應(yīng)答頭與應(yīng)答的第一部分)只有1個(gè)參數(shù),在fastcgi_buffer_size被清空后,它們和fastcgi_buffers一起被使用。
例如:
fastcgi_buffers 256 4k; #設(shè)置buffer大小為:4k + 256 * 4k = 1028k
這意味著大于1M的應(yīng)答將被緩沖到磁盤,而小于1M的將在內(nèi)存中處理。
默認(rèn)這個(gè)參數(shù)等于分頁大小,根據(jù)環(huán)境的不同可能是4K, 8K或16K。
在linux系統(tǒng)中你可以通過下面的命令得到分頁大小:
getconf PAGESIZE
返回的單位為bytes。
指令示例:
fastcgi_buffers 256 4k; # 設(shè)置緩沖區(qū)大小為4k + 256 * 4k = 1028k
這意味著所有FastCGI返回的應(yīng)答,nginx將超過1M的部分寫入磁盤,1M以內(nèi)的部分寫入內(nèi)存。
4.fastcgi_cache
語法:fastcgi_cache zone|off;
默認(rèn)值:off
使用字段:http, server, location
為緩存實(shí)際使用的共享內(nèi)存指定一個(gè)區(qū)域,相同的區(qū)域可以用在不同的地方。
5.fastcgi_cache_key
語法:fastcgi_cache_key line
默認(rèn)值:none
使用字段:http, server, location
設(shè)置緩存的關(guān)鍵字,如:
fastcgi_cache_key localhost:9000$request_uri;
6.fastcgi_cache_path
語法:fastcgi_cache_path path [levels=m:n] keys_zone=name:size [inactive=time] [max_size=size]
默認(rèn)值:none
使用字段:http
clean_time參數(shù)在0.7.45版本中已經(jīng)移除。
這個(gè)指令指定FastCGI緩存的路徑以及其他的一些參數(shù),所有的數(shù)據(jù)以文件的形式存儲(chǔ),緩存的關(guān)鍵字(key)和文件名為代理的url計(jì)算出的MD5值。
Level參數(shù)設(shè)置緩存目錄的目錄分級(jí)以及子目錄的數(shù)量,例如指令如果設(shè)置為:
fastcgi_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
那么數(shù)據(jù)文件將存儲(chǔ)為:
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
緩存中的文件首先被寫入一個(gè)臨時(shí)文件并且隨后被移動(dòng)到緩存目錄的最后位置,0.8.9版本之后可以將臨時(shí)文件和緩存文件存儲(chǔ)在不同的文件系統(tǒng),但是需要明白這種移動(dòng)并不是簡單的原子重命名系統(tǒng)調(diào)用,而是整個(gè)文件的拷貝,所以最好在fastcgi_temp_path和fastcgi_cache_path的值中使用相同的文件系統(tǒng)。
另外,所有活動(dòng)的關(guān)鍵字及數(shù)據(jù)相關(guān)信息都存儲(chǔ)于共享內(nèi)存池,這個(gè)值的名稱和大小通過key_zone參數(shù)指定,inactive參數(shù)指定了內(nèi)存中的數(shù)據(jù)存儲(chǔ)時(shí)間,默認(rèn)為10分鐘。
max_size參數(shù)設(shè)置緩存的最大值,一個(gè)指定的cache manager進(jìn)程將周期性的刪除舊的緩存數(shù)據(jù)。
7.fastcgi_cache_methods
在緩存FastCGI請(qǐng)求中允許哪些http方法。
語法:fastcgi_cache_methods [GET HEAD POST];
默認(rèn)值:fastcgi_cache_methods GET HEAD;
使用字段:main,http,location
這個(gè)指令指定在緩存FastCGI請(qǐng)求中允許哪些http方法。
無法禁用GET/HEAD ,即使你只是這樣設(shè)置:
fastcgi_cache_methods POST; #GET和HEAD依然可用
8.fastcgi_cache_min_uses
語法:fastcgi_cache_min_uses n
默認(rèn)值:fastcgi_cache_min_uses 1
使用字段:http, server, location
指令指定了經(jīng)過多少次請(qǐng)求的相同URL將被緩存。
9.fastcgi_cache_use_stale
語法:fastcgi_cache_use_stale [updating|error|timeout|invalid_header|http_500]
默認(rèn)值:fastcgi_cache_use_stale off;
使用字段:http, server, location
在某些網(wǎng)關(guān)錯(cuò)誤、超時(shí)的情況下,nginx都將傳送過期的緩存數(shù)據(jù)。
10.fastcgi_cache_valid
語法:fastcgi_cache_valid [http_error_code|time]
默認(rèn)值:none
使用字段:http, server, location
為指定的http返回代碼指定緩存時(shí)間,例如:
fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 404 1m;
將響應(yīng)狀態(tài)碼為200和302緩存10分鐘,404緩存1分鐘。
默認(rèn)情況下緩存只處理200,301,302的狀態(tài)。
同樣也可以在指令中使用any表示任何一個(gè)。
fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 301 1h;
fastcgi_cache_valid any 1m;
11.fastcgi_connect_timeout
語法:fastcgi_connect_timeout time
默認(rèn)值:fastcgi_connect_timeout 60
使用字段:http, server, location
指定同F(xiàn)astCGI服務(wù)器的連接超時(shí)時(shí)間,這個(gè)值不能超過75秒。
12.fastcgi_index
語法:fastcgi_index file
默認(rèn)值:none
使用字段:http, server, location
如果URI以斜線結(jié)尾,文件名將追加到URI后面,這個(gè)值將存儲(chǔ)在變量$fastcgi_script_name中。例如:
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
請(qǐng)求”/page.php”的參數(shù)SCRIPT_FILENAME將被設(shè)置為”/home/www/scripts/php/page.php”,但是”/“為”/home/www/scripts/php/index.php”。
13.fastcgi_hide_header
語法:fastcgi_hide_header name
使用字段:http, server, location
默認(rèn)情況下nginx不會(huì)將來自FastCGI服務(wù)器的”Status”和”X-Accel-…“頭傳送到客戶端,這個(gè)參數(shù)也可以隱藏某些其它的頭。
如果必須傳遞”Status”和”X-Accel-…“頭,則必須使用fastcgi_pass_header強(qiáng)制其傳送到客戶端。
14.fastcgi_ignore_client_abort
語法:fastcgi_ignore_client_abort on|off
默認(rèn)值:fastcgi_ignore_client_abort off
使用字段:http, server, location
如果當(dāng)前連接請(qǐng)求FastCGI服務(wù)器失敗,為防止其與nginx服務(wù)器斷開連接,可以用這個(gè)指令。
15.fastcgi_ignore_headers
語法:fastcgi_ignore_headers name [name…]
使用字段:http, server, location
這個(gè)指令禁止處理一些FastCGI服務(wù)器應(yīng)答的頭部字段,比如可以指定像”X-Accel-Redirect”, “X-Accel-Expires”, “Expires”或”Cache-Control”等。
16.fastcgi_intercept_errors
語法:fastcgi_intercept_errors on|off
默認(rèn)值:fastcgi_intercept_errors off
使用字段:http, server, location
這個(gè)指令指定是否傳遞4xx和5xx錯(cuò)誤信息到客戶端,或者允許nginx使用error_page處理錯(cuò)誤信息。
你必須明確的在error_page中指定處理方法使這個(gè)參數(shù)有效,正如Igor所說“如果沒有適當(dāng)?shù)奶幚矸椒ǎ琻ginx不會(huì)攔截一個(gè)錯(cuò)誤,這個(gè)錯(cuò)誤不會(huì)顯示自己的默認(rèn)頁面,這里允許通過某些方法攔截錯(cuò)誤。
17.fastcgi_max_temp_file_size
語法:fastcgi_max_temp_file_size 0
默認(rèn)值:?
使用字段:?
根據(jù)源代碼關(guān)閉FastCGI緩沖。
18.fastcgi_no_cache
語法:fastcgi_no_cache variable […]
默認(rèn)值:None
使用字段:http, server, location
確定在何種情況下緩存的應(yīng)答將不會(huì)使用,示例:
fastcgi_no_cache $cookie_nocache $arg_nocache$arg_comment;
fastcgi_no_cache $http_pragma $http_authorization;
如果為空字符串或者等于0,表達(dá)式的值等于false,例如,在上述例子中,如果在請(qǐng)求中設(shè)置了cookie “nocache”,緩存將被繞過。
19.fastcgi_next_upstream
語法:fastcgi_next_upstream error|timeout|invalid_header|http_500|http_503|http_404|off
默認(rèn)值:fastcgi_next_upstream error timeout
使用字段:http, server, location
指令指定哪種情況請(qǐng)求將被轉(zhuǎn)發(fā)到下一個(gè)FastCGI服務(wù)器:
error — 傳送中的請(qǐng)求或者正在讀取應(yīng)答頭的請(qǐng)求在連接服務(wù)器的時(shí)候發(fā)生錯(cuò)誤。
timeout — 傳送中的請(qǐng)求或者正在讀取應(yīng)答頭的請(qǐng)求在連接服務(wù)器的時(shí)候超時(shí)。
invalid_header — 服務(wù)器返回空的或者無效的應(yīng)答。
http_500 — 服務(wù)器返回500應(yīng)答代碼。
http_503 — 服務(wù)器返回503應(yīng)答代碼。
http_404 — 服務(wù)器返回404應(yīng)答代碼。
off — 禁止請(qǐng)求傳送到下一個(gè)FastCGI服務(wù)器。
注意傳送請(qǐng)求在傳送到下一個(gè)服務(wù)器之前可能已經(jīng)將空的數(shù)據(jù)傳送到了客戶端,所以,如果在數(shù)據(jù)傳送中有錯(cuò)誤或者超時(shí)發(fā)生,這個(gè)指令可能無法修復(fù)一些傳送錯(cuò)誤。
20.fastcgi_param
語法:fastcgi_param parameter value
默認(rèn)值:none
使用字段:http, server, location
指定一些傳遞到FastCGI服務(wù)器的參數(shù)。
可以使用字符串,變量,或者其組合,這里的設(shè)置不會(huì)繼承到其他的字段,設(shè)置在當(dāng)前字段會(huì)清除掉任何之前的定義。
下面是一個(gè)PHP需要使用的最少參數(shù):
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
PHP使用SCRIPT_FILENAME參數(shù)決定需要執(zhí)行哪個(gè)腳本,QUERY_STRING包含請(qǐng)求中的某些參數(shù)。
如果要處理POST請(qǐng)求,則需要另外增加三個(gè)參數(shù):
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
如果PHP在編譯時(shí)帶有–enable-force-cgi-redirect,則必須傳遞值為200的REDIRECT_STATUS參數(shù):
fastcgi_param REDIRECT_STATUS 200;
21.fastcgi_pass
語法:fastcgi_pass fastcgi-server
默認(rèn)值:none
使用字段:http, server, location
指定FastCGI服務(wù)器監(jiān)聽端口與地址,可以是本機(jī)或者其它:
fastcgi_pass localhost:9000;
使用Unix socket:
fastcgi_pass unix:/tmp/fastcgi.socket;
同樣可以使用一個(gè)upstream字段名稱:
upstream backend {
server localhost:1234;
}
fastcgi_pass backend;
fastcgi_pass_header
語法:fastcgi_pass_header name
默認(rèn)值:none
使用字段:http, server, location
22.fastcgi_read_timeout
語法:fastcgi_read_timeout time
默認(rèn)值:fastcgi_read_timeout 60
使用字段:http, server, location
前端FastCGI服務(wù)器的響應(yīng)超時(shí)時(shí)間,如果有一些直到它們運(yùn)行完才有輸出的長時(shí)間運(yùn)行的FastCGI進(jìn)程,或者在錯(cuò)誤日志中出現(xiàn)前端服務(wù)器響應(yīng)超時(shí)錯(cuò)誤,可能需要調(diào)整這個(gè)值。
23.fastcgi_redirect_errors
語法:fastcgi_redirect_errors on|off
指令重命名為fastcgi_intercept_errors。
24.fastcgi_send_timeout
語法:fastcgi_send_timeout time
默認(rèn)值:fastcgi_send_timeout 60
使用字段:http, server, location
指令為上游服務(wù)器設(shè)置等待一個(gè)FastCGI進(jìn)程的傳送數(shù)據(jù)時(shí)間,如果有一些直到它們運(yùn)行完才有輸出的長時(shí)間運(yùn)行的FastCGI進(jìn)程,那么可以修改這個(gè)值,如果你在上游服務(wù)器的error log里面發(fā)現(xiàn)一些超時(shí)錯(cuò)誤,那么可以恰當(dāng)?shù)脑黾舆@個(gè)值。
指令指定請(qǐng)求服務(wù)器的超時(shí)時(shí)間,指完成了2次握手的連接,而不是完整的連接,如果在這期間客戶端沒有進(jìn)行數(shù)據(jù)傳遞,那么服務(wù)器將關(guān)閉這個(gè)連接。
25.fastcgi_split_path_info
語法:fastcgi_split_path_info regex
使用字段:location
可用版本:0.7.31以上
這個(gè)指令允許為CGI specification設(shè)置SCRIPT_FILENAME (SCRIPT_NAME)和PATH_INFO變量。正則包含兩個(gè)組:
處理請(qǐng)求的腳本路徑–對(duì)應(yīng)$fastcgi_script_name。
腳本參數(shù)的值–對(duì)應(yīng)$fastcgi_path_info。
下面是一個(gè)示例,腳本show.php接受字符串參數(shù): article/0001,下面的例子將處理路徑妥善分裂:
location ~ ^.+\.php {
(...)
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
(...)
}
請(qǐng)求”/show.php/article/0001”的參數(shù)SCRIPT_FILENAME將設(shè)置為”/path/to/php/show.php”,參數(shù)PATH_INFO為”/article/0001”。
26.fastcgi_store
語法:fastcgi_store [on | off | path]
默認(rèn)值:fastcgi_store off
使用字段:http, server, location
制定了存儲(chǔ)前端文件的路徑,參數(shù)on指定了將使用root和alias指令相同的路徑,off禁止存儲(chǔ),此外,參數(shù)中可以使用變量使路徑名更明確:
fastcgi_store /data/www$original_uri;
應(yīng)答中的”Last-Modified”頭將設(shè)置文件的最后修改時(shí)間,為了使這些文件更加安全,可以將其在一個(gè)目錄中存為臨時(shí)文件,使用fastcgi_temp_path指令。
這個(gè)指令可以用在為那些不是經(jīng)常改變的后端動(dòng)態(tài)輸出創(chuàng)建本地拷貝的過程中。如:
location /images/ {
root /data/www;
error_page 404 = /fetch$uri;
}
location /fetch {
internal;
fastcgi_pass fastcgi://backend;
fastcgi_store on;
fastcgi_store_access user:rw group:rw all:r;
fastcgi_temp_path /data/temp;
alias /data/www;
}
fastcgi_store并不是緩存,某些需求下它更像是一個(gè)鏡像。
27.fastcgi_store_access
語法:fastcgi_store_access users:permissions [users:permission …]
默認(rèn)值:fastcgi_store_access user:rw
使用字段:http, server, location
這個(gè)參數(shù)指定創(chuàng)建文件或目錄的權(quán)限,例如:
fastcgi_store_access user:rw group:rw all:r;
如果要指定一個(gè)組的人的相關(guān)權(quán)限,可以不寫用戶,如:
fastcgi_store_access group:rw all:r;
28.fastcgi_temp_path
語法:fastcgi_temp_path path [level1 [level2 [level3]]]
默認(rèn)值:fastcgi_temp_path fastcgi_temp
使用字段:http, server, location
指令指定存儲(chǔ)從別的服務(wù)器傳送來的數(shù)據(jù)臨時(shí)文件路徑,同樣可以指定三級(jí)目錄已經(jīng)哈希存儲(chǔ),level的值指定為哈希設(shè)置多少標(biāo)記,
例如,在下列配置中:
fastcgi_temp_path /spool/nginx/fastcgi_temp 1 2;
臨時(shí)文件類似如下:
/spool/nginx/fastcgi_temp/7/45/00000123457
傳送到FastCGI服務(wù)器的相關(guān)參數(shù)
請(qǐng)求頭是以參數(shù)的形式傳送到FastCGI服務(wù)器,以具體應(yīng)用和腳本運(yùn)行在FastCGI服務(wù)器上,這些參數(shù)通常以環(huán)境變量的形式取得,
例如,”User-agent”頭以HTTP_USER_AGENT參數(shù)傳遞,除此之外還有一些其他的http頭,都可以用fastcgi_param指令自由傳遞。
感謝老鐵
https://cloud.tencent.com/developer/article/1521284

浙公網(wǎng)安備 33010602011771號(hào)