亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

nginx緩存優先級

發布時間:2020-08-08 19:49:17 來源:ITPUB博客 閱讀:162 作者:forest7707 欄目:服務器

接觸nginx的兄弟或多或少都有遇到緩存問題,要么是nginx為什么不緩存,要么就是nginx緩存很快就失效等等問題,在網上找了一遍nginx緩存優先級的文章,大家可以參考下。

架構圖
client端  <------------------>   nginx cache <------------------>源服務器

經過大量測試發現:nginx的過期順序是有一個優先級的。下面首先說明各個影響緩存過期的因素:

(1)inactive:在proxy_cache_path配置項中進行配置,說明某個緩存在inactive指定的時間內如果不訪問,將會從緩存中刪除。
(2)源服務器php頁面中生成的響應頭中的Expires,生成語句為:
header("Expires: Fri, 07 Sep 2013 08:05:18 GMT");
(3)源服務器php頁面生成的max-age,生成語句為:
header("Cache-Control: max-age=60");
(4)nginx的配置項 proxy_cache_valid:配置nginx cache中的緩存文件的緩存時間,如果配置項為:proxy_cache_valid 200 304 2m;說明對于狀態為200和304的緩存文件的緩存時間是2分鐘,兩分鐘之后再訪問該緩存文件時,文件會過期,從而去源服務器重新取數據。

其次對需要注意的一點:源服務器的expires和nginx cache的expires配置項的沖突進行說明,場景如下

(1)源服務器端有php文件ta1.php內容如下:

1
2
3
4
5
6
<!--?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服務器端的配置信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
…….
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;
}
………….

從上面兩項可以看出nginx cache 服務器中expires的配置是30s,該expires的值直接決定了在瀏覽器端看到的max-age以及expires的值。而源服務器斷的代碼中設置的響應頭中的max-age為60,expires為Fri, 07 Sep 2013 08:05:18 GMT。這是源服務器的設置于nginx-cache的設置沖突了,那么著兩個屬性應該怎么設置呢?

這時client端的max-age與expires的值按照nginx cache中的expires配置項的設置,即:

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

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

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

現在步入正題:

經過大量測試發現:對緩存的過期與清除起作用的因素的優先級從高到低一次為:
inactive配置項、源服務器設置的Expires、源服務器設置的Max-Age、proxy_cache_valid配置項
下面通過幾個實例對這幾個優先級進行說明

實例1:
服務器端php代碼:

1
2
3
4
5
6
7
<!--?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 配置項
inactive 4m//4分鐘
proxy_cache_valid 1m//1分鐘
現象:第一次訪問頁面ta1.php之后,各個時間的訪問結果:
1分鐘之后 :HIT//這說明valid沒有起作用
2分鐘之后 :HIT//這說明 源服務器設置的max-age沒有起作用
3分鐘之后:MISS//這說明源服務器設置的Expires起作用了
4分鐘之后:MISS//這說明inactive起作用了

實例2:

服務器端php代碼:

1
2
3
4
5
6
7
<!--?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 配置項
inactive 10s//10秒鐘
proxy_cache_valid 1m//1分鐘
現象:第一次訪問頁面ta1.php之后,各個時間的訪問結果:
5秒后訪問:HIT
10秒后訪問: MISS
15秒后訪問:HIT
20秒后訪問:MISS
通過實例1和實例2綜合分析:如果inactive已經進行了設置,則緩存的過期時間以inactive設置的值為準

實例3:

服務器端php代碼:

1
2
3
4
5
6
7
<!--?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 配置項
inactive 4m//4分鐘
proxy_cache_valid 1m//1分鐘
現象:第一次訪問頁面ta1.php之后,各個時間的訪問結果:
每隔一秒訪問一次:MISS//這說明源服務器端設置的Expires屏蔽了nginx的valide和源服務器端設置的max-age的作用

實例4:
服務器端php代碼:

1
2
3
4
5
6
7
<!--?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 配置項
inactive 4m//4分鐘
proxy_cache_valid 1m//1分鐘

現象:第一次訪問頁面ta1.php之后,各個時間的訪問結果:
1分鐘之后 :   HIT//這說明valid沒有起作用,因為源服務器設置的Expires將valid的效果屏蔽了
2分鐘之后 :   HIT//這說明 源服務器設置的max-age沒有起作用,因為源服務器設置的Expires將max-age屏蔽了
3分鐘之后:    MISS//這說明服務器端設置的expires起作用了

通過實例2和實例3的現象說明:如果inactive設置的比較大,在inactive到期之前,如果valid、服務器端設置的expires、服務器端設置的max-age都進行了設置,則以服務器端設置的expires為準。

實例5:

服務器端php代碼:

1
2
3
4
5
6
7

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 配置項
inactive 4m//4分鐘
#下面兩行用于消除服務器端配置的Expires響應頭的影響
proxy_ignore_headers "Expires";
proxy_hide_header "Expires";
proxy_cache_valid 1m//1分鐘
現象:第一次訪問頁面ta1.php之后,各個時間的訪問結果:
1分鐘之后   HIT //這說明valid的作用已經被服務器端的max-age屏蔽
2分鐘之后   MISS//服務器端設置的max-age起作用

實例6:

服務器端php代碼:

1
2
3
4
5
6
7
<!--?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 配置項

inactive 4m//4分鐘
#下面兩行用于消除服務器端配置的Expires響應頭的影響
proxy_ignore_headers "Expires";
proxy_hide_header "Expires";
proxy_cache_valid 2m//2分鐘
現象:第一次訪問頁面ta1.php之后,各個時間的訪問結果:

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

通過實例5和實例6的現象說明:如果inactive設置的比較大,而且在nginx配置文件中取消服務器端Expires對緩存的影響。在同時設置了proxy_cache_valid和服務器端設置了max-age響應頭字段的情況下,以服務器端設置的max-age的值為標準進行緩存過期處理。

綜上所述:

(1)在同時設置了源服務器端Expires、源服務器端max-age和nginx cahe端的proxy_cache_valid的情況下,以源服務器端設置的Expires的值為標準進行緩存的過期處理
(2)若在nginx中配置了相關配置項,取消原服務器端Expires對緩存的影響,在同時設置了源服務器端Expires、源服務器端max-age和nginx cahe端的proxy_cache_valid的情況下,以源服務器端max-age的值為標準進行緩存的過期處理
(3)若同時取消源服務器端Expires和源服務器端max-age對緩存的影響,則以proxy_cache_valid設置的值為標準進行緩存的過期處理
(4)   Inactive的值不受上述三個因素的影響,即第一次請求頁面之后,每經過inactvie指定的時間,都要強制進行相應的緩存清理。因此inactive的優先級最高。
(5)所以對緩存過期影響的優先級進行排序為:inactvie、源服務器端Expires、源服務器端max-age、proxy_cache_valid

轉自:http://lmdkfs.blog.163.com/blog/static/7461132420142128311980/

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三穗县| 汝南县| 绥化市| 宿迁市| 台州市| 济阳县| 连城县| 浦江县| 长治县| 浦东新区| 镇赉县| 潼南县| 洪江市| 安徽省| 曲沃县| 花莲市| 陆河县| 乐陵市| 永济市| 重庆市| 新巴尔虎左旗| 葫芦岛市| 大名县| 浦北县| 札达县| 五原县| 宣城市| 甘洛县| 汉阴县| 高清| 青浦区| 黄石市| 堆龙德庆县| 太原市| 蒙城县| 吴江市| 建阳市| 邯郸市| 甘德县| 孝昌县| 铁岭县|