[英]How to check if Varnish cache is working correctly?
我在 Nginx 上運行的 Wordpress 網站上使用 Varnish Cache。 它是按照本博客中提到的方式配置的。 它正在工作,但我不確定它是否真的從緩存中提供內容。
怎樣才能確定? 有人可以指導我。 我是 Varnish 緩存的新手。
默認情況下,Varnish會將標頭添加到它處理的任何請求的響應中。 您可以使用Firebug等瀏覽器工具或curl或GET等CLI工具查看響應標頭。 這是一個GET示例:
sudo apt-get install libwww-perl && GET -Used http://localhost:6081/index.html
要查找的兩個標題是X-Varnish和Age 。 X-Varnish中將包含一個或兩個數字,數字本身並不重要,但它們指的是請求。 如果請求導致未命中,則Varnish從后端獲取頁面,並且響應中的X-Varnish標頭包含當前請求的一個數字:
X-Varnish: 107856168
下次請求同一頁面時,可能會導致命中。 如果是這樣,Varnish從緩存中提取頁面,並添加原始請求中的數字:
X-Varnish: 107856170 107856168
Age標題表示緩存副本的秒數。 如果沒有,它將為0,並且命中時它> 0。
請注意,后端可以設置年齡標題,使其看起來像一個錯誤的點擊,堆疊的清漆可以在X-Varnish標題中產生錯誤的錯誤。 為了確保在調試時你可以在VCL命中和未命中函數中添加自己的標題。 有關說明,請參閱此頁面https://www.varnish-software.com/static/book/VCL_functions.html 。 作為Varnish的新手,X-Varnish和Age標頭很可能是您所需要的。
最好在vcl的各個位置添加自己的X-header,以便可以對vcl的各種代碼路徑和條件進行單元測試。
例如,在vcl_deliver中:
sub vcl_deliver
{
# Insert Diagnostic header to show Hit or Miss
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
set resp.http.X-Cache-Hits = obj.hits;
}
else {
set resp.http.X-Cache = "MISS";
}
...
}
有幾個很好的快速工具可以公開測試 varnish 是否正在緩存 - https://isvarnishworking.uk和https://isvarnishworking.co.uk ,我用來測試 varnish 是否在幾個站點上工作。 它們主要依賴於 X-Varnish 和 X-Cache 標頭,但會顯示所有標頭,因此您可以在清漆 vcl 中設置任何您想要的內容,並且您可以在網頁上看到標頭
要驗證 Varnish 是否正在代理,請在響應中查找X-Varnish
標頭的存在。 Age
標頭在緩存未命中時為0
在命中時高於零。 對頁面的第一個請求總是未命中。
帶有-v
標志的 curl 可用於顯示標題。 使用 bash 中的 curl:
curl -v http://localhost:8080
緩存命中的示例輸出:
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/x.xx.x
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=utf-8
< Server: nginx/1.20.0
< X-Content-Type-Options: nosniff
< X-Frame-Options: SAMEORIGIN
< Content-Length: 45703
< X-Varnish: 32770 3
< Age: 6
< Via: 1.1 varnish (Varnish/7.0)
< Accept-Ranges: bytes
< Connection: keep-alive
<
<!DOCTYPE html>
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.