負載均衡環境中和如何設定Expires和Etag

2021-05-26 16:08:22 字數 2916 閱讀 7375

在負載均衡環境中(lvs, loadbalance)為了減少瀏覽器資料的重複請求操作,一般需要設定 http header 的 etage 和 expires 告訴瀏覽器請求資料是否已過期。以下內容主要考慮apache+squid 環境

以上設定為 檔案的有效期為從請求檔案開始1個月,html,css,js,flash檔案的有效期為從請求檔案開始30分鐘

這裡只是乙個常規設定,apache官方文件 對此設定有詳細介紹

當設定了expires後,會自動輸出cache-control 的max-age 資訊,這個數值是expires有效期內的秒數,(乙個月的數值為2592000) 在這個時間段裡,該檔案的請求都將直接通過快取伺服器獲取,當然如果需要忽略瀏覽器的重新整理請求(f5),快取伺服器squid還需要使用refresh_pattern 選項來忽略該請求

以下為實際輸出的http header資訊

date thu, 07 aug 2008 07:27:57 gmt

server apache

last-modified fri, 27 jun 2008 07:18:52 gmt

etag 「df6-b8c8cf00″

accept-ranges bytes

content-length 3574

cache-control max-age=2592000

expires sat, 06 sep 2008 07:27:57 gmt

content-type image/jpeg

age 34241

x-cache hit from s1.ihompy.com

connection keep-alive

對於動態頁面的快取如果不是頻繁更新的頁面資料,可以在squid快取,只需要注意兩點

1. session : 對於需要快取的資料,一定要關閉session防止在http header 中包括session id 字段

2. last-modified 和 expires 標記: 一般般純靜態頁面本身都會有last-modified資訊,這是由web伺服器獲取檔案的最後修改時間生成的,而動態頁面需要預設的輸出內容是

date thu, 07 aug 2008 16:58:37 gmt

expires thu, 19 nov 1981 08:52:00 gmt

last-modified thu, 07 aug 2008 16:58:37 gmt

這裡的 last-modified 時間和請求檔案的時間相同,也就是說該檔案總是宣告為最新的

在程式中需要輸出last-modifed 和 expires資訊,比如php

header(『last-modified: 『 . gmdate(「d, d m y h:i:s」) . 『 gmt』);

header(『expires: 『 . gmdate (「d, d m y h:i:s」, time() + 3600*24). 」 gmt」);

以上資訊設定php檔案的過期時間為請求該檔案的時間後的24小時(3600*24)

squid和apache中的max-age與expires的分別

主要重點在於我們要明白乙個相對(expires)乙個絕對(max-age).

分別max-age

max-age是http/1.1中,他是指我們的web中的檔案被使用者訪問(請求)後的存活時間,是個相對的值,相對request_time(請求時間).

例如:a.html 使用者請求時間是18:00,max-age設定的是600的話,相當18:00+600秒過期,也就是相對18:00的時間後面600秒後過期.預設的max-age是由expires算出來的.

expires

expires是http/1.0中的,它比max-age要麻煩點.expires指定的時間分下面二種,這個主要考慮到apache中設定是a還是m.

1.相對檔案的最後訪問時間(atime)

當apache使用a時間來做expires時.這樣設定時.他就和max-age的值相等,因為max-age是相對檔案的請求時間(atime).

例如:expiresbytype text/html a600

由上面我們得知,apache設定atime時,過期為600秒時.

expires=18:00+600=18:10

max-age=18:00+600=18:10

得出:expires=max-age

2.絕對修改時間(mtime)

這又分二種情況,我們來拿a.htm來講

假設檔案的建立時間為18:00.

當使用者request請求為18:00時,過期為600秒

expires=18:00+600=18:10

max-age=18:00+600=18:10

得出:expires等於max-age

當使用者request請求為18:20時,過期為600秒

expires=18:00+600=18:10(因為設定成mtime時,時間由檔案建立時間來決定)

max-age=18:20+600=18:30

得出:expires不等於max-age

另外要注意,象上面這種清況時,max-age優化,所以過期時間為18:30.

在squid,如果沒有指明expires和max-age這二個的截止時間,那它就會使用髮式截止時間,如參考 last-modified.

其實上面的max-age=18:20+600=18:30,這樣算max-age不對,真實環境要這樣算,max-age過期為http頭中的age=600過期.

注:age域值是快取伺服器估計從響應產生或被原始伺服器重新證實以來的總時間.age的值是快取伺服器算出來的,原始伺服器是沒有的.

nginx負載均衡設定

nginx 的 upstream目前支援 4 種方式的分配 1 輪詢 預設 每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。2 weight 指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。2 ip hash 每個請求按訪問ip的hash...

nginx設定負載均衡

why負載均衡,隨著企業業務增長和海量請求,給服務端造成海量併發,導致響應不及時需擴容後端服務,前端需要負載均衡,均攤請求,讓服務端吞吐請求的能力提公升 單點服務方式,乙個點掛掉整個服務就掛掉 而多點服務掛掉一兩個,其他的仍可以繼續執行 四層 傳輸層 負載均衡 已經支援到tcp ip協議的維度,tc...

apache負載均衡設定

apache負載均衡設定 2010 11 08 12 47 46 apache作為loadbalance前置機分別有三種不同的部署方式,分別是 1 輪詢均衡策略的配置 進入apache的conf目錄,開啟httpd.conf檔案,在檔案的末尾加入 proxypass balancer proxy 注...