proxy_cache的作用是緩存后端服務(wù)器的內(nèi)容,可能是任何內(nèi)容,包括靜態(tài)的和動(dòng)態(tài)。
fastcgi_cache的作用是緩存fastcgi生成的內(nèi)容,很多情況是php生成的動(dòng)態(tài)的內(nèi)容俭嘁。
proxy_cache緩存減少了nginx與后端通信的次數(shù),節(jié)省了傳輸時(shí)間和后端寬帶乳愉。
fastcgi_cache緩存減少了nginx與php的通信的次數(shù)兄淫。更減輕了php和數(shù)據(jù)庫(kù)(mysql)的壓力,這比用memcached之類的緩存要輕松得多蔓姚。
proxy_cache和fastcgi_cache構(gòu)成了Nginx的緩存
proxy_cache主要用于反向代理時(shí)捕虽,對(duì)后端內(nèi)容源服務(wù)器進(jìn)行緩存
fastcgi_cache主要用于對(duì)FastCGI的動(dòng)態(tài)程序進(jìn)行緩存。兩者的功能基本上一樣坡脐。
附上nginx的httpd 配置
fastcgi_connect_timeout 300;
指定連接到后端FastCGI的超時(shí)時(shí)間泄私。
fastcgi_send_timeout 300;
向FastCGI傳送請(qǐng)求的超時(shí)時(shí)間,這個(gè)值是指已經(jīng)完成兩次握手后向FastCGI傳送請(qǐng)求的超時(shí)時(shí)間。
fastcgi_read_timeout 300;
接收FastCGI應(yīng)答的超時(shí)時(shí)間晌端,這個(gè)值是指已經(jīng)完成兩次握手后接收FastCGI應(yīng)答的超時(shí)時(shí)間捅暴。
fastcgi_buffer_size 32k;
指定讀取FastCGI應(yīng)答第一部分需要用多大的緩沖區(qū),一般第一部分應(yīng)答不會(huì)超過(guò)1k咧纠,由于頁(yè)面大小為4k蓬痒,所以這里設(shè)置為4k。
fastcgi_buffers 4 32k;
指定本地需要用多少和多大的緩沖區(qū)來(lái)緩沖FastCGI的應(yīng)答請(qǐng)求漆羔。如果一個(gè)PHP腳本所產(chǎn)生的頁(yè)面大小為256KB梧奢,那么會(huì)為其分配4個(gè)64KB的緩沖區(qū)來(lái)緩存;如果頁(yè)面大小大于256KB演痒,那么大于256KB的部分會(huì)緩存到fastcgi_temp指定的路徑中亲轨,但是這并不是好方法,因?yàn)閮?nèi)存中的數(shù)據(jù)處理速度要快于硬盤(pán)鸟顺。一般這個(gè)值應(yīng)該為站點(diǎn)中PHP腳本所產(chǎn)生的頁(yè)面大小的中間值惦蚊,如果站點(diǎn)大部分腳本所產(chǎn)生的頁(yè)面大小為256KB,那么可以把這個(gè)值設(shè)置為“16 16k”讯嫂、“4 64k”等蹦锋。
fastcgi_busy_buffers_size 64k;
默認(rèn)值是fastcgi_buffers的兩倍。
fastcgi_temp_file_write_size 64k;
在寫(xiě)入fastcgi_temp_path時(shí)將用多大的數(shù)據(jù)塊端姚,默認(rèn)值是fastcgi_buffers的兩倍晕粪。
fastcgi_cache_path /var/logs/nginx/fastcgi_cache_dir levels=1:2 keys_zone=cache_fastcgi:128m inactive=1d max_size=10g;
這個(gè)指令為FastCGI緩存指定一個(gè)路徑挤悉,目錄結(jié)構(gòu)等級(jí)渐裸,關(guān)鍵字區(qū)域存儲(chǔ)時(shí)間和非活動(dòng)刪除時(shí)間。以及最大占用空間装悲。
然后在server的location里面調(diào)用昏鹃,如下緩存php文件:
location ~ \.php$ {
root /var/www/html/yan_blog;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_cache cache_fastcgi;
#表示開(kāi)啟FastCGI緩存并為其指定一個(gè)名稱。
fastcgi_cache_valid 200 302 301 1h;
fastcgi_cache_valid any 1m;
#為指定的應(yīng)答代碼指定緩存時(shí)間诀诊,如上例中將200洞渤,302 301應(yīng)答緩存一小時(shí),其他為1分鐘属瓣。
fastcgi_cache_min_uses 1;
#設(shè)置鏈接請(qǐng)求幾次就被緩存载迄。
fastcgi_cache_use_stale error timeout invalid_header http_500;
#定義哪些情況下用過(guò)期緩存
fastcgi_cache_key $request_method://$host$request_uri;
#注意一定要加上$request_method作為cache key,否則如果HEAD類型的先請(qǐng)求會(huì)導(dǎo)致后面的GET請(qǐng)求返回為空
}
設(shè)置了之后重啟nginx就可以生效了抡蛙,這個(gè)時(shí)候再訪問(wèn)php的頁(yè)面的話护昧,就會(huì)被緩存了,可以查看/var/logs/nginx/fastcgi_cache_dir這個(gè)目錄下面是有緩存文件的粗截。
注意
如果更改了緩存目錄的路徑惋耙,一定要把緩存的名稱也改掉,后端調(diào)用的名稱也同步改掉,如果只改掉了緩存目錄绽榛,不改緩存名稱的話湿酸,緩存的時(shí)候還是會(huì)緩存到之前的路徑下面去,但是調(diào)用的時(shí)候調(diào)用的是新的路徑灭美,這個(gè)時(shí)候就會(huì)出現(xiàn)找不到的情況推溃。