转贴自 : Varnish反向代理伺服器安裝配置

转贴自 : http://eportfolio.stut.edu.tw/~19690037/archives/1682

 

Posted by 19690037 on 30 四月, 2008 02:48

 

Varnish 是一款高性能且開源的反向網站快取伺服器(Reverse Proxy Server),挪威最大的線上報紙 Verdens Gang 使用3台Varnish代替了原本的12台Squid, 性能比以前更好。Varnish 的作者 Poul-Henning Kamp 是 FreeBSD 核心的開發人員之一,他認為現在的電腦比起1975年已經複雜許多。在那個時代,儲存媒介只有兩種:記憶體與硬碟。但現在電腦系統的記憶體除了主記憶體 外,還包括了CPU内的L1、L2,甚至有L3快取。硬碟上也有自己的快取裝置,因此squid cache自行處理物件替換的架構不可能得知這些情況而做到最佳化,但作業系統可以得知這些情況,所以這部份的耕作應該交給作業系統處理,這就是 Varnish Cache 的設計架構。

一般來說,使用Varnish代替Squid的理由有三點:

1、Varnish h採用了“Visual Page Cache”技術,在記憶體的利用上,Varnish 比 Squid 更具有優勢,它避免了Squid頻繁在記憶體、硬碟中交換文件,性能比 Squid 還高。
2、Varnish的穩定性高,進行相同工作的Squid伺服器發生故障的機率似乎比Varnish高。
3、透過Varnish管理端口,可以使用正規標達式快速、批量地清除部分快取,這一點是Squid不能具備的。

下面是我在 Linux 系統安裝配置 Varnish 的過程:
1、首先建立www用戶和群組,以及Varnish快取資料存放目錄:
sudo /usr/sbin/groupadd www -g 48
sudo /usr/sbin/useradd -u 48 -g www www
sudo mkdir -m 755 /var/vcache
sudo chown -R www:www /var/vcache

2、建立 Varnish 日誌檔目錄:
sudo mkdir -m 755 /var/log/vcache
sudo chown -R www:www /var/log/vcache

3、我是用apt下載安裝 Varnish:(也可以下載源碼自行編譯)
sudo apr-get install varnish
配置文件在/etc/varnish/vcl.conf
相關的執行檔在/usr/sbin和/usr/bin下

4、編輯配置文件 /etc/varnish/vcl.conf:
這裡我對這段配置文件說明一下:
(1) Varnish透過反向代理請求後端IP為192.168.0.13,端口為80的Web伺服器;
(2) Varnish允許localhost、127.0.0.1、192.168.0.***三個來源IP透過PURGE方法清除快取;
(3) Varnish對HTTP協議中的GET、HEAD請求進行快取,對POST請求通過,讓其直接訪問後端的Web伺服器。之所以這樣配置,是因為POST請求一般是發送資料給伺服器的,需要伺服器接收、處理,所以不需要快取;
(4) Varnish對以.txt和.js結尾的URL快取時間設置1小時,對其他的URL快取間設置為30天。

下面是我的範例配置文件:
backend default {
        set backend.host = "192.168.0.13";
        set backend.port = "http";      
}

acl purge {
       "localhost";
       "127.0.0.1";
       "192.168.0.1/24";
}

sub vcl_recv {
       if (req.request == "PURGE") {
               if (!client.ip ~ purge) {
                       error 405 "Not allowed.";
                       lookup;
               }
       }

               if (req.request != "GET" && req.request != "HEAD") {
                       pipe;
               }
               if (req.url ~ "/.(php|cgi)($|/?)") {
                       pass;
               }

               if (req.http.Expect) {
                       pipe;
               }

               if (req.http.Authenticate || req.http.Cookie) {
                       pass;
               }

               if (req.request == "GET" && req.url ~ "/.(gif|jpg|swf|css|js)$") {
                       lookup;

               }
       else {
               lookup;
            }
       }

sub vcl_hit {
       if (req.request == "PURGE") {
               set obj.ttl = 0s;
               error 200 "Purged.";
       }
       else if (!obj.cacheable) {
               pass;
       }
}

sub vcl_miss {
       if (req.request == "PURGE") {
               error 404 "Not in cache.";
       }
}

