首頁 > 運維 > Nginx > 主體

nginx頁面快取怎麼配置

WBOY
發布: 2023-05-30 19:13:30
轉載
3011 人瀏覽過

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 


使用欄位

預設值:none 

。 :http 
指令指定快取的路徑和一些其他參數,快取的資料儲存在檔案中,並且使用代理url的雜湊值作為關鍵字與檔案名稱。 levels參數指定快取的子目錄數,例如:

proxy_cache_path /data/nginx/cache levels=1:2  keys_zone=one:10m;
登入後複製

檔案名稱類似於:

/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
登入後複製

levels指定目錄結構,可以使用任意的1位元或2位元數字作為目錄結構,如x, x:x,或x:x:x 例如: “2”, “2:2”, “1:1:2“,但是最多只能是三級目錄。 


所有活動的key和元資料儲存在共享的記憶體池中,這個區域用keys_zone參數指定。 one指的是共享池的名稱,10m指的是共享池的大小。


注意每一個定義的記憶體池必須是不重複的路徑,例如:

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;
登入後複製

如果在inactive參數指定的時間內快取的資料沒有被要求則被刪除,預設inactive為10分鐘。一個名為cache manager的進程控制磁碟的快取大小,它被用來刪除不活動的快取和控制快取大小,這些都在max_size參數中定義,當目前快取的值超出max_size指定的值之後,超過其大小後最少使用資料(lru替換演算法)將被刪除。記憶體池的大小依照快取頁數的比例進行設置,一個頁面(檔案)的元資料大小依照作業系統來定,如freebsd/i386下為64字節,freebsd/amd64下為128位元組。


proxy_cache


proxy_cache


語法:proxy_cache zone_name; 


預設值:none 


#使用欄位:http, server, location 

設定一個快取區域的名稱,一個相同的區域可以在不同的地方使用。

在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 


使用欄位:

nginx頁面快取怎麼配置#預設值: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的應答進行快取。 


#同樣可以使用any參數任何回應。

proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
登入後複製
    2.定義一個簡單nginx快取伺服器
  • [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
    登入後複製
  • 4.重新載入配置文件
  • [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瀏覽器)

  • #註,大家用Google瀏覽器測試的時候,可以按f12呼叫開發工具,選擇network選項,我們可以看到,response headers,在這裡我們可以看到,我們請求的是否是緩存,但現在還看不到,下面我們來配置一下,再來測試。
  • 6. 快取變數說明
  • $server_addr

伺服器位址,在完成一次系統呼叫後可以確定這個值,如果要繞開系統調用,則必須在listen中指定地址並且使用bind參數。

$upstream_cache_status

0.8.3版本中其值可能為:nginx頁面快取怎麼配置

#####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中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板