摘要:如帶有如下頭信息,,默認不會緩存。是一款高性能開源的反向代理服務器和緩存服務器,其開發者是核心的開發人員之一。備份復制備份用默認端口開啟你會得到如下信息我們看到,已經開啟,但是除了知道這個東西已經監聽端口外,我們不知道發生了什么。
varnish
小草新blog: http://homeway.me/
首先了解幾個概念,
1. Varnish不緩存帶有Set-Cookie頭的http輸出。 2. 對于HTTP協議中緩存部分,Varnish遵從http協議部分。如:帶有如下頭信息,Control-Cache: no-store, no-cache, must-revalidate, post-check=0, pre-check=0,默認varnish不會緩存。 3. HTTP協議中緩存部分,Control-Cache優先于Expires,Pragma: no-cache 是HTTP1.0的產物,可以不考慮。
Varnish是一款高性能、開源的反向代理服務器和緩存服務器,其開發者Poul-Henning Kamp是FreeBSD核心的開發人員之一。Varnish采用全新的軟件體系結構,和現在的硬件體系配合比較緊密。目前,Varnish可以在FreeBSD6.0/7.0、Solaris和Linux 2.6內核上運行。
Varnish和Squid在完成相同負載的工作時,Squid服務器發生故障的幾率要高于Varnish,因此Squid需要經常重啟。
Varnish訪問速度更快,Varnish采用了 Visual Page Cache技術,所有緩存的數據都直接從內存讀取,而Squid從硬盤讀取緩存的數據,所以
Varnish在訪問速度方面會更快一些。
Varnish可以支持更多的并發連接,因為Varnish的TCP連接與釋放比Squid快,所以在高并發連接情況下可以支持更多的TCP連接。
Varnish可以通過管理端口來管理緩存,使用正則表達式就可以批量清除部分緩存,而Squid做不到這一點。
強烈建議,不要編譯安裝,至于我是踩著坑走過來的。
我的安裝環境:(請注意主機環境!!)
Linux 2.6.32-358.6.2.el6.x86_64 #1 SMP Thu May 16 20:59:36 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux apache 2.2.15
官網講的簡單易用。https://www.varnish-cache.org/installation/redhat
step1
rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.0.el6.rpm
yum install varnish
step2 備份
復制備份vcl
cp /etc/varnish/default.vcl /etc/varnish/default.vcl.backup
cp /etc/sysconfig/varnish /etc/sysconfig/varnish.backup
step3
用默認端口6021開啟varnish
/etc/init.d/varnish start
你會得到如下信息:
[root@varnish ~]# netstat -tanp|grep varnish tcp 0 0 0.0.0.0:6081 0.0.0.0:* LISTEN 1640/varnishd tcp 0 0 127.0.0.1:6082 0.0.0.0:* LISTEN 1639/varnishd tcp 0 0 :::6081 :::* LISTEN 1640/varnishd
step4
我們看到,varnish已經開啟,但是除了知道這個東西已經監聽端口外,我們不知道發生了什么。
接下來要做的,就是修改apache的監聽端口,將varnish監聽端口指向80,將apache監聽端口指向一個其他端口,再將varnish出口端口指向apache指向的端口。
這樣,client->端口80->varinsh檢測cache->apahce->client
vim /etc/sysconfig/varnish
VARNISH_LISTEN_PORT=80
step5
修改出口端口,指到一個沒有用的端口就好了,千萬不要再1024內就好了。
vim /etc/varnish/default.vcl
backend default {
.host = "127.0.0.1";
.port = "8880";
}
step6
修改apache的入口端口,和上面一個一樣。
做個備份吧。
cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.backup
修改吧:
vim /etc/httpd/conf/httpd.conf
Listen *:8880
一直往下拉,還有(如果你已經配置了域名指向的話):
ServerAdmin sharad@example.com
DocumentRoot /var/www/html/
ErrorLog logs/sample-error.log
CustomLog logs/sampleaccess_log common
我在我電腦本地的terminal里面輸入:
curl -I http://xiaocaozone.net
可以看到回包:
查看使用的次數:
ls -l /var/log/varnish/
指定一下命令的快捷方式
ln -s /usr/local/varnish/sbin/varnishd /usr/bin/varnishd
ln -s /usr/local/varnish/bin/varnishlog /usr/bin/varnishlog
ln -s /usr/local/varnish/bin/varnishncsa /usr/bin/varnishncsa
ln -s /usr/local/varnish/bin/varnishadm /usr/bin/varnishadm
ln -s /usr/local/varnish/bin/varnishstat /usr/bin/varnishstat
文件位置:
/etc/varnish/ 存放varnish VCL配置文件
/etc/sysconfig/varnish 【CentOS】 存放varnish服務器運行的參數
/etc/default/varnish 【Ubuntu】 存放varnish服務器運行的參數
/usr/sbin/varnishd varnish服務器執行文件
/etc/init.d/varnish 運行程序
varnish命令:
varnishadm 管理Varnish后端的工具 telnet也可以(下面詳細介紹)
varnishhist 查看Varnish命中的工具 運行可以看到一張柱狀描繪圖,|表示緩存命中,#表示未命中,橫向代表時間。 【非常有用】
varnishlog 實時顯示varnish的請求日志
varnishncsa 以Apache標準的格式combined輸出日志
varnishstat 查看狀態、參數等,具體查閱百度。【非常有用】
varnishtop 類似top工具,查看varnish相關進程的資源、運行等狀況。
接下來測試下命令:
telnet 127.0.0.1 6082
如果沒有裝telnet裝下:
yum install telnet
出現的是一些admin命令:
varnishlog后用瀏覽器登錄網站結果:
varnishstat查看varnish狀態:
varnish包含以下幾個模塊
(1)vcl_recv模塊
用于接收和處理請求。當請求成功被調用后,Varnish通過判斷請求的數據來決定如何處理請求。此模塊一般以如下幾個關鍵字結束。
pass:表示進入pass模式,把請求交給vcl_pass模塊處理。
pipe:表示進入pipe模式,把請求交給vcl_pipe模塊處理。
error code [reason]:表示把錯誤標識返回給客戶端,并放棄處理該請求。錯誤標識包括200、405等。“reason”是對錯誤的提示信息。
(2)Roulette ist ein sehr geselliges Spiel, alle halten gleicherma?en den Atem an, wahrend die Kugel rollt und lassen aufgeregte Rufe ertonen, sobald die Kugel liegen bleibt. New Roman;”>vcl_pipe模塊
此模塊在請求進入pipe模式時被調用,用于將請求直接傳遞至后端主機,在請求和返回的內容沒有改變的情況下,也就是在當前連接未關閉時,服務器將不變的內容返回給客戶端,直到該連接被關閉。
(3)vcl_pass模塊
此模塊表示當請求被pass后,用于將請求直接傳遞至后端應用服務器。后端應用服務器在接收請求后將數據發送給客戶端,但不進行任何數據的緩存,在當前連接下每次都返回最新的內容。
(4)lookup
一個請求在vcl_recv中被lookup后,Varnish將在緩存中提取數據。如果緩存中有相應的數據,就把控制權交給vcl_hit模塊;如果緩存中沒有相應的數據,請求將被設置為pass并將其交給vcl_miss模塊。
(5)vcl_hit模塊
執行lookup指令后,Varnish在緩存中找到請求的內容后將自動調用該模塊。
在此模塊中,deliver表示將找到的數據發送給客戶端,并把控制權交給vcl_deliver模塊。
(6)vcl_miss模塊
執行lookup后,Varnish在緩存中沒有找到請求的內容時會自動調用該方法。此模塊可以用于判斷是否需要從后端服務器獲取內容。
在此模塊中,fetch表示從后端獲取請求的數據,并把控制權交給vcl_fetch模塊。
(7)vcl_fetch模塊
在后端主機更新緩存并且獲取內容后調用該方法,接著,通過判斷獲取的內容來決定是將內容放入緩存,還是直接返回給客戶端。
(8)vcl_deliver模塊
當一個沒有被緩存的數據交付給客戶端的時候被調用。
(9)vcl_timeout 模塊
在緩存數據到期前調用此模塊。
在此模塊中,discard表示從緩存中清除到期數據。
(10)vcl_discard模塊
在緩存數據到期后或緩存空間不夠時,自動調用該模塊。
看不懂就對了,這樣能看懂,varnish就有問題了,看看下面一張圖片,琢磨下就會明白。( -_-!! 結合兩三個網站教程,偷來的。)
下面一張另一個網站的,我是看不懂了,如果你看得懂就看吧。
=================================
http://sharadchhetri.com/2013/09/25/how-to-install-and-configure-varnish-3-x-in-centos-and-red-hat/
http://www.programmer.com.cn/14315/ (這個用編譯安裝就有坑。)
http://www.drupal001.com/2013/05/varnish-cache-php-output/
http://www.drupal001.com/2011/12/varnish-drupal-basic/
http://www.drupal001.com/2011/12/varnish-drupal-advanced/
運維的話,推薦《高性能網站建設指南》劉鑫,雖然里面都是坑(由于你的環境和主機不一樣~),但是,工具還是很好的。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/7896.html
摘要:線程對于緩存的對象,根據過期時間,組織成二叉堆,該線程周期檢查該堆的根,處理過期的文件。緩存會根據進來的請求保存輸出內容的副本當下一個請求到來的時候,如果是相同的,緩存會根據緩存機制決定是直接使用副本響應訪問請求還是向源服務器再次發送請求。 博文參考 http://www.178linux.com/76700 http://www.mamicode.com/info-detail-22...
摘要:線程對于緩存的對象,根據過期時間,組織成二叉堆,該線程周期檢查該堆的根,處理過期的文件。緩存會根據進來的請求保存輸出內容的副本當下一個請求到來的時候,如果是相同的,緩存會根據緩存機制決定是直接使用副本響應訪問請求還是向源服務器再次發送請求。 博文參考 http://www.178linux.com/76700 http://www.mamicode.com/info-detail-22...
摘要:線程對于緩存的對象,根據過期時間,組織成二叉堆,該線程周期檢查該堆的根,處理過期的文件。緩存會根據進來的請求保存輸出內容的副本當下一個請求到來的時候,如果是相同的,緩存會根據緩存機制決定是直接使用副本響應訪問請求還是向源服務器再次發送請求。 博文參考 http://www.178linux.com/76700 http://www.mamicode.com/info-detail-22...
閱讀 1315·2021-11-22 14:44
閱讀 2453·2021-09-30 09:47
閱讀 1224·2021-09-09 11:56
閱讀 2086·2021-09-08 09:45
閱讀 3982·2021-08-31 09:40
閱讀 1260·2019-08-30 15:52
閱讀 2050·2019-08-30 14:09
閱讀 1591·2019-08-26 17:04