最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx服務(wù)器中強(qiáng)制使用緩存的配置及緩存優(yōu)先級(jí)的講解

 更新時(shí)間:2016年01月19日 09:38:41   作者:lmdkfs  
這篇文章主要介紹了Nginx服務(wù)器中強(qiáng)制使用緩存的配置及緩存優(yōu)先級(jí)的講解,一定程度上可以幫助大家解決Nginx不緩存或緩存失效的問題,需要的朋友可以參考下

nginx代理做好了,緩存也配置好了,但是發(fā)現(xiàn)css、js、jpg這些靜態(tài)文件統(tǒng)統(tǒng)都cached成功。但是偏偏頁面文件依舊到源服務(wù)器取。
1. nginx不緩存原因
默認(rèn)情況下,nginx是否緩存是由nginx緩存服務(wù)器與源服務(wù)器共同決定的, 緩存服務(wù)器需要嚴(yán)格遵守源服務(wù)器響應(yīng)的header來決定是否緩存以及緩存的時(shí)常。header主要有如下:

Cache-control:no-cache、no-store

如果出現(xiàn)這兩值,nginx緩存服務(wù)器是絕對(duì)不會(huì)緩存的

Expires:1980-01-01

如果出現(xiàn)日期比當(dāng)前時(shí)間早,也不會(huì)緩存。

2. 解決不緩存方案
2.1 方法一:
修改程序或者源服務(wù)器web程序響應(yīng)的header
 
2.2 方法二:
nginx代理直接加上如下一句:

proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie; 

3.緩存優(yōu)先級(jí)
3.1架構(gòu)圖
client端  <------------------>   nginx cache <------------------>源服務(wù)器
經(jīng)過大量測(cè)試發(fā)現(xiàn):nginx的過期順序是有一個(gè)優(yōu)先級(jí)的。下面首先說明各個(gè)影響緩存過期的因素:
(1)inactive:在proxy_cache_path配置項(xiàng)中進(jìn)行配置,說明某個(gè)緩存在inactive指定的時(shí)間內(nèi)如果不訪問,將會(huì)從緩存中刪除。
(2)源服務(wù)器php頁面中生成的響應(yīng)頭中的Expires,生成語句為:
header("Expires: Fri, 07 Sep 2013 08:05:18 GMT");
(3)源服務(wù)器php頁面生成的max-age,生成語句為:
header("Cache-Control: max-age=60");
(4)nginx的配置項(xiàng) proxy_cache_valid:配置nginx cache中的緩存文件的緩存時(shí)間,如果配置項(xiàng)為:proxy_cache_valid 200 304 2m;說明對(duì)于狀態(tài)為200和304的緩存文件的緩存時(shí)間是2分鐘,兩分鐘之后再訪問該緩存文件時(shí),文件會(huì)過期,從而去源服務(wù)器重新取數(shù)據(jù)。
3.2其次對(duì)需要注意的一點(diǎn):源服務(wù)器的expires和nginx cache的expires配置項(xiàng)的沖突進(jìn)行說明,場(chǎng)景如下
(1)源服務(wù)器端有php文件ta1.php內(nèi)容如下:

<?php
header("Expires: Fri, 07 Sep 2013 08:05:18 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: max-age=60");
echo "ta1";
?>

(2)在nginx cache服務(wù)器端的配置信息如下:

…….
proxy_cache_path /data0/proxy_cache_dir levels=1:2  keys_zone=cache_one:200m inactive=5s max_size=30g;
……..
 
location ~ .*\.(php|jsp|cgi)$
{
  proxy_read_timeout 10s;
  proxy_connect_timeout 10s;
  proxy_set_header Host $host;
  proxy_cache_use_stale updating;
  proxy_cache_key $host$uri$is_args$args;
  proxy_cache cache_one;
  #proxy_ignore_headers "Cache-Control";
  #proxy_hide_header "Cache-Control";
  #proxy_ignore_headers "Expires";
  #proxy_hide_header "Expires";
  proxy_hide_header "Set-Cookie";
  proxy_ignore_headers "Set-Cookie";
  #add_header Cache-Control max-age=60;
  add_header X-Cache '$upstream_cache_status from $server_addr';
  proxy_cache_valid 200 304 2m;
  #proxy_cache_valid any 0m;
  proxy_pass http://backend_server;
  expires 30s;
}
………….