sub vcl_fetch {
       if (req.request == "GET" && req.url ~ "/.(txt|js)$") {
               set obj.ttl = 3600s;
       }
       else {
               set obj.ttl = 30d;
       }
}



5、用適當權限啟動 Varnish
ulimit -SHn 51200

/usr/sbin/varnishd -f /etc/varnish/vcl.conf -a 0.0.0.0:80 -s file,/var/vcache/varnish_cache.data,1024M -w 30000,51200,10 -T 127.0.0.1:3500 -p client_http11=on

6、配置開機自動啟動 Varnish
編輯啟動執行腳本/etc/rc.local並將上面內容貼到最下方,也可以寫成一個啟動腳本varnish.sh

7、啟動 varnishncsa,用來將Varnish訪問日誌寫入日誌文件:
/usr/bin/varnishncsa -r /var/vcache/varnish_cache.data -w /var/log/vcache/varnish.log &

8、優化Linux核心參數:
編輯/etc/sysctl.conf 在底部增加以下内容:
net.ipv4.tcp_fin_timeout = 30
#表示如果套接字由本端要求關閉,這個參數决定了它保持在FIN-WAIT-2狀態的時間。
net.ipv4.tcp_keepalive_time = 300
#表示當Keepalive起用的時候,TCP發送keepalive消息的頻繁度。預設值是2小時,這裡我改為5分鐘。
net.ipv4.tcp_syncookies = 1
#表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防範少量SYN攻擊,預設為0,表示關閉,我將它開啟。
net.ipv4.tcp_tw_reuse = 1
#表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接,預設為0,表示關閉,我將它開啟。
net.ipv4.tcp_tw_recycle = 1
#表示開啟TCP連接中TIME-WAIT sockets的快速回收,預設為0,表示關閉,我將它開啟。
net.ipv4.ip_local_port_range = 5000 65000
#表示用來向外連接的端口範圍。預設情况下很小:32768到61000,我將它改為5000到65000。
net.ipv4.tcp_max_syn_backlog = 8192
#表示SYN隊列的長度,預設為1024,加大隊列長度為8192,可容纳更多等待連接的網路連接數。
net.ipv4.tcp_max_tw_buckets = 5000
#表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除並印出警告訊息。預設是180000,改為5000。

之後記得執行 /sbin/sysctl -p 使配置生效。


接下來看看如何管理Varnish:
1、查看 Varnish 伺服器連接數與命中率:
/usr/bin/varnishstat

2、透過 Varnish 管理端口進行管理(用 --help查看可用的指令)
/usr/bin/varnishadm -T 127.0.0.1:3500 help

3、透過Varnish管理端口,使用正規表達式批量清除快取:
(1) 例如:清除類似http://www.example.com/a/abc.html的URL地址:
/usr/bin/varnishadm -T 127.0.0.1:3500 url.purge /a/
(2) 例如:清除類似http://www.example.com/tech的URL地址:
/usr/bin/varnishadm -T 127.0.0.1:3500 url.purge w*$
(3) 例如:清除所有快取:
/usr/bin/varnishadm -T 127.0.0.1:3500 url.purge *$

4、下面是一個每天0點執行,按天切割Varnish日誌,生成一個壓縮檔案,同時删除上個月舊日誌的腳本(/usr/local/bin/cutlog.sh):

#!/bin/sh
# This file run at 00:00
date=$(date -d "yesterday" +"%Y-%m-%d")
pkill -9 varnishncsa
mv /var/log/vcache/varnish.log /var/log/vcache/${date}.log
/usr/bin/varnishncsa -r /var/vcache/varnish_cache.data -w /var/log/vcache/varnish.log &
gzip -c /var/log/vcache/${date}.log > /var/log/vcache/${date}.log.gz
rm -f /var/log/vcache/${date}.log
rm -f /var/log/vcache/$(date -d "-1 month" +"%Y-%m*").log.gz


設定在每天早上00:00定時執行:
sudo /usr/bin/crontab -e
添加以下內容
0 0 * * * /usr/local/bin/cutlog.sh

5、如果你要確定varnish是否有正確執行,你可以用netstat -atp看有沒有一個正在監聽的3500通訊埠,或者用pa aux | grep varnishd看這個程序是否有在運作。

Varnish 官方網站:http://www.varnish-cache.org/

enjoy~! 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值