小草新blog: http://homeway.me/php
首先了解幾個概念,html
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須要常常重啓。apache
Varnish訪問速度更快,Varnish採用了 Visual Page Cache技術,全部緩存的數據都直接從內存讀取,而Squid從硬盤讀取緩存的數據,因此vim
Varnish在訪問速度方面會更快一些。後端
Varnish能夠支持更多的併發鏈接,由於Varnish的TCP鏈接與釋放比Squid快,因此在高併發鏈接狀況下能夠支持更多的TCP鏈接。centos
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
rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.0.el6.rpm
yum install varnish
複製備份vcl
cp /etc/varnish/default.vcl /etc/varnish/default.vcl.backup
cp /etc/sysconfig/varnish /etc/sysconfig/varnish.backup
用默認端口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
修改出口端口,指到一個沒有用的端口就行了,千萬不要再1024內就行了。
vim /etc/varnish/default.vcl
backend default {
.host = "127.0.0.1";
.port = "8880";
}
修改apache的入口端口,和上面一個同樣。
作個備份吧。
cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.backup
修改吧:
vim /etc/httpd/conf/httpd.conf
Listen *:8880
一直往下拉,還有(若是你已經配置了域名指向的話):
<VirtualHost *:8880>
ServerAdmin sharad@example.com
DocumentRoot /var/www/html/
ErrorLog logs/sample-error.log
CustomLog logs/sampleaccess_log common
</VirtualHost>
我在我電腦本地的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/ (這個用編譯安裝就有坑。)
運維的話,推薦《高性能網站建設指南》劉鑫,雖然裏面都是坑(因爲你的環境和主機不同~),可是,工具仍是很好的。