主程序:varnish
配置文件:
·/etc/varnish/varnish.params—配置varnish服務進程的工作特性,例如監聽的地址和端口,緩存機制;
·/etc/varnish/default.vcl—配置各Child/Cache線程的緩存工作屬性;
VCL狀態引擎:
內建變量:
·req.*:request,表示由客戶端發來的請求報文相關;
·bereq.*:由varnish發往BE主機的httpd請求相關;
·beresp.*:由BE主機響應給varnish的響應報文相關;
·resp.*:由varnish響應給client相關;
·obj.*:存儲在緩存空間中的緩存對象的屬性;只讀;
常用變量:
·bereq.*, req.*:
bereq.http.HEADERS
bereq.request:請求方法;
bereq.url:請求的url;
bereq.proto:請求的協議版本;
bereq.backend:指明要調用的后端主機;
req.http.Cookie:客戶端的請求報文中Cookie首部的值;
req.http.User-Agent ~ “chrome”
·beresp.*, resp.*:
beresp.http.HEADERS
beresp.status:響應的狀態碼;
reresp.proto:協議版本;
beresp.backend.name:BE主機的主機名;
beresp.ttl:BE主機響應的內容的余下的可緩存時長;
·obj.*
obj.hits:此對象從緩存中命中的次數;
obj.ttl:對象的ttl值
·server.*
server.ip
server.hostname
·client.*
client.ip
基本配置目錄:
- 交互式配置
- 對某種請求不檢查緩存
- 拒絕某種請求訪問
- 對公開資源,取消私有標記,并設定緩存時長
- 顯示后端主機IP
- 根據purge請求清除緩存
- 設置acl訪問控制
- 用ban命令清除緩存
- 配置varnish后端多臺主機
- varnish動靜分離
- 對后端主機進行健康狀態檢測
- varnish的性能優化
- varnish日志查看
1.交互式配置
varnishadm登錄:-S /etc/varnish/secret -T 127.0.0.1:80配置文件相關:vcl.list :狀態引擎列表;vcl.load:裝載,加載并編譯;vcl.use:激活;vcl.discard:刪除;vcl.show [-v] <configname>:查看指定的配置文件的詳細信息,可看默認配置;運行時參數:param.show -l:顯示列表;param.show <PARAM>param.set <PARAM> <VALUE>緩存存儲:storage.list后端服務器:backend.list
2.對某種請求不檢查緩存
示例:vcl_recv {if (req.url ~ “(?i)^/(login|admin)”) {return(pass);}}
3.拒絕某種請求訪問
示例:vcl_recv {if (req.http.User-Agent ~ “(?i)curl”) {return(synth(405));}}
4.對公開資源,取消私有標記,并設定緩存時長
示例:if (beresp.http.cache-control !~ “s-maxage”) {if (bereq.url ~ “(?i)\.(jpg|jpeg|png|gif|css|js)$”) {unset beresp.http.Set-Cookie;set beresp.ttl = 3600s;}}
5.顯示后端主機IP
示例:if (req.restarts == 0) {if (req.http.X-Fowarded-For) {set req.http.X-Forwarded-For = req.http.X-Forwarded-For + “,” + client.ip;} else {set req.http.X-Forwarded-For = client.ip;}}
6.根據purge請求清除緩存
示例:sub vcl_recv {if (req.method == “PURGE”) {return(purge);}}
7.設置acl訪問控制
示例:acl purgers {“127.0.0.0”/8;“10.1.0.0”/16;}sub vcl_recv {if (req.method == “PURGE”) {if (!client.ip ~ purgers) {return(synth(405,”Purging not allowed for ” + client.ip));}return(purge);}}
8.用ban命令清除緩存
示例:ban req.url ~ ^/javascriptsban req.url ~ /js$
9.配置varnish后端多臺主機
示例:import directors; # 導入模塊backend server1 {.host = “172.16.42.2”;.port = “80”;}backend server2 {.host = “172.16.42.3”;.port = “80”;
}
sub vcl_init {new websrvs = directors.round_robin();websrvs.add_backend(server1);websrvs.add_backend(server2);}sub vcl_recv {# 用哪一組server來請求set req.backend_hint = websrvs.backend();}
10.varnish動靜分離
示例:backend default {.host = “172.16.42.10”;.port = “80”;}backend appsrv {.host = “172.16.42.2”;.port = “80”;}sub vcl_recv {if (req.url ~ “(?i)\.php$”) {set req.backend_hint = appsrv;} else {set req.backend_hint = default;}}
11.對后端主機進行健康狀態檢測
.probe:定義健康狀態檢測方法;.url:檢測時請求的URL,默認為”/”;.request:發出的具體請求;.window:基于最近的多少次檢查來判斷其健康狀態;.threshhold:最近.window中定義的這么次檢查中至有.threshhold定義的次數是成功的;.interval:檢測頻度;.timeout:超時時長;.expected_response:期望的響應碼,默認為200;示例:backend server1 {.host = “172.16.42.3”;.port = “80”;.probe = {.url= “/.healthcheck.html” #得先創建這個測試頁面;.timeout= 1s;.interval= 2s;.window=5;.threshold=5;}}12.varnish的性能優化
·thread_pools: 最好小于或等于CPU核心數量;·thread_pool_max:每線程池的最大線程數;·thread_pool_min:額外意義為“最大空閑線程數”;·thread_pool_timeout:線程超時時間·thread_pool_add_delay:新創建線程·thread_pool_destroy_delay:殺死空閑線程延遲時間設置方式:/etc/varnish/varnish.params (永久有效)param.set示例:DAEMON_OPTS=”-p thread_pools=6 -p thread_pool_min=5 -p thread_pool_max=500 -p thread_pool_timeout=300″
13.varnish日志查看
1、varnishstat – Varnish Cache statistics-1-1 -f FILED_NAME-l:可用于-f選項指定的字段名稱列表;MAIN.cache_hitMAIN.cache_miss示例:varnishstat -1 -f MAIN.cache_hit -f MAIN.cache_missvarnishstat -l -f MAIN -f MEMPOOL2、varnishtop – Varnish log entry ranking-1 Instead of a continously updated display, print the statistics once and exit.-i taglist,可以同時使用多個-i選項,也可以一個選項跟上多個標簽;-I <[taglist:]regex>-x taglist:排除列表-X <[taglist:]regex>3、varnishlog – Display Varnish logs4、varnishncsa – Display Varnish logs in Apache / NCSA combined log format
原創文章,作者:z long,如若轉載,請注明出處:http://www.www58058.com/84224