從上面兩項(xiàng)可以看出nginx cache 服務(wù)器中expires的配置是30s,該expires的值直接決定了在瀏覽器端看到的max-age以及expires的值。而源服務(wù)器斷的代碼中設(shè)置的響應(yīng)頭中的max-age為60,expires為Fri, 07 Sep 2013 08:05:18 GMT。這是源服務(wù)器的設(shè)置于nginx-cache的設(shè)置沖突了,那么著兩個(gè)屬性應(yīng)該怎么設(shè)置呢?
這時(shí)client端的max-age與expires的值按照nginx cache中的expires配置項(xiàng)的設(shè)置,即:

Expires Fri, 07 Sep 2012 08:59:16 GMT
Cache-Controlmax-age=30

而nginx cache端的緩存的max-age與expire的值按照源服務(wù)器上的代碼的設(shè)置。即:

Expires Fri, 07 Sep 2013 08:05:18 GMT
Cache-Controlmax-age=60

現(xiàn)在步入正題:
3.3經(jīng)過大量測(cè)試發(fā)現(xiàn):對(duì)緩存的過期與清除起作用的因素的優(yōu)先級(jí)從高到低一次為:
inactive配置項(xiàng)、源服務(wù)器設(shè)置的Expires、源服務(wù)器設(shè)置的Max-Age、proxy_cache_valid配置項(xiàng)
下面通過幾個(gè)實(shí)例對(duì)這幾個(gè)優(yōu)先級(jí)進(jìn)行說明
實(shí)例1:
服務(wù)器端php代碼:

<?php
header("Expires: Fri, 07 Sep 2012 08:03:18 GMT");//其實(shí)是3分鐘之后
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: max-age=180");//2分鐘
//header("Cache-Control: post-check=0, pre-check=0", false);
echo "ta1";
?>

nginx cache 配置項(xiàng)

inactive 4m//4分鐘
proxy_cache_valid 1m//1分鐘

現(xiàn)象:第一次訪問頁面ta1.php之后,各個(gè)時(shí)間的訪問結(jié)果:

  • 1分鐘之后 :HIT//這說明valid沒有起作用
  • 2分鐘之后 :HIT//這說明 源服務(wù)器設(shè)置的max-age沒有起作用
  • 3分鐘之后:MISS//這說明源服務(wù)器設(shè)置的Expires起作用了
  • 4分鐘之后:MISS//這說明inactive起作用了

實(shí)例2:

服務(wù)器端php代碼:

<?php
header("Expires: Fri, 07 Sep 2012 08:03:18 GMT");//3分鐘之后
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: max-age=180");//2分鐘
//header("Cache-Control: post-check=0, pre-check=0", false);
echo "ta1";
?>

nginx cache 配置項(xiàng)

inactive 10s//10秒鐘
proxy_cache_valid 1m//1分鐘

現(xiàn)象:第一次訪問頁面ta1.php之后,各個(gè)時(shí)間的訪問結(jié)果:

  • 5秒后訪問:HIT
  • 10秒后訪問: MISS
  • 15秒后訪問:HIT
  • 20秒后訪問:MISS

通過實(shí)例1和實(shí)例2綜合分析:如果inactive已經(jīng)進(jìn)行了設(shè)置,則緩存的過期時(shí)間以inactive設(shè)置的值為準(zhǔn)

實(shí)例3:
服務(wù)器端php代碼:

<?php
header("Expires: Fri, 07 Sep 1977 08:03:18 GMT");//直接過期
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: max-age=120");//2分鐘
//header("Cache-Control: post-check=0, pre-check=0", false);
echo "ta1";
?>

nginx cache 配置項(xiàng)

inactive 4m//4分鐘
proxy_cache_valid 1m//1分鐘

現(xiàn)象:第一次訪問頁面ta1.php之后,各個(gè)時(shí)間的訪問結(jié)果:
每隔一秒訪問一次:MISS//這說明源服務(wù)器端設(shè)置的Expires屏蔽了nginx的valide和源服務(wù)器端設(shè)置的max-age的作用
實(shí)例4:
服務(wù)器端php代碼:

<?php
header("Expires: Fri, 07 Sep 2012 08:03:18 GMT");//3分鐘之后
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: max-age=120");//2分鐘
//header("Cache-Control: post-check=0, pre-check=0", false);
echo "ta1";
?>

nginx cache 配置項(xiàng)

inactive 4m//4分鐘

proxy_cache_valid 1m//1分鐘

