官术网_书友最值得收藏!

4.5 Nginx緩存

使用Nginx代理緩存可以減少后端服務(wù)端壓力,提升網(wǎng)站性能,減小并發(fā)延時。Nginx設(shè)置緩存的代碼如代碼清單4-13所示。

代碼清單4-13 Nginx設(shè)置緩存

upstream zachary.sh.cn{
    server 192.168.10.1:8081;
    server 192.168.10.2:8082;
}
proxy_cache_path /cache levels=1:2 keys_zone=cache:10m max_size=10g inactive=60m
use_temp_path=off;
server {
    listen 80;
    server_name zachary.sh.cn;
    index index.html;
    location / {
        proxy_pass http:// zachary.sh.cn;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_cache cache;
        proxy_cache_valid 200 304 6h;
        proxy_cache_valid any 6m;
        proxy_cache_key $uri$request_body;
        proxy_cache_methods GET POST;
        add_header Nginx-Cache "$upstream_cache_status";
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    }
}

在代碼清單4-13中,proxy_cache_path /cache用于設(shè)置Nginx緩存資源的存放地址。各參數(shù)說明如下。

1)levels:按照兩層目錄分層。

2)key_zone:在共享內(nèi)存中設(shè)置一塊存儲區(qū)域來存放緩存的key和metadata(類似使用次數(shù)),Nginx可以快速判斷一個請求是否命中緩存,1MB可以存儲8000個key,10MB可以存儲80000個key。

3)max_size:最大緩存空間,如果不指定,會使用所有硬盤空間,當(dāng)達到配額后,會刪除最少使用的緩存文件。

4)inactive:未被訪問文件在緩存中的保留時間。如果文件60分鐘未被訪問,則不論狀態(tài)是否為expired,緩存控制程序都會刪掉文件。inactive默認是10分鐘。需要注意的是,inactive和expired配置項的含義是不同的,expired只是使緩存過期,但不會刪除緩存文件,inactive是刪除指定時間內(nèi)未被訪問的緩存文件。

5)use_temp_path:如果為off,則Nginx會將緩存文件直接寫入指定的緩存文件中,而不是使用temp_path存儲。official建議為off,因為這可以避免文件在不同文件系統(tǒng)中被不必要拷貝。

6)proxy_cache:用于啟用proxy緩存,并指定key_zone。另外,如果proxy_cache為off,則表示關(guān)閉緩存。

7)proxy_cache_valid:狀態(tài)碼200|304的過期時間為6h,其余狀態(tài)碼6分鐘過期。

8)proxy_cache_key:緩存的key,一般為URL+請求參數(shù)。

9)proxy_cache_methods:支持緩存的請求方式。

10)add_header:增加頭信息,觀察客戶端responce是否命中。

11)proxy_next_upstream:出現(xiàn)502~504或其他錯誤,會跳過此臺服務(wù)器訪問下一臺服務(wù)器。

其中,$upstream_cache_status的可能值如下。

  • MISS:響應(yīng)在緩存中找不到,所以需要在服務(wù)器中取得。
  • HIT:響應(yīng)包含來自緩存的最新且有效的內(nèi)容。
  • STALE:內(nèi)容陳舊是因為原始服務(wù)器不能正確響應(yīng)。需要配置proxy_cache_use_stale。
  • UPDATING:內(nèi)容過期了,是因為相對于之前的請求,響應(yīng)的入口(entry)已經(jīng)更新,并且proxy_cache_use_stale的updating已被設(shè)置。
  • EXPIRED:緩存中的某一項過期了,來自原始服務(wù)器的響應(yīng),包含最新的內(nèi)容。
  • REVALIDATED:proxy_cache_revalidate命令被啟用,經(jīng)過Nginx檢測得知當(dāng)前的緩存內(nèi)容依然有效(If-Modified-Since或者If-None-Match)。

清除Nginx緩存的方法如下:

  • 手動刪除已緩存的數(shù)據(jù),如:rm -rf /cache/*。
  • 通過ngx_cache_purge擴展模塊指定URL來清理緩存。

安裝ngx_cache_purge,如代碼清單4-14所示。

代碼清單4-14 安裝ngx_cache_purge

wget http:// labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar -zxvf ngx_cache_purge-2.3.tar.gz
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=../ngx_cache_purge-2.3
make
make install

查看Nginx插件進程,如代碼清單4-15所示。

代碼清單4-15 查看Nginx插件進程

ps -ef|grep nginx
nginx:master process /usr/local/nginx/sbin/nginx
nginx:worker process
nginx:cache manager process      // 插件進程
nginx:cache loader process       // 插件進程

此時可以通過URL路線來清除緩存。

主站蜘蛛池模板: 长岭县| 吉木乃县| 吐鲁番市| 宜君县| 萨迦县| 海淀区| 南雄市| 根河市| 赣榆县| 沙洋县| 宁津县| 黄浦区| 泸西县| 弥勒县| 井研县| 延川县| 大渡口区| 富源县| 陆河县| 普宁市| 日照市| 潢川县| 大丰市| 隆德县| 申扎县| 合山市| 南昌县| 梧州市| 庆元县| 牙克石市| 库尔勒市| 洛隆县| 建德市| 钟山县| 邳州市| 阿拉善左旗| 临城县| 嵊州市| 岳阳县| 华池县| 松溪县|