[文章作者:张宴 本文版本:v1.2 最后修改:2008.01.02 转载请注明出处:http://blog.zyan.cc]
我曾经写过一篇文章──《初步试用Squid的替代产品──Varnish Cache网站加速器》,但当时仅仅是用着玩,没做深入研究。
今天写的这篇关于Varnish的文章,已经是一篇可以完全替代Squid做网站缓存加速器的详细解决方案了。网上关于Varnish的资料很少,中文资料更是微乎其微,希望本文能够吸引更多的人研究、使用Varnish。
在我看来,使用Varnish代替Squid的理由有三点:
1、Varnish采用了“Visual Page Cache”技术,在内存的利用上,Varnish比Squid具有优势,它避免了Squid频繁在内存、磁盘中交换文件,性能要比Squid高。
2、Varnish的稳定性还不错,我管理的一台图片服务器运行Varnish已经有一个月,没有发生过故障,而进行相同工作的Squid服务器就倒过几次。
3、通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存,这一点是Squid不能具备的。
下面来安装Varnish网站缓存加速器(Linux系统):
1、创建www用户和组,以及Varnish缓存文件存放目录(/var/vcache):
2、创建Varnish日志目录(/var/logs/):
3、编译安装varnish:
4、创建Varnish配置文件:
输入以下内容:
这里,我对这段配置文件解释一下:
(1)、Varnish通过反向代理请求后端IP为192.168.0.5,端口为80的web服务器;
(2)、Varnish允许localhost、127.0.0.1、192.168.0.***三个来源IP通过PURGE方法清除缓存;
(3)、Varnish对域名为blog.zyan.cc的请求进行处理,非blog.zyan.cc域名的请求则返回“Zhang Yan Cache Server”;
(4)、Varnish对HTTP协议中的GET、HEAD请求进行缓存,对POST请求透过,让其直接访问后端Web服务器。之所以这样配置,是因为POST请求一般是发送数据给服务器的,需要服务器接收、处理,所以不缓存;
(5)、Varnish对以.txt和.js结尾的URL缓存时间设置1小时,对其他的URL缓存时间设置为30天。
5、启动Varnish
6、启动varnishncsa用来将Varnish访问日志写入日志文件:
7、配置开机自动启动Varnish
在末尾增加以下内容:
8、优化Linux内核参数
在末尾增加以下内容:
再看看如何管理Varnish:
1、查看Varnish服务器连接数与命中率:
2、通过Varnish管理端口进行管理:
用help看看可以使用哪些Varnish命令:
3、通过Varnish管理端口,使用正则表达式批量清除缓存:
(1)、例:清除类似http://blog.zyan.cc/a/zhangyan.html的URL地址):
(2)、例:清除类似http://blog.zyan.cc/tech的URL地址:
(3)、例:清除所有缓存:
4、一个清除Squid缓存的PHP函数(清除Varnish缓存同样可以使用该函数,无需作任何修改,十分方便):
附1:Varnish官方网站:http://www.varnish-cache.org/
附2:2007年12月10日,我写了一个每天0点运行,按天切割Varnish日志,生成一个压缩文件,同时删除上个月旧日志的脚本(/var/logs/cutlog.sh):
/var/logs/cutlog.sh文件内容如下:
设置在每天00:00定时执行:
我曾经写过一篇文章──《初步试用Squid的替代产品──Varnish Cache网站加速器》,但当时仅仅是用着玩,没做深入研究。
今天写的这篇关于Varnish的文章,已经是一篇可以完全替代Squid做网站缓存加速器的详细解决方案了。网上关于Varnish的资料很少,中文资料更是微乎其微,希望本文能够吸引更多的人研究、使用Varnish。
在我看来,使用Varnish代替Squid的理由有三点:
1、Varnish采用了“Visual Page Cache”技术,在内存的利用上,Varnish比Squid具有优势,它避免了Squid频繁在内存、磁盘中交换文件,性能要比Squid高。
2、Varnish的稳定性还不错,我管理的一台图片服务器运行Varnish已经有一个月,没有发生过故障,而进行相同工作的Squid服务器就倒过几次。
3、通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存,这一点是Squid不能具备的。
下面来安装Varnish网站缓存加速器(Linux系统):
1、创建www用户和组,以及Varnish缓存文件存放目录(/var/vcache):
/usr/sbin/groupadd www -g 48
/usr/sbin/useradd -u 48 -g www www
mkdir -p /var/vcache
chmod +w /var/vcache
chown -R www:www /var/vcache
/usr/sbin/useradd -u 48 -g www www
mkdir -p /var/vcache
chmod +w /var/vcache
chown -R www:www /var/vcache
2、创建Varnish日志目录(/var/logs/):
mkdir -p /var/logs
chmod +w /var/logs
chown -R www:www /var/logs
chmod +w /var/logs
chown -R www:www /var/logs
3、编译安装varnish:
wget http://blog.zyan.cc/soft/linux/varnish/varnish-1.1.2.tar.gz
tar zxvf varnish-1.1.2.tar.gz
cd varnish-1.1.2
./configure --prefix=/usr/local/varnish
make && make install
tar zxvf varnish-1.1.2.tar.gz
cd varnish-1.1.2
./configure --prefix=/usr/local/varnish
make && make install
4、创建Varnish配置文件:
vi /usr/local/varnish/vcl.conf
输入以下内容:
引用
backend myblogserver {
set backend.host = "192.168.0.5";
set backend.port = "80";
}
acl purge {
"localhost";
"127.0.0.1";
"192.168.1.0"/24;
}
sub vcl_recv {
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
lookup;
}
if (req.http.host ~ "^blog.zyan.cc") {
set req.backend = myblogserver;
if (req.request != "GET" && req.request != "HEAD") {
pipe;
}
else {
lookup;
}
}
else {
error 404 "Zhang Yan Cache Server";
lookup;
}
}
sub vcl_hit {
if (req.request == "PURGE") {
set obj.ttl = 0s;
error 200 "Purged.";
}
}
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;
}
}
set backend.host = "192.168.0.5";
set backend.port = "80";
}
acl purge {
"localhost";
"127.0.0.1";
"192.168.1.0"/24;
}
sub vcl_recv {
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
lookup;
}
if (req.http.host ~ "^blog.zyan.cc") {
set req.backend = myblogserver;
if (req.request != "GET" && req.request != "HEAD") {
pipe;
}
else {
lookup;
}
}
else {
error 404 "Zhang Yan Cache Server";
lookup;
}
}
sub vcl_hit {
if (req.request == "PURGE") {
set obj.ttl = 0s;
error 200 "Purged.";
}
}
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;
}
}
这里,我对这段配置文件解释一下:
(1)、Varnish通过反向代理请求后端IP为192.168.0.5,端口为80的web服务器;
(2)、Varnish允许localhost、127.0.0.1、192.168.0.***三个来源IP通过PURGE方法清除缓存;
(3)、Varnish对域名为blog.zyan.cc的请求进行处理,非blog.zyan.cc域名的请求则返回“Zhang Yan Cache Server”;
(4)、Varnish对HTTP协议中的GET、HEAD请求进行缓存,对POST请求透过,让其直接访问后端Web服务器。之所以这样配置,是因为POST请求一般是发送数据给服务器的,需要服务器接收、处理,所以不缓存;
(5)、Varnish对以.txt和.js结尾的URL缓存时间设置1小时,对其他的URL缓存时间设置为30天。
5、启动Varnish
ulimit -SHn 51200
/usr/local/varnish/sbin/varnishd -n /var/vcache -f /usr/local/varnish/vcl.conf -a 0.0.0.0:80 -s file,/var/vcache/varnish_cache.data,1G -g www -u www -w 30000,51200,10 -T 127.0.0.1:3500 -p client_http11=on
/usr/local/varnish/sbin/varnishd -n /var/vcache -f /usr/local/varnish/vcl.conf -a 0.0.0.0:80 -s file,/var/vcache/varnish_cache.data,1G -g www -u www -w 30000,51200,10 -T 127.0.0.1:3500 -p client_http11=on
6、启动varnishncsa用来将Varnish访问日志写入日志文件:
/usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/varnish.log &
7、配置开机自动启动Varnish
vi /etc/rc.local
在末尾增加以下内容:
引用
ulimit -SHn 51200
/usr/local/varnish/sbin/varnishd -n /var/vcache -f /usr/local/varnish/vcl.conf -a 0.0.0.0:80 -s file,/var/vcache/varnish_cache.data,1G -g www -u www -w 30000,51200,10 -T 127.0.0.1:3500 -p client_http11=on
/usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/youvideo.log &
/usr/local/varnish/sbin/varnishd -n /var/vcache -f /usr/local/varnish/vcl.conf -a 0.0.0.0:80 -s file,/var/vcache/varnish_cache.data,1G -g www -u www -w 30000,51200,10 -T 127.0.0.1:3500 -p client_http11=on
/usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/youvideo.log &
8、优化Linux内核参数
vi /etc/sysctl.conf
在末尾增加以下内容:
引用
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000 65000
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000 65000
再看看如何管理Varnish:
1、查看Varnish服务器连接数与命中率:
/usr/local/varnish/bin/varnishstat
2、通过Varnish管理端口进行管理:
用help看看可以使用哪些Varnish命令:
/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 help
引用
Available commands:
ping [timestamp]
status
start
stop
stats
vcl.load
vcl.inline
vcl.use
vcl.discard
vcl.list
vcl.show
param.show [-l] []
param.set
help [command]
url.purge
dump.pool
ping [timestamp]
status
start
stop
stats
vcl.load
vcl.inline
vcl.use
vcl.discard
vcl.list
vcl.show
param.show [-l] []
param.set
help [command]
url.purge
dump.pool
3、通过Varnish管理端口,使用正则表达式批量清除缓存:
(1)、例:清除类似http://blog.zyan.cc/a/zhangyan.html的URL地址):
/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge /a/
(2)、例:清除类似http://blog.zyan.cc/tech的URL地址:
/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge w*$
(3)、例:清除所有缓存:
/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge *$
4、一个清除Squid缓存的PHP函数(清除Varnish缓存同样可以使用该函数,无需作任何修改,十分方便):
附1:Varnish官方网站:http://www.varnish-cache.org/
附2:2007年12月10日,我写了一个每天0点运行,按天切割Varnish日志,生成一个压缩文件,同时删除上个月旧日志的脚本(/var/logs/cutlog.sh):
/var/logs/cutlog.sh文件内容如下:
引用
#!/bin/sh
# This file run at 00:00
date=$(date -d "yesterday" +"%Y-%m-%d")
pkill -9 varnishncsa
mv /var/logs/youvideo.log /var/logs/${date}.log
/usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/youvideo.log &
mkdir -p /var/logs/youvideo/
gzip -c /var/logs/${date}.log > /var/logs/youvideo/${date}.log.gz
rm -f /var/logs/${date}.log
rm -f /var/logs/youvideo/$(date -d "-1 month" +"%Y-%m*").log.gz
# This file run at 00:00
date=$(date -d "yesterday" +"%Y-%m-%d")
pkill -9 varnishncsa
mv /var/logs/youvideo.log /var/logs/${date}.log
/usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/youvideo.log &
mkdir -p /var/logs/youvideo/
gzip -c /var/logs/${date}.log > /var/logs/youvideo/${date}.log.gz
rm -f /var/logs/${date}.log
rm -f /var/logs/youvideo/$(date -d "-1 month" +"%Y-%m*").log.gz
设置在每天00:00定时执行:
/usr/bin/crontab -e
或者 vi /var/spool/cron/root
输入以下内容:引用
0 0 * * * /bin/sh /var/logs/cutlog.sh
jack
2022-2-11 15:44
I think this is an informative post and it is very useful and knowledgeable. therefore, I would like to thank you for the efforts you have made in writing this article. Trust Wallet | Robinhood crypto wallet [看不清?
jackleo
2022-2-11 16:05
Cryptocurrencies have evolved and managed to leave a mark in the next chapter of the financial industry along with tech improvisations. It has been quite the journey for the digital currencies from no financial worth to hundreds of dollars’ worth. robinhood crypto wallet | coinsmart login
shapemyhouse
2022-2-11 18:30
Are You Looking for the best construction company in Delhi, Noida, Gurgaon, Ghaziabad, Greater Noida, Faridabad then Welcome To Shape My House - A Residential and Commercial Property Reliable Delhi construction company. We proved that Shape My House is the leading brand among top construction companies in Delhi.https://www.shapemyhouse.com/
zareen
2022-2-11 19:03
Navigate to Foxnews.com/connect using a web browser on your mobile device, laptop, tablet, or PC. Enter the code that was provided on your connected device. Your will then prompt you to sign in with your subscription credentials. If you continuously are in the signed out/unauthenticated state, please ensure your browser is not set to block all third party cookies. The problem could also be browser specific.
zareen
2022-2-11 19:03
Connect your Smart TV to the internet and visit the “App Store” from the home screen. Search for Disneyplus.com/begin. From the results, click on the Disney+ app icon and then “add to home.” It will download and install the app on your Smart TV. If you sign up for either the Start Unlimited plan or the Do More Unlimited plan, you can get the service for free for six months. If you sign up for the Play More Unlimited plan or the Get More Unlimited Plan, you can get Disney Plus for free and ESPN Plus and Hulu (with ads) for free.
zareen
2022-2-11 19:04
Connect your Smart TV to the internet and visit the “App Store” from the home screen. Search for Disneyplus.com/begin. From the results, click on the Disney+ app icon and then “add to home.” It will download and install the app on your Smart TV. If you sign up for either the Start Unlimited plan or the Do More Unlimited plan, you can get the service for free for six months. If you sign up for the Play More Unlimited plan or the Get More Unlimited Plan, you can get Disney Plus for free and ESPN Plus and Hulu (with ads) for free.
using-key
2022-2-12 00:08
Thanks for this valuable information!https://using-key.ukleadset.com<a href="https://using-key.ukleadset.com">using-key</a>
augetttis
2022-2-12 00:09
Thanks for this valuable information!https://augetttis.ukleadset.com<a href="https://augetttis.ukleadset.com">augetttis</a>
web design company in Bangladesh
2022-2-12 20:27
In addition, all text-based content is written in the same voice. This is especially true if you hire a digital marketer to create blog posts and related content. web design company in Bangladesh In this way, you create your own consistent image as a brand. Consumers see you as an entity for connection, loyalty, and interaction.
ellison
2022-2-14 13:47
If you want to watch sports content and additional movies and TV shows from non-Disney sources,disneyplus.com/begin you should consider the bundle option.The Disney Plus, Hulu, and ESPN+ bundle currently costs $14 a month. If you sign up for each of these services individually, the total would come out to $22 a month. This means that you can enjoy an $8 discount when bundling the three together.Existing Disney Plus or ESPN+ subscribers can upgrade to the bundle without having to cancel their current memberships.https://disneypluscombegin.com
ellison
2022-2-14 13:49
Fox News, the influential cable network launched by Rupert Murdoch in 1996,Foxnews.com/connect holds a unique place in the American media landscape, particularly for those on the ideological right. While Democrats in the United States turn to and place their trust in a variety of media outlets for political news, no other source comes close to matching the appeal of Fox News for Republicans.Below are five facts about Fox News and how Americans feel about it.https://foxnews-comconnect.com
ellison
2022-2-14 13:50
So how do you use Plex? Let's go ahead and take a tour of the interface.Plex.tv/link We’ll start by explaining how to add your own movies, music, and photos to Plex.You’ll need to set up a drive on your PC with the movies, shows, and music you want to add. You’ll then connect Plex to that specific folder. Then Plex will scan that folder and pull the files into your library.When you go into your Plex app, you'll be able to pull those assets and watch them on-https://plextvvlink.com
SKAVBET
2022-2-14 16:57
https://skabet789.com/ SKABET789 เว็บสล็อตออนไลน์ สล็อต SKABET เว็บตรงไม่ผ่านเอเย่นต์SLOTSKABET มั่นคงSLOT SKABET ปลอดภัย SKABET SLOT 100% https://skabet789.com/
johnsy6968
2022-2-14 17:14
Either go to Foxnews.com/connect and enter the displayed Activation Code or use your smartphone camera to read the QR code shown. When creating a profile, after entering the activation code, the Create Your Account screen will be displayed. Launch the FOX App on your device. Sign in with an existing FOX account by entering your email and password. Once you're signed in, select the Cast icon from the upper or lower right side of the screen. Select your Chromecast from the list of devices to launch the FOX App on your TV. Fox News Channel on Roku comes with most of the News content from the cable version of it. It also has many episodes of many popular shows from the channel if you are a subscriber to the pay TV service.The free content includes the Latest News videos, Top Stories, Primetime Highlights.Can I watch FOX on my phone? Yes. Simply download FOX NOW on your iOS or Android device. Then enter paid TV subscription credentials to activate the app and begin streaming your favorite shows, live sports, and news.
johnsy6968
2022-2-14 17:14
Head over to the Disneyplus.com/begin website and select 'Start Free Trial'. Step 2: Click the button entitled 'Start Free Trial'or hit the one below. Step 3: Enter your email address, followed by your credit card information. Enter your email address followed by your payment information. With Disney+, you get new releases, classics, series, and Originals from the creators at Disney, Pixar, Marvel, Star Wars, and Nat Geo. With Hulu, you can enjoy over 80,000 episodes of every kind of TV, including hit series, breakthrough Hulu Originals, and kids TV. Does Disney Plus have a 30 day free trial? Unfortunately, we have some bad news: you can't get a Disney Plus free trial anymore in most parts of the world. That means your cheapest option is now a single month of the service, and this weighs in at $7.99 in the USA, £7.99 for UK viewers, and AU$11.99 in Australia.Disney+ subscribers have the ability to cancel their subscription at any time. Please keep in mind, canceling
ronald
2022-2-14 19:17
Can you send $10000 through the cash app if the requirement appears? The query related to Can you send $10000 through cash app is an important factor. Most users are not technically competent in terms of managing their cash app account. Therefore, they need to learn about the actual tactics that will help them use their cash app account efficiently. Such an aspect is important as the cash app allows the legitimate transaction only and hence users need to follow the defined policies.
johnsy6968
2022-2-14 20:40
Head over to the Disneyplus.com/begin website and select 'Start Free Trial'. Step 2: Click the button entitled 'Start Free Trial'or hit the one below. Step 3: Enter your email address, followed by your credit card information. Enter your email address followed by your payment information. With Disney+, you get new releases, classics, series, and Originals from the creators at Disney, Pixar, Marvel, Star Wars, and Nat Geo. With Hulu, you can enjoy over 80,000 episodes of every kind of TV, including hit series, breakthrough Hulu Originals, and kids TV. Does Disney Plus have a 30 day free trial? Unfortunately, we have some bad news: you can't get a Disney Plus free trial anymore in most parts of the world. That means your cheapest option is now a single month of the service, and this weighs in at $7.99 in the USA, £7.99 for UK viewers, and AU$11.99 in Australia.Disney+ subscribers have the ability to cancel their subscription at any time. Please keep in mind, canceling
johnsy6968
2022-2-14 20:41
In your browser on your desktop or mobile device, go to Plex tv code and ensure that you're signed into the appropriate Plex account. Enter the 4-character code and submit. After the code is submitted, your player app will refresh itself a few seconds later and be linked with your account. Ensure you have the current version of Plex tv link Media Server installed. Ensure that Plex Media Server is actually actively running. Verify that your Server is listed on your Devices page.Make sure you aren't requiring secure connections on the server while using an app that doesn't support them More advanced users should consider a premium Plex Pass account instead, which costs either $4.99 per month, $39.99 per year, or $119.99 for a lifetime subscription. A Plex Pass includes everything in the free account, plus a host of other usability features. Plex is perfectly legal whenever you're streaming from their server or whenever you upload personal media that was acquired and reproduced legally. At the end of the day, it
Ambbet
2022-2-16 14:22
You should essentially phenomenal also strong guidance, which implies take note.<a href=" https://cn-hgsl.com"> cn-hgsl </a><a href=" https://theamazingweb.net"> theamazingweb </a><a href=" https://cqmx9.com"> cqmx9 </a><a href=" https://bdsm2rent.com"> bdsm2rent </a>
Jennifer
2022-2-17 18:23
Hi! this is nice article you shared with great information. Thanks for giving such a wonderful informative information. I hope you will publish again such type of post. Also, please check out about Crypto.com Log In | Crypto.com Log In | Metamask Log In
分页: 282/436 277 278 279 280 281 282 283 284 285 286