Nginx 靜態壓縮/緩存

                                            對靜態壓縮的一些配置信息javascript

# 這個將爲打開文件指定緩存,默認是沒有啓用的,max 指定緩存數量,
    # 建議和打開文件數一致,inactive 是指通過多長時間文件沒被請求後刪除緩存。
    open_file_cache max=204800 inactive=20s;

    # open_file_cache 指令中的inactive 參數時間內文件的最少使用次數,
    # 若是超過這個數字,文件描述符一直是在緩存中打開的,如上例,若是有一個
    # 文件在inactive 時間內一次沒被使用,它將被移除。
    open_file_cache_min_uses 1;

    # 這個是指多長時間檢查一次緩存的有效信息
    open_file_cache_valid 30s;

    # 默認狀況下,Nginx的gzip壓縮是關閉的, gzip壓縮功能就是可讓你節省不
    # 少帶寬,可是會增長服務器CPU的開銷哦,Nginx默認只對text/html進行壓縮 ,
    # 若是要對html以外的內容進行壓縮傳輸,咱們須要手動來設置。
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;//手動設置

實驗以下:當沒有設置壓縮類型時的狀況,只會對text/html類型的文件進行壓縮。php

配置文件nginx.confcss

http {
   server {
        listen 80;
        gzip on;
        location /welcome{
            default_type text/html;
            content_by_lua '
                ngx.say("<p>welcome,here!</p>")
            ';
        }
	location /index.html{
	    root /usr/local/work/yidaren.top/html;	
	}
	location /{
	    proxy_pass http://127.0.0.1/index.html;
	}
	location ~*\.js$ { 
            root /usr/local/work/yidaren.top;
   	}
    }
}

 請求welcome和js對比():html

配置反向緩存文件,專門給動態生成頁面配置的數據:java

1 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,緩存不會生效。

2 proxy_cache_key

語法:proxy_cache_key line;
默認值:$scheme$proxy_host$request_uri;
使用字段:http, server, location
指令指定了包含在緩存中的緩存關鍵字。

proxy_cache_key "$host$request_uri$cookie_user";
proxy_cache_key "$scheme$host$request_uri";

3 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參數指定緩存的子目錄數,例如:
proxy_cache_path  /data/nginx/cache  levels=1:2   keys_zone=one:10m;
文件名相似於:
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
全部活動的key和元數據存儲在共享的內存區域中,這個區域用keys_zone參數指定,若是在inactive參數指定的時間內緩存的數據沒有被請求則被刪除,默認inactive爲10分鐘。
cache manager進程控制磁盤的緩存大小,在max_size參數中定義,超過其大小後最少使用數據將被刪除。
區域的大小按照緩存頁面數的比例進行設置,一個頁面(文件)的元數據大小按照操做系統來定,FreeBSD/i386下爲64字節,FreeBSD/amd64下爲128字節,當區域滿了之後key將按照LRU(最近最少使用算法)進行處理。
proxy_cache_path和proxy_temp_path應該使用在相同的文件系統上。


4 proxy_cache_methods

語法:proxy_cache_methods [GET HEAD POST];
默認值:proxy_cache_methods GET HEAD;
使用字段:http, server, location
GET/HEAD用來裝飾語句,即你沒法禁用GET/HEAD即便你只使用下列語句設置:

proxy_cache_methods POST;

5 proxy_cache_min_uses

語法:proxy_cache_min_uses the_number;
默認值:proxy_cache_min_uses 1;
使用字段:http, server, location
多少次的查詢後應答將被緩存,默認1。

6 proxy_cache_valid

語法:proxy_cache_valid reply_code [reply_code ...] time;
默認值:None
使用字段:http, server, location
爲不一樣的應答設置不一樣的緩存時間,例如:
  proxy_cache_valid  200 302  10m;
  proxy_cache_valid  404      1m;

  proxy_cache_valid  5m;

  proxy_cache_valid  200 302 10m;
  proxy_cache_valid  301 1h;
  proxy_cache_valid  any 1m;

7 proxy_cache_use_stale


爲了防止緩存失效(在多個線程同時更新本地緩存時),你能夠指定’updating’參數,它將保證只有一個線程去更新緩存,而且在這個線程更新緩存的過程當中其餘的線程只會響應當前緩存中的過時版本。


代碼及configure配置:
在ngx_http_proxy_module.c裏面定義了每一個指令的鉤子(即callback),它們在讀取配置文件時會被調用。在configure的時候只須要把「HTTP_CACHE」設置爲YES(能夠找到auto/options裏面HTTP_CACHE那行)。「proxy_cache_purge」指令須要下載nginx add-ons裏面的「Cache Purge」模塊,並在configure的時候用"--add-module="來加載代碼。

 配置文件以下:nginx

http {
   proxy_cache_path /usr/local/work/cache levels=1:2 keys_zone=my_cache:10m max_size=100m inactive=60m
   use_temp_path=off;
   server {
        listen 80;
        gzip on;
        location /welcome{
            default_type text/html;
            content_by_lua '
                ngx.say("<p>welcome,here!</p>")
            ';
        }
	location /index.html{
	    root /usr/local/work/yidaren.top/html;	
	}
	location /{
	    proxy_pass http://127.0.0.1/index.html;
	}
	location ~*\.js$ {
	    proxy_cache my_cache;
	    proxy_cache_key $host$uri;
            proxy_cache_valid 200 304 30m; 
            root /usr/local/work/yidaren.top;
   	}
    }
}

驗證以下:算法

網頁加載效果以下:後端

如何驗證,咱們能夠進入我設置cache的頁面使用 ll命令就能夠查看結果緩存

[root@iZm5eg3u73g9nvjmiwu3opZ caches]# ll
總用量 8
drwx------ 3 nobody nobody 4096 10月 20 22:56 3
drwx------ 3 nobody root   4096 10月 20 22:56 temp

證實對反向代理的數據進行了緩存,這種技術對於反向代理是動態生成數據的狀況下有和強大的效果,例如php,固然lua應該也是能夠的。bash

 

若是你要清除某一個url的緩存文件,就比較悲催了。但也不是不能作到。由於nginx生成url文件的時候,存放的目錄以及生成的哈希文件名都是固定的,你也可使用proxy_cache_key來指定生成的key的字段內容。

若是你掌握它的生成規則,你就能夠寫一個管理器來快速清空單個url緩存。最爛的方法也能夠把緩存目錄清空,接着訪問你要須要單獨清空的url,而後再到緩存目錄裏看看生成的緩存目錄與文件名,再你須要單獨清空這個url的緩存時直接把文件幹掉就好。

自己的靜態文件:

open_file_cache max=102400 inactive=20s;

參考好文章:http://www.qttc.net/201307355.html

               :http://xuewb.com/ngx/static_file.html

               :http://www.cnblogs.com/dudu/p/4597351.html            

紙上得來終覺淺,覺知此事要躬行

相關文章
相關標籤/搜索