varnish的基本配置

主程序:varnish

配置文件:

·/etc/varnish/varnish.params—配置varnish服務進程的工作特性,例如監聽的地址和端口,緩存機制;

·/etc/varnish/default.vcl—配置各Child/Cache線程的緩存工作屬性;

VCL狀態引擎:

varnish的基本配置

內建變量:

·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

基本配置目錄:

  1. 交互式配置
  2. 對某種請求不檢查緩存
  3. 拒絕某種請求訪問
  4. 對公開資源,取消私有標記,并設定緩存時長
  5. 顯示后端主機IP
  6. 根據purge請求清除緩存
  7. 設置acl訪問控制
  8. 用ban命令清除緩存
  9. 配置varnish后端多臺主機
  10. varnish動靜分離
  11. 對后端主機進行健康狀態檢測
  12. varnish的性能優化
  13. 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 ~ ^/javascripts
ban 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_hit
    MAIN.cache_miss
    示例:
    varnishstat -1 -f MAIN.cache_hit -f MAIN.cache_miss
    varnishstat -l -f MAIN -f MEMPOOL
2、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 logs
4、varnishncsa – Display Varnish logs in Apache / NCSA combined log format

原創文章,作者:z long,如若轉載,請注明出處:http://www.www58058.com/84224

(0)
z longz long
上一篇 2017-08-08
下一篇 2017-08-08

相關推薦

  • Linux下軟鏈接與硬鏈接

    Linux下軟鏈接與硬鏈接的區別 Linux中的文件都文件名和數據,在linux上面被分為兩個部分:元數據與數據。用戶數據,即文件數據塊(data block),數據塊是記錄文件真實內容的地方,而元數據是文件的附加屬性,如大小,創建時間,所有者等信息。在Linux中,元數據中的inode號(inode是文件的元數據的一部分,但其不包含文件名,inode號即索…

    Linux干貨 2016-10-20
  • 進程,自動化任務與安全

    進程     進程就是一段存儲了一個指令集的內存空間    相關命令:        pstree:顯示當前運行的進程樹,按樹狀結構顯示     &n…

    Linux干貨 2017-04-02
  • HTTP

    使用CentOS 7和CentOS 6實現以下任務 配置四個基于名稱的虛擬主機;discuzXwordpressdrupal1.在conf.d下新建并編輯虛擬主機配置文件]# cd /etc/httpd/conf.d/]# vim vhost.confcentos6配置   [root@ _93_ conf.d]#&n…

    Linux干貨 2016-10-12
  • 馬哥教育網絡班21期第8周課程練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 網橋也叫橋接器,是連接兩個局域網的一種存儲/轉發設備,用來連接不同網段。 集線器稱為“Hub”,主要功能是對接收到的信號進行再生整形放大,以擴大網絡的傳輸距離,同時把所有節點集中在以它為中心的節點上。 二層交換機工作于OSI模型的第2層(數據鏈路層),可識別數據包中的MAC地址信…

    Linux干貨 2016-09-19
  • Ansible安裝及簡單使用

    簡介: ansible是新出現的自動化運維工具,基于Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基于模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包…

    Linux干貨 2016-08-07
  • 馬哥教育網絡班22期+第十周課程練習

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)    CentOS系統啟動流程為:POST –> BootSequence(BIOS) –> BootLoader(MBR) –> Kernel(ramdisk) –> r…

    Linux干貨 2016-12-13
欧美性久久久久