nginx實現緩存功能

Nginx實現緩存功能:nginx

proxy_cache_path
      語法: proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];
      默認值:None
      使用字段:http

        指令指定緩存的路徑和一些其餘參數,緩存的數據存儲在文件中。緩存的文件名和key爲代理URL的MD5 碼。levels參數指定緩存的子目錄數,全部活動的key和元數據存儲在共享的內存區域中,這個區域用keys_zone參數指定,若是在inactive參數指定的時間內緩存的數據沒有被請求則被刪除,默認inactive爲10分鐘。算法

cache manager進程控制磁盤的緩存大小,在max_size參數中定義,超過其大小後最少使用數據將被刪除。區域的大小按照緩存頁面數的比例進行設置,一個頁面(文件)的元數據大小按照操做系統來定,FreeBSD/i386下爲64字節,FreeBSD/amd64下爲128字節,當區域滿了之後key將按照LRU(最近最少使用算法)進行處理。vim

proxy_cache_path和proxy_temp_path應該使用在相同的文件系統上。後端

proxy_cache
       語法:proxy_cache  zone_name;
       默認值:None
       使用字段:http, server, location

         設置一個緩存區域的名稱,一個相同的區域能夠在不一樣的地方使用。在0.7.48後,緩存遵循後端的」Expires」, 「Cache-Control: no-cache」, 「Cache-Control: max-age=XXX」以及其餘等。然而,目前nginx會忽略一些緩存控制指令,如:」private」和」no-store」,一樣,nginx在緩存過程當中不會處理」Vary」頭,爲了確保一些私有數據不被全部的用戶看到,後端必須設置 「no-cache」或者」max-age=0″頭,或者proxy_cache_key包含用戶指定的數據如$http_cookie_xxx,在proxy_cache_key中使用一部分cookie的值能夠防止緩存私有數據,因此能夠分別指定location以便分開私有數據和公有數據。緩存指令依賴代理緩衝區(buffers),若是proxy_buffers設置爲off,緩存不會生效。瀏覽器

proxy_cache_valid
       語法:proxy_cache_valid reply_code [reply_code ...] time;
       默認值:None
       使用字段:http, server, location

     該指令爲不一樣的http響應狀態碼設置不一樣的緩存時間緩存

        編輯主配置文件設置緩存功能cookie

            1.# vim /etc/nginx/nginx.conf         ide

###緩存的路徑和一些其餘參數,keys_zone的值很重要, proxy_cache的值要與之同樣
proxy_cache_path /nginx/cache/first levels=1:2:1 keys_zone=first:20m max_size=1g;
   server {
          add_header X-Cache "$upstream_cache_status from $server_addr"; ##添加一個首部標記緩存是否命中
           location / {
               proxy_pass  http://backend;  
              proxy_set_header  X-Real-IP  $remote_addr;
              proxy_cache first;  
              proxy_cache_valid 200 10m;   ##指定響應狀態碼爲200的頁面緩存10m
          }
    }

             2.建立緩存目錄工具

                # mkdir /nginx/cache/first -pv測試

             3.重啓服務並且進行測試

                # service nginx restart

PS: $upstream_cache_status

      MISS: 未命中

      EXPIRED - expired。請求被傳送到後端。

      UPDATING - expired。因爲proxy/fastcgi_cache_use_stale正在更新,將使用舊的應答。

      STALE - expired。因爲proxy/fastcgi_cache_use_stale,後端將獲得過時的應答。

      HIT: 命中

測試時若是是Chrome瀏覽器按f12調用調試工具,火狐的話安裝firebug插件

相關文章
相關標籤/搜索