很多最近說靜態網站的優點。但在很多情況下使用一個動態就是必需的。是否一個內容管理系統,客戶關系的工具,或在線商店,他們允許終端用戶維護復雜的網站迅速和持續。正確放在一起時,他們可以競爭的靜態網站的速度。
任何應用程序需要經常讀寫的數據將導致明顯的延遲
無論你用的是什么系統,動態站點通常組成相似的元素。這些web服務器的一種形式,一個后端應用程序,用一個或多個編程語言編寫的。這種組合的組件給大量的靈活性,但每個貢獻自己的開銷,提高加載時,所有現代web站點想要避免的東西。與數據庫訪問尤其如此;任何應用程序需要經常讀寫的數據將導致明顯的延遲。
這在緩存和一個適合您的用例將幫助的緩存策略。緩存的基本目的是為了防止不必要的頻繁的應用程序數據庫層之間的調用和使用預生成的靜態HTML頁面,而是在瀏覽器中呈現的要快得多。
瀏覽器緩存
第一緩存任何web用戶會注意到在他們的瀏覽器緩存。有多少次開發人員要求你進行“force-refresh”看到變化了嗎?瀏覽器緩存是簡單但goodstarting點開始解釋緩存概念。瀏覽器網頁訪問的存儲表示在用戶的計算機上,通常更新他們每次會話如果檢測到變化或強制的網站。
代理緩存
常見工具受雇于網站所有者和管理員是一個反向代理緩存的頁面請求之間,由一個web瀏覽器和web應用程序。它攔截請求和渲染頁面直接從緩存的副本,因此提供了一個明顯的速度提升。
有幾個主要的代理緩存選項可供self-install或作為“軟件即服務”。(我們忽略了云托管提供商通常你可能需要的一切打包成一個獨立的web堆棧。)
流行的代理緩存選項包括:
清漆(見下圖);
魷魚;
Nginx(結合web服務器和代理緩存)。
SaaS選項緩存一般躺在世界的內容分發網絡(cdn),而不是把用戶和web堆棧之間的緩存,服務用戶的緩存內容,地理上最親近的人。這是一個微妙的差異,但對于大型網站與全球觀眾可以顯著差異。
USINGVARNISH
清漆可用在所有Linux軟件包管理器,碼頭工人形象和許多其他的選擇,讀了嗎項目的安裝頁面為更多的細節。
基本的清漆配置
在/usr/local/etc/varnish/default.清漆商店一個默認的配置文件vcl或/etc/varnish/default.vcl,寫在VCL(清漆配置語言)。這個配置文件被編譯成一個小程序通過C解釋器來提高速度。
這取決于你怎么安裝清漆,配置文件會看起來像這樣:
backend default {
.host = “127.0.0.1”;
.port = “8000”;
}
最簡單的,它定義了默認端使用清漆,定義的主機和端口應該傾聽和攔截內容。
后端輪詢
清漆的一個方便特性是按照預定義的時間間隔檢查如果后端仍然是健康的。叫做“端輪詢”,通過添加一個配置探頭部分為后端聲明:
.probe = {
.url = ‘/’;
.timeout = 34ms;
.interval = 1s;
.window = 10;
.threshold = 8;
}
以上提供的默認設置是清漆,告訴它訪問一個特定的。urlevery .interval如果至少。閾值的。窗口探頭,url內響應。超時毫秒,后端仍被認為是健康的。曾被認為是“不健康”,內容從緩存中提供一個預定義的時期。
開始清漆
我們將討論具體的更改清漆配置在每個平臺的選擇,現在讓我們來看看在通用選項。
港口
一開始您的web服務器的端口需要修改默認。例如Vhost在Apache配置端口改為81年或8080年。
開始與varnishcommand清漆守護進程或使用服務包裝器。守護進程標記選項,最常見和有用的:
– f:設置配置文件的路徑。
s:緩存存儲選項。設置內存將提供更大的速度增加。
檢查所有工作
運行varnishstat命令或訪問isvarnishworking.com檢查你的清漆服務器已經準備好了,聽請求。
不緩存
有某些部分的一個網站,我們不想緩存,例如管理頁面。我們可以排除他們將調用vcl_recv子例程通過創建一個默認的。vcl文件包含一個if語句定義了緩存:
sub vcl_recv {
# URI of admin folder
if (req.url ~ “^/url/”)
{
return (pass);
}
return(lookup);
}
如果您正在使用清漆4,略有不同,包括返回值,F在將調用vcl_recv函數的返回ahash值而不是一個查找。
sub vcl_recv {
…
return(hash);
}
這也是我們網站或子域,通過添加req.http清漆應該忽略。主機~ ‘ example.com ‘ if語句。
餅干
默認情況下清漆不會從后端設置cookie緩存內容。同樣,如果客戶端發送cookie,它將直接繞過清漆后端。
餅干經常使用的網站來跟蹤用戶活動和存儲用戶特定的值。通常這些餅干只是感興趣的客戶端代碼和不感興趣的后端或清漆。我們可以告訴清漆忽略餅干,除了在特定地區的站點:
if ( !( req.url ~ ^/admin/) ) {
unset req.http.Cookie;
}
如果聲明忽視了餅干,除非我們在網站的管理區域,cookie傳遞可能會更多的使用(除非你真的想阻撓站點管理員)。
其他異常
默認安裝,漆也不緩存密碼保護頁面,GET和HEAD請求。
把清漆使用
現在我們將看兩個完美的用例清漆:Drupal和線上購物。兩者都是高度動態systemsthat允許非技術用戶進行各種復雜的任務。這可能會導致數據庫query-heavy頁面加載和繁忙的站點會明顯放緩。典型的頁面用這些系統將有一個混合物的內容很少,經常更新。
Drupal
Drupal已完成類似功能的默認緩存選項清漆,但不會提供所需的靈活性和速度增加更大或更復雜的網站。
在真正的有一個Drupal方式模塊處理清漆集成節省一些上述手動配置。
安裝模塊,確保您按照安裝說明包含在模塊的閱讀我的文件。
確保/etc/default/varnish文件有以下守護進程選項設置(和縮進是很重要的):
DAEMON_OPTS=”-a :80
-T localhost:6082
-f /etc/varnish/default.vcl
-S /etc/varnish/secret
-s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,128M”
確保Apache和任何相關的虛擬主機監聽端口8080,而不是80年。重啟后兩個服務使這些變化。
您可能需要設置一個“清漆控制鍵”模塊配置頁面。找出關鍵與貓/etc/varnish/secret命令并粘貼到設置頁面。選擇正確的清漆版本,保存設置,您應該會看到一系列綠色蜱蟲在頁面的底部。
清漆Drupal模塊與默認的緩存設置,所以確保你有啟用和配置為您的用例。
從命令行運行varnishstat,開始作為一個匿名用戶瀏覽網站,你應該看到stats命令輸出的變化。
緩存的路徑之一,我們不想在Drupal管理頁面,將調用vcl_recv子路徑:我們可以這樣做
sub vcl_recv {
# URI of admin folder
if (req.url ~ “^/admin/”)
{
return (pass);
}
unset req.http.Cookie;
return(lookup);
}
你可能要考慮不緩存用戶頁面(登錄),系統更新頁面和其他頁面生成的高度動態模塊,如國旗使大量使用ajax功能。通過添加進一步要求這樣做。urlparameters if語句。
線上購物
默認安裝的線上購物附帶一個內部緩存系統,靜態版本的網站元素存儲在指定的文件夾中。緩存管理系統- >頁面提供緩存現狀的概述以及讓你清楚所有或單個組件緩存。你可以清晰的聚合的CSS和javascript文件,從這個頁面自動生成的圖像文件。
即將到來的版本2的線上購物將支持清漆緩存默認情況下,但是現在我們需要使用第三方插件,我推薦松節油模塊。確保你讀了項目的自述文件指出一些額外的配置步驟,忽視他們可能會破壞你的網站。
松節油的模塊是高度可配置的,并將必要的更改vcl文件和清漆為你配置。一些關鍵選項設置:
后端主機:清漆主機,默認為127.0.0.1
后端端口:港口清漆上運行,默認為80
網址黑名單:URL的列表沒有緩存相對于線上購物根。管理和API包括自動url。
松節油模塊關系到默認緩存線上購物,所以清理緩存清漆緩存頁面將明確相關的清漆緩存。
一般建議
除了使用清漆和上面的動態系統,這里有一些其他的雜項技巧,將有助于cache-ability任何網站。
一致的url
如果你是提供相同的內容在不同的上下文中,它應該使用相同的URL。例如不要混合使用條。html,文章。htm和文章,盡管你的CMS可能允許它。這將導致三種不同的緩存版本相同的內容。
使用cookie很少
正如我們以上所見,餅干很難緩存和很少像我們認為必要。試圖限制他們的使用和數量動態頁面。
文件處理
加載站點資產可以是最耗時的部分頁面呈現和簡單的技巧來減少這種負擔:
使用CSS圖片精靈形象,而不是多個小文件導致更少的網絡流量。
托管CSS和JavaScript庫在本地意味著更少的網絡流量和更多的控制緩存策略。這可能意味著維護開銷的增加使這些資產。存儲這些資產在持續命名文件夾引用也可以是一致的。