web緩存服務器varnish-4.1.6的部署及配置詳解
web緩存服務器varnish-4.1.6的部署及配置詳解
1.安裝varnish4.1.6
安裝依賴
yum install -y autoconf automake jemalloc-devel libedit-devel libtool ncurses-devel pcre-devel pkgconfig python-docutils python-sphinx
安裝varnish yum倉庫
# rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.1.el7.rpm # yum install varnish -y
2.設置Varnish參數
# grep "^[a-Z]" /etc/varnish/varnish.params RELOAD_VCL=1 # 重新啟動服務時是否重新讀取VCL並重新編譯 VARNISH_VCL_CONF=/etc/varnish/default.vcl # 默認讀取的VCL文件 VARNISH_LISTEN_PORT=80 # 設置監聽的端口(默認監聽6081端口) VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1 # 管理接口監聽的地址 VARNISH_ADMIN_LISTEN_PORT=6082 # 管理接口監聽的端口 VARNISH_SECRET_FILE=/etc/varnish/secret # 使用的密鑰文件 VARNISH_STORAGE="malloc,256M" # 存儲文件的大小 VARNISH_USER=varnish # varnish默認用戶 VARNISH_GROUP=varnish # varnish默認組
定義VCL backend
# cat /etc/varnish/default.vcl |grep -v "#" vcl 4.0; backend web01 { .host = "192.168.3.12"; .port = "80"; }
啟動varnish
# systemctl start varnish
# systemctl enable varnish
3.定義VCL 後端的集合 director
VCL 可以把多個 backends 聚合成一個組,這些組被叫做 director,這樣可以增強性能和彈力,當組裏一個 backend 掛掉後,可以選擇另一個健康的 backend。VCL 有多種 director,不同的 director 采用不同的算法選擇 backend,主要有以下幾種:
a. The random director
Random director 會根據所設置的權值(weight)來選擇 backend,.retries 參數表示嘗試找到一個 backend 的最大次數,.weight 參數表示權值
b. The round-robin director
Round-robin director 在選擇 backend 時,會采用循環的方式依次選擇。
c. The client director
Client director 根據 client.identity 來選擇 backend,您可以設置 client.identity 的值為 session cookie 來標識 backend。
# vim /etc/varnish/default.vcl vcl 4.0; # 指明varnish版本 backend web01 { # 定義後端服務器1 .host = "192.168.3.12"; .port = "80"; } backend web02 { # 定義後端服務器2 .host = "192.168.3.13"; .port = "80"; } import directors; # 定義directors sub vcl_init { # 定義vcl_init子例程 new cluster1 = directors.round_robin(); cluster1.add_backend(web01); cluster1.add_backend(web02); } sub vcl_recv { # 定義vcl_recv子例程 set req.backend_hint = cluster1.backend(); #指定後端directors }
詳情:https://www.varnish-cache.org/docs/4.1/reference/vmod_directors.generated.html#object-hash
4.設置響應是否命中
sub vcl_deliver { # 定義子例程 if (obj.hits > 0) { set resp.http.X-Cache = "HIT via" + " " + server.ip; } else { set resp.http.X-Cache = "MISS via" + " " + server.ip; } # 判斷如果命中就在http響應首部設置X-Cache為HIT,否則就在http響應首部設置X-Cache為MISS。 }
然後再到頁面上訪問看一下是否已經生效,可以看到第一次訪問的時候是MISS第二次的時候就是HIT了
5.指定某些文件不能查緩存
sub vcl_recv { if (req.url ~ "^/test.html$") { return(pass); } ##定義請求的文件中如果匹配test.html就pass,不查緩存 }
通過測試可以看到連續訪問http://192.168.3.198/test.html都是MISS
6.進行健康檢查
Varnish可以檢測後端主機的健康狀態,在判定後端主機失效時能自動將其從可用後端主機列表中移除,而一旦其重新變得可用還可以自動將其設定為可用。為了避免誤判,Varnish在探測後端主機的健康狀態發生轉變時(比如某次探測時某後端主機突然成為不可用狀態),通常需要連續執行幾次探測均為新狀態才將其標記為轉換後的狀態。
每個後端服務器當前探測的健康狀態探測方法通過.probe進行設定,其結果可由req.backend.healthy變量獲取,也可通過varnishlog中的Backend_health查看或varnishadm的debug.health查看。
backend web01 { .host = "192.168.10.132"; .port = "80"; .probe = { .url = "/"; # 指定哪個url需要varnish請求 .timeout = 2s; # 指定超時等待時間 .interval = 5s; # 指定檢查時間間隔 .window = 5; # 最多嘗試5次 .threshold = 3; # 至少有3次成功就宣告backend健康 } } backend web02 { .host = "192.168.3.13"; .port = "80"; .probe = { .url = "/"; .timeout = 2s; .interval = 5s; .window = 5; .threshold = 3; } }
7.設定緩存時長
sub vcl_backend_response { if (bereq.url ~ "\.(jpg|jpeg|gif|png)$") { set beresp.ttl = 2h; } # 如果url是以圖片格式結尾的緩存2小時 if (bereq.url ~ "\.(html|css|js|jsp)$") { set beresp.ttl = 30m; } # 如果url是以html|css|js|jsp結尾的緩存30分鐘 }
web緩存服務器varnish-4.1.6的部署及配置詳解