現(xiàn)象:第一次訪問頁面ta1.php之后,各個(gè)時(shí)間的訪問結(jié)果:

  • 1分鐘之后 :   HIT//這說明valid沒有起作用,因?yàn)樵捶?wù)器設(shè)置的Expires將valid的效果屏蔽了
  • 2分鐘之后 :   HIT//這說明 源服務(wù)器設(shè)置的max-age沒有起作用,因?yàn)樵捶?wù)器設(shè)置的Expires將max-age屏蔽了
  • 3分鐘之后:    MISS//這說明服務(wù)器端設(shè)置的expires起作用了

通過實(shí)例2和實(shí)例3的現(xiàn)象說明:如果inactive設(shè)置的比較大,在inactive到期之前,如果valid、服務(wù)器端設(shè)置的expires、服務(wù)器端設(shè)置的max-age都進(jìn)行了設(shè)置,則以服務(wù)器端設(shè)置的expires為準(zhǔn)。

實(shí)例5:
服務(wù)器端php代碼:

<?php
header("Expires: Fri, 07 Sep 2012 08:03:18 GMT");//3分鐘之后
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: max-age=120");//2分鐘
//header("Cache-Control: post-check=0, pre-check=0", false);
echo "ta1";
?>

nginx cache 配置項(xiàng)

inactive 4m//4分鐘
#下面兩行用于消除服務(wù)器端配置的Expires響應(yīng)頭的影響
proxy_ignore_headers "Expires";
proxy_hide_header "Expires";
proxy_cache_valid 1m//1分鐘

現(xiàn)象:第一次訪問頁面ta1.php之后,各個(gè)時(shí)間的訪問結(jié)果:

  • 1分鐘之后   HIT //這說明valid的作用已經(jīng)被服務(wù)器端的max-age屏蔽
  • 2分鐘之后   MISS//服務(wù)器端設(shè)置的max-age起作用

實(shí)例6:

服務(wù)器端php代碼:

<?php
header("Expires: Fri, 07 Sep 2012 08:03:18 GMT");//3分鐘之后
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: max-age=50");//50秒鐘
//header("Cache-Control: post-check=0, pre-check=0", false);
echo "ta1";
?>

nginx cache 配置項(xiàng)

inactive 4m//4分鐘
#下面兩行用于消除服務(wù)器端配置的Expires響應(yīng)頭的影響
proxy_ignore_headers "Expires";
proxy_hide_header "Expires";
proxy_cache_valid 2m//2分鐘

現(xiàn)象:第一次訪問頁面ta1.php之后,各個(gè)時(shí)間的訪問結(jié)果:

  • 50秒鐘之后 :   MISS//這說明服務(wù)器端配置的max-age起作用
  • 1分鐘之后 :   HIT//
  • 100秒鐘之后:   MISS//這說明服務(wù)器端設(shè)置的max-age起作用了

通過實(shí)例5和實(shí)例6的現(xiàn)象說明:如果inactive設(shè)置的比較大,而且在nginx配置文件中取消服務(wù)器端Expires對(duì)緩存的影響。在同時(shí)設(shè)置了proxy_cache_valid和服務(wù)器端設(shè)置了max-age響應(yīng)頭字段的情況下,以服務(wù)器端設(shè)置的max-age的值為標(biāo)準(zhǔn)進(jìn)行緩存過期處理。

3.4綜上所述:
(1)在同時(shí)設(shè)置了源服務(wù)器端Expires、源服務(wù)器端max-age和nginx cahe端的proxy_cache_valid的情況下,以源服務(wù)器端設(shè)置的Expires的值為標(biāo)準(zhǔn)進(jìn)行緩存的過期處理
(2)若在nginx中配置了相關(guān)配置項(xiàng),取消原服務(wù)器端Expires對(duì)緩存的影響,在同時(shí)設(shè)置了源服務(wù)器端Expires、源服務(wù)器端max-age和nginx cahe端的proxy_cache_valid的情況下,以源服務(wù)器端max-age的值為標(biāo)準(zhǔn)進(jìn)行緩存的過期處理
(3)若同時(shí)取消源服務(wù)器端Expires和源服務(wù)器端max-age對(duì)緩存的影響,則以proxy_cache_valid設(shè)置的值為標(biāo)準(zhǔn)進(jìn)行緩存的過期處理
(4)   Inactive的值不受上述三個(gè)因素的影響,即第一次請(qǐng)求頁面之后,每經(jīng)過inactvie指定的時(shí)間,都要強(qiáng)制進(jìn)行相應(yīng)的緩存清理。因此inactive的優(yōu)先級(jí)最高。
(5)所以對(duì)緩存過期影響的優(yōu)先級(jí)進(jìn)行排序?yàn)椋篿nactvie、源服務(wù)器端Expires、源服務(wù)器端max-age、proxy_cache_valid


