nginx之頁面快取
1.指令說明
proxy_cache_path
#語法:proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];
預設值:none
使用欄位
預設值:none
使用欄位預設值:none
。 :http
指令指定快取的路徑和一些其他參數,快取的資料儲存在檔案中,並且使用代理url的雜湊值作為關鍵字與檔案名稱。 levels參數指定快取的子目錄數,例如:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
檔案名稱類似於:
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029clevels指定目錄結構,可以使用任意的1位元或2位元數字作為目錄結構,如x, x:x,或x:x:x 例如: “2”, “2:2”, “1:1:2“,但是最多只能是三級目錄。
proxy_cache_path /data/nginx/cache/one levels=1 keys_zone=one:10m; proxy_cache_path /data/nginx/cache/two levels=2:2 keys_zone=two:100m; proxy_cache_path /data/nginx/cache/three levels=1:1:2 keys_zone=three:1000m;
proxy_cache
設定一個快取區域的名稱,一個相同的區域可以在不同的地方使用。
在0.7.48後,快取遵循後端的”expires”, “cache-control: no-cache”, “cache-control: max-age=xxx”頭部字段,0.7. 66版本以後,”cache-control:“private”和”no-store”頭同樣被遵循。nginx在緩存過程中不會處理”vary”頭,為了確保一些私有數據不被所有的用戶看到,後端必須設定「no-cache」或」max-age=0」頭,或proxy_cache_key包含使用者指定的資料如$cookie_xxx,使用cookie的值作為proxy_cache_key的一部分可以防止快取私有數據,所以可以在不同的location中分別指定proxy_cache_key的值以便分開私有資料和公有資料。
快取指令依賴代理緩衝區(buffers),如果proxy_buffers設定為off,快取不會生效。
#proxy_cache_valid
語法:proxy_cache_valid reply_code [reply_code …] time;
#預設值:none#預設值:none
使用欄位: http, server, location
為不同的應答設定不同的快取時間,例如:
proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;
為應答代碼為200和302的設定快取時間為10分鐘,404代碼快取1分鐘。
如果只定義時間:
proxy_cache_valid 5m;那麼只對代碼為200, 301和302的應答進行快取。
proxy_cache_valid 200 302 10m; proxy_cache_valid 301 1h; proxy_cache_valid any 1m;
[root@nginx ~]# vim /etc/nginx/nginx.conf proxy_cache_path /data/nginx/cache/webserver levels=1:2 keys_zone=webserver:20m max_size=1g; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://webservers; proxy_set_header x-real-ip $remote_addr; proxy_cache webserver; proxy_cache_valid 200 10m; } }
3.新快取目錄
[root@nginx ~]# mkdir -pv /data/nginx/cache/webserver
[root@nginx webserver]# service nginx reload nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful 重新载入 nginx: [确定]
5.下面我們來測試一下(Google瀏覽器)
$server_addr
$upstream_cache_status
0.8.3版本中其值可能為:
#####miss 未命中##### #######expired - expired。請求被傳送到後端。 ############updating - expired。因為proxy/fastcgi_cache_use_stale正處於更新中,所以會使用舊版的回應。 ############stale - expired。當使用proxy/fastcgi_cache_use_stale時,後端會接收到過期的回應。 ############hit 命中#########[root@nginx ~]# vim /etc/nginx/nginx.conf proxy_cache_path /data/nginx/cache/webserver levels=1:2 keys_zone=webserver:20m max_size=1g; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #增加两头部 add_header x-via $server_addr; add_header x-cache $upstream_cache_status; location / { proxy_pass http://webservers; proxy_set_header x-real-ip $remote_addr; proxy_cache webserver; proxy_cache_valid 200 10m; } }###7.重新載入設定檔###
[root@nginx ~]# service nginx reload nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful 重新载入 nginx: [确定]###8.測試一下##### ##########
注,从图中我们可以看到,我们访问的服务器是192.168.18.208,缓存命中。大家可以看到是不是很直观啊。下面我们看一下缓存目录。
9.查看一下缓存目录
[root@nginx ~]# cd /data/nginx/cache/webserver/f/63/ [root@nginx 63]# ls 681ad4c77694b65d61c9985553a2763f
注,缓存目录里确实有缓存文件。
以上是nginx頁面快取怎麼配置的詳細內容。更多資訊請關注PHP中文網其他相關文章!