1. 程式人生 > >varnish(轉http://www.ttlsa.com/nginx/varnish-4-configure-file/)

varnish(轉http://www.ttlsa.com/nginx/varnish-4-configure-file/)

 

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 # 使用varnish版本4的格式. vcl 4.0; # 載入後端輪詢模組 import directors; #######################健康檢查策略區域########################### # 名為www_probe的健康檢查策略 probe www_probe { .request =
"GET /html/test.html HTTP/1.1"    # 健康檢查url為/html/test.html 協議為http1.1 "Host: www.xxxxx.com"        # 訪問的域名為www.xxxxx.com "Connection: close";        # 檢查完關閉連線 #其他引數 如 超時時間 檢查間隔 等 均使用預設
} ################################################################## #######################配置後端區域################################ backend backend_16 { .host = "111.111.111.16"; .port = "80"; .probe = www_probe; # 使用名為www_probe的健康檢查策略 } backend backend_17 { .host = "111.111.111.17"; .port = "80"; .probe = www_probe; # 使用名為www_probe的健康檢查策略 } #預設後端 backend default { .host = "111.111.111.40"; .port = "81"; } ################################################################### # 配置後端叢集事件 sub vcl_init { # 後端叢集有4種模式 random, round-robin, fallback, hash # random         隨機 # round-robin    輪詢 # fallback        後備 # hash        固定後端 根據url(req.http.url) 或 使用者cookie(req.http.cookie) 或 使用者session(req.http.sticky)(這個還有其他要配合) # 把backend_16 和 backend_17配置為輪詢叢集 取名為www_round_robin new www_round_robin = directors.round_robin(); www_round_robin.add_backend(backend_16); www_round_robin.add_backend(backend_17); # 把backend_16 和 backend_17配置為隨機選擇叢集 取名為www_random new www_random = directors.random(); www_random.add_backend(backend_16,10) # 設定backend_16後端的權重為10 www_random.add_backend(backend_17,5);   # 設定backend_17後端的權重為5 # 把backend_16 和 backend_17配置為固定後端叢集 取名為www_hash 在recv呼叫時還需要新增東西 看recv例子 new www_hash = directors.hash(); www_hash.add_backend(backend_16,1);        # 設定backend_16後端的權重為1 www_hash.add_backend(backend_17,1);        # 設定backend_17後端的權重為1 } #定義允許清理快取的IP acl purge { # For now, I'll only allow purges coming from localhost "127.0.0.1"; "localhost"; } # 請求入口 這裡一般用作路由處理 判斷是否讀取快取 和 指定該請求使用哪個後端 sub vcl_recv { ##############################指定後端區域########################### # 域名為 www.xxxxx.com 的請求 指定使用名為www_round_robin的後端叢集  在叢集名後加上 .backend() 如只使用單獨後端 直接寫後端名字即可 如 = backend_16; if (req.http.host ~ "www.xxxxx.com") { set req.backend_hint = www_round_robin.backend(); } # 使用固定後端叢集例子 使用名為www_hash的叢集 if (req.http.host ~ "3g.xxxxx.com") { set req.backend_hint = www_hash.backend(req.http.cookie) # 根據使用者的cookie來分配固定後端 可以指定其他分配規則 } # 其他將使用default預設後端 ##################################################################### # 把真實客戶端IP傳遞給後端伺服器 後端伺服器日誌使用X-Forwarded-For來接收 if (req.restarts == 0) { if (req.http.X-Forwarded-For) { set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip; } else { set req.http.X-Forwarded-For = client.ip; } } # 匹配清理快取的請求 if (req.method == "PURGE") { # 如果發起請求的客戶端IP 不是在acl purge裡面定義的 就拒絕 if (!client.ip ~ purge) { return (synth(405, "This IP is not allowed to send PURGE requests.")); } # 是的話就執行清理 return (purge); } # 如果不是正常請求 就直接穿透沒商量 if (req.method != "GET" && req.method != "HEAD" && req.method != "PUT" && req.method != "POST" && req.method != "TRACE" && req.method != "OPTIONS" && req.method != "PATCH" && req.method != "DELETE") { /* Non-RFC2616 or CONNECT which is weird. */ return (pipe); } # 如果不是GET和HEAD就跳到pass 再確定是快取還是穿透 if (req.method != "GET" && req.method != "HEAD") { return (pass); } # 快取通過上面所有判斷的請求 (只剩下GET和HEAD了) return (hash); } # pass事件 sub vcl_pass { # 有fetch,synth or restart 3種模式. fetch模式下 全部都不會快取 return (fetch); } # hash事件(快取事件) sub vcl_hash { # 根據以下特徵來判斷請求的唯一性 並根據此特徵來快取請求的內容 特徵為&關係 # 1. 請求的url # 2. 請求的servername 如沒有 就記錄請求的伺服器IP地址 # 3. 請求的cookie hash_data(req.url); if (req.http.host) { hash_data(req.http.host); } else { hash_data(server.ip); } # 返回lookup , lookup不是一個事件(就是 並非指跳去sub vcl_lookup) 他是一個操作 他會檢查有沒有快取 如沒有 就會建立快取 return (lookup); } # 快取命中事件 在lookup操作後自動呼叫 官網文件說 如沒必要 一般不需要修改 sub vcl_hit { # 可以在這裡新增判斷事件(if) 可以返回 deliver restart synth 3個事件 # deliver  表示把快取內容直接返回給使用者 # restart  重新啟動請求 不建議使用 超過重試次數會報錯 # synth    返回狀態碼 和原因 語法:return(synth(status code,reason)) # 這裡沒有判斷 所有快取命中直接返回給使用者 return (deliver); } # 快取不命中事件 在lookup操作後自動呼叫 官網文件說 如沒必要 一般不需要修改 sub vcl_miss { # 此事件中 會預設給http請求加一個 X-Varnish 的header頭 提示: nginx可以根據此header來判斷是否來自varnish的請求(就不用起2個埠了) # 要取消此header頭 只需要在這裡新增 unset bereq.http.x-varnish; 即可 # 這裡所有不命中的快取都去後端拿 沒有其他操作 fetch表示從後端伺服器拿取請求內容 return (fetch); } # 返回給使用者的前一個事件 通常用於新增或刪除header頭 sub vcl_deliver { # 例子 # set resp.http.*    用來新增header頭 如 set resp.http.xxxxx = "haha"; unset為刪除 # set resp.status     用來設定返回狀態 如 set resp.status = 404; # obj.hits        會返回快取命中次數 用於判斷或賦值給header頭 # req.restarts    會返回該請求經歷restart事件次數 使用者判斷或賦值給header頭 # 根據判斷快取時間來設定xxxxx-Cache header頭 if (obj.hits > 0) { set resp.http.xxxxx_Cache = "cached";

相關推薦

使用ajax提交form表單,包括ajax文件上傳 http://www.cnblogs.com/zhuxiaojie/p/4783939.html

ima option img jquery選擇器 open request resp logs ges 使用ajax提交form表單,包括ajax文件上傳 前言 使用ajax請求數據,很多人都會,比如說: $.post(path,{data:data},function

Java String和Date的轉換 http://www.cnblogs.com/bmbm/archive/2011/12/06/2342264.html

ref integer public cat 標記 星期 import 轉換 star Java String和Date的轉換 String—>Date方法一: String dateString = "2012-12-06 "; try {

公司流程不規範的情況下,如何做好測試工作?(http://www.51testing.com/html/11/15160311-3719792.html)

www html 相關 負責人 ron 測試 testin pac div 這對我們來說是個機遇! 首先我要說,公司目前制度不規範,對我們來說是個機遇,絕對是個機遇!遇到這個好機會你還在等什麽?如果說這個公司已經足夠好了,那他還請你過來做什麽?你的能力還足以讓公司有更高的

Linux常用命令(http://www.weixuehao.com/archives/25)

close who set 更新 adduser tar halt mod user 常用指令 ls 顯示文件或目錄 -l 列出文件詳細信息l(list) -a 列出當前目錄下所有文件及目錄,包括隱藏的a(all) mkdir 創建目錄 -p 創建目錄,若無父目

C數據結構排序算法——希爾排序法用法總結(http://www.cnblogs.com/skywang12345/p/3597597.html)

spa 一半 pub nbsp 時間復雜度 每一個 ati 數組長度 插入排序算法 希爾排序介紹 希爾排序(Shell Sort)是插入排序的一種,它是針對直接插入排序算法的改進。該方法又稱縮小增量排序,因DL.Shell於1959年提出而得名。 希爾排序實質上是一種分組插

有關uploadifive的使用經驗( http //www cnblogs com/itBscs/p/4781786

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

數字證書原理 - http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html

在操作 computer ide iis 中斷 計算 虛擬 from 上進 文中首先解釋了加密解密的一些基礎知識和概念,然後通過一個加密通信過程的例子說明了加密算法的作用,以及數字證書的出現所起的作用。接著對數字證書做一個詳細的解釋,並討論一下windows中數字證書的管理

數據挖掘 - 算法 - ID3 - http://www.cnblogs.com/dztgc/archive/2013/04/22/3036529.html

str htm bar c++代碼 度量 進行 初始化 ++ 預測 1 簡介   決策樹學習是一種逼近離散值目標函數的方法,在這種學習到的函數被表示為一棵決策樹。 2 決策樹表示   決策樹通過把實例從根節點排列到某個葉子結點來分類實例,葉子結點即為實例所屬的分類。樹上的

)關於區塊鏈與比特幣 來源於嘶吼: http://www.4hou.com/info/news/6152.html

賬單 還要 號碼 news tar 參與 src 通知 都去 走近比特幣:一個故事看懂“區塊鏈” 2017年7月7日發布 首頁/新聞/正文 55,338 4 32 導語:本文是對區塊鏈原理極為通俗的解釋,適合剛接觸比特幣的小白們閱讀。 區塊鏈是比特幣的底層

Java時間日期格式轉換 自:http://www.cnblogs.com/edwardlauxh/archive/2010/03/21/1918615.html

throws 星期四 stat 格式轉換 see blog 一是 取得數據 www Java時間格式轉換大全 import java.text.*; import java.util.Calendar; public class VeDate { /** * 獲取

css中常見的 cursor 屬性(http://www.w3school.com

指針 mov ssh 右移 tab body poi ossh idt 值描述 url 需使用的自定義光標的 URL。 註釋:請在此列表的末端始終定義一種普通的光標,以防沒有由 URL 定義的可用光標。 default 默認光標(通常是一個箭頭) auto

http://www.cnblogs.com/zengjfgit/p/9486092.html

CoAP、MQTT、RESTful協議區別 二、協議區分: 1. CoAP: 1. UDP協議; 2. 可能會出現丟包; 3. 不適合做裝置實時反向控制; 4. 實時性控制不是很好; 2. MQTT: 1. TCP協議,長連線; 2. 適合做裝置反向控制; 3. 實時性控制; 4. 佔用TC

C#實現之(自動更新)http://www.cnblogs.com/yelanggu/p/9288149.html

基於 show string 文章 必須 解決 number 很好 dll文件 做開發的人,尤其是做客戶端(C/S)系統開發的人都會遇到一個頭疼的問題,就是軟件的自動更新;系統發布後怎樣自動的更新程序,在下有幸開發過一個自動更新程序,更新程序與任何宿主程序是完全獨立的;只要

Java併發程式設計:volatile關鍵字解析--自:http://www.cnblogs.com/dolphin0520/p/3920373.html

Java併發程式設計:volatile關鍵字解析    volatile這個關鍵字可能很多朋友都聽說過,或許也都用過。在Java 5之前,它是一個備受爭議的關鍵字,因為在程式中使用它往往會導致出人意料的結果。在Java 5之後,volatile關鍵字才得以重獲生機。   volatile關鍵

js深拷貝和淺拷貝----尊重原創,自:http://www.cnblogs.com/yichengbo/archive/2014/07/10/3835882.html

一、陣列的深淺拷貝 在使用JavaScript對陣列進行操作的時候,我們經常需要將陣列進行備份,事實證明如果只是簡單的將它賦予其他變數,那麼我們只要更改其中的任何一個,然後其他的也會跟著改變,這就導致了問題的發生。 var arr = ["One","Two","Th

自:http://www.cnblogs.com/findumars/p/5180490.html)記憶體管理

[導語] 記憶體管理是C++最令人切齒痛恨的問題,也是C++最有爭議的問題,C++高手從中獲得了更好的效能,更大的自由,C++菜鳥的收穫則是一遍一遍的檢查程式碼和對C++的痛恨,但記憶體管理在C++中無處不在,記憶體洩漏幾乎在每個C++程式中都會發生,因此要想成為C++高手,記憶體管理一關是必須要過的,

教你寫私募基金計劃書(http://www.iwenbi.com/)

在這裡特別提一下如何論證風控人員的專業能力。協會曾多次在反饋意見中提到,“負責合規風控的高階管理人員應獨立地履行對內部控制監督、檢查、評價、報告和建議的職能。”基金管理人可以結合本機構的內部控制檔案內容,對風控人員履職過程中如何履行監督、檢查、評價、報告和建議職能幾個方面分別論述。此外,為了避免“假、大、空

使用 Jersey 和 Apache Tomcat 構建 RESTful Web 服務---很詳細,http://www.ibm.com/developerworks/cn/web/wa-aj-t

REST 在 2000 年由 Roy Fielding 在博士論文中提出,他是 HTTP 規範 1.0 和 1.1 版的首席作者之一。 REST 中最重要的概念是資源(resources),使用全球 ID(通常使用 URI)標識。客戶端應用程式使用 HTTP 方法(GE

jstl in action 第二章(http://www.blogcn.com/blog/trackback.asp?mydiary=23140875)

第二章:xml、jsp基礎本章內容:I.xml基本語法II.jsp介紹III.context中的jstl標籤庫IV.jsp範圍變數2-1xml介紹首 先要提一下html。html擁有一套標籤,如<img>,標籤擁有修飾符或成為屬性(attribute)。如在<