相關(guān)文章

  • 如何自定義Nginx JSON日志格式配置

    如何自定義Nginx JSON日志格式配置

    Nginx作為最流行的Web服務(wù)器之一,其靈活的日志配置能力允許我們根據(jù)需求定制日志格式,本文將詳細(xì)介紹如何配置Nginx以JSON格式記錄訪問日志,這種結(jié)構(gòu)化日志格式特別適合ELK等日志分析系統(tǒng)處理,感興趣的朋友一起看看吧
    2025-03-03
  • Nginx proxy_set_header配置方式

    Nginx proxy_set_header配置方式

    這篇文章主要介紹了Nginx proxy_set_header配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 配置nginx隱藏版本號(hào)的多種方法

    配置nginx隱藏版本號(hào)的多種方法

    在生產(chǎn)環(huán)境中,需要隱藏nginx等服務(wù)的版本信息,以免造成安全風(fēng)險(xiǎn),下面小編給大家?guī)砹藘煞N方法,幫助大家學(xué)習(xí)配置nginx隱藏版本號(hào)的相關(guān)知識(shí),需要的朋友可以參考下
    2022-01-01
  • nginx配置反向代理時(shí)遇到的路徑問題

    nginx配置反向代理時(shí)遇到的路徑問題

    這篇文章主要介紹了nginx配置反向代理時(shí)遇到的路徑問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • nginx日志分割 for linux

    nginx日志分割 for linux

    默認(rèn)情況下,nginx是不分割訪問日志的,久而久之,網(wǎng)站的日志文件將會(huì)越來越大,占用空間不說,如果有問題要查看網(wǎng)站的日志的話,龐大的文件也將很難打開,于是便有了下面的腳本
    2013-11-11
  • Nginx中透?jìng)骺蛻舳苏鎸?shí)IP的技巧

    Nginx中透?jìng)骺蛻舳苏鎸?shí)IP的技巧

    為了記錄日志、限制訪問或進(jìn)行其他基于?IP?地址的操作,獲取客戶端的真實(shí)?IP?地址非常重要,本文就來詳細(xì)的介紹一下Nginx中透?jìng)骺蛻舳苏鎸?shí)IP的技巧,感興趣的可以了解一下
    2024-08-08
  • nginx中使用lua腳本的方法

    nginx中使用lua腳本的方法

    這篇文章主要介紹了nginx中使用lua腳本的方法,本文介紹通過第三方模塊lua-nginx-module實(shí)現(xiàn)lua腳本在nginx的調(diào)用,并附一個(gè)配置例子,需要的朋友可以參考下
    2014-07-07
  • Nginx動(dòng)靜分離實(shí)現(xiàn)案例代碼解析

    Nginx動(dòng)靜分離實(shí)現(xiàn)案例代碼解析

    這篇文章主要介紹了Nginx動(dòng)靜分離實(shí)現(xiàn)案例代碼解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Nexus使用nginx代理實(shí)現(xiàn)支持HTTPS協(xié)議

    Nexus使用nginx代理實(shí)現(xiàn)支持HTTPS協(xié)議

    這篇文章主要介紹了Nexus使用nginx代理實(shí)現(xiàn)支持HTTPS協(xié)議,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • nginx 如何實(shí)現(xiàn)讀寫限流的方法

    nginx 如何實(shí)現(xiàn)讀寫限流的方法

    這篇文章主要介紹了nginx 如何實(shí)現(xiàn)讀寫限流的方法的相關(guān)資料,這里提供實(shí)例代碼及如何配置,需要的朋友可以參考下
    2016-12-12

最新評(píng)論

乌兰县| 牟定县| 海丰县| 琼结县| 定结县| 九江县| 东辽县| 天门市| 葵青区| 朝阳县| 霞浦县| 泰和县| 荥阳市| 平湖市| 扎兰屯市| 寿光市| 德江县| 深圳市| 新兴县| 师宗县| 宁强县| 聂拉木县| 河曲县| 景东| 宽城| 都兰县| 社旗县| 四子王旗| 美姑县| 平邑县| 兴隆县| 江油市| 宜丰县| 内黄县| 台前县| 榆社县| 醴陵市| 沧源| 邛崃市| 土默特右旗| 泰来县|