post

利用 Varnish 缓存加速网站响应

Varnish,或称为 Varnish Cache,是一套高效能的反向网站快取伺服器(reverse proxy server)。Varnish 目前被用在挪威最大的报社 Verdens Gang 上,官方网站:https://www.varnish-cache.org/

应用在内存 1G 以上的服务器站点上最佳,可以加速网页的访问,Varnish 监听 80 端口,对 HTTP 协议中的 GET、HEAD 请求进行缓存,对 POST 请求透过。

我的博客之前加载要 2s 以上,使用 Varnish 初期,页面访问在 1s 以内,但是使用几个月后,发现博客很慢,问题也是出在 Varnish 上,重启就好了。我的服务器是 1G 内存,分配给 Varnish 512M,应该是配置的不合理,还请了解的朋友指教。

网站测速结果

下面的才是重点,说下如何在服务器上安装及启动 Varnish 缓存

环境: Linux CentOS、1G 内存、Varnish 3.0、lnmp

一、安装:

通过 SSH 远程登录到服务器,然后依次执行下列命令行。

# rpm --nosignature -i http://repo.varnish-cache.org/redhat/varnish-3.0/el5/noarch/varnish-release-3.0-1.noarch.rpm
# yum install varnish

# cd /etc/varnish/
# mv default.vcl default.vcl.bak
# wget http://centos.googlecode.com/files/default.vcl
# vi default.vcl

default.vcl 是配置 Varnish 的缓存规则,利用 googlecode 上的覆盖本地配置,具体的可以打开配置文件看一看。

线上使用要监听 80 端口,需要将 Nginx 上网站的端口改为其他(下文讲到的网站端口设置为 8020),否则 80 端口被占用,Varnish 就无法启动了,本地的话 Varnish 端口就可以随意设置,如 8010,访问 //www.izhangheng.com:8010 就可以看到效果。

二、Varnish 配置

下面介绍下需要更改的 default.vcl 或 Nginx 的配置。

Nginx 中所有 listen 的端口都要更改,包括底部 vhost 虚拟目录中的配置,否则 Nginx 会占用监听的端口,如果 80 端口被占用,前面的 Varnish 就无法监听 80 端口了,会出现 404 错误。

1、Nginx 配置文件和 vhost 配置文件中,更改端口号,Nginx 主文件位置:/usr/local/nginx/conf/nginx.conf

server
 {
        listen  8020;
        server_name www.izhangheng.com;
        access_log off; 
 }

2、后端 Web 应用程序的 ip 和端口,与 Ngnix 或 Apache 中监听的网站端口一致,下面的配置就是告诉 Varnish 访问的网站的端口是 8020,如果是一个站点,也可以改为域名,如 .host = “www.izhangheng.com”。

Varnish 配置文件位置:/etc/varnish/default.vcl。

backend default {
  .host = "127.0.0.1";
  .port = "8020";
}

3、下面的是配置允许刷新缓存的域名或者 ip,可以配置多个:

acl purge {
        "127.0.0.1";
} 

sub vcl_recv {
        # 下面是判断缓存的站点,网站中有多个虚拟目录的话,直接配置127.0.0.1就ok了
	if (req.http.host ~ "(服务器IP)") { 
        set req.backend = default; 
    }  else { 
	return (pass); 
    }

4、查看 Varnish 的服务 ip 和端口号,Varnish 系统配置文件位置:/etc/sysconfig/varnish。

# # Telnet admin interface listen address and port
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1
VARNISH_ADMIN_LISTEN_PORT=6082

# 另外还需要关注下这两个配置
VARNISH_LISTEN_PORT=80  #定义 varnish 的端口为80
VARNISH_STORAGE_SIZE=1G  #定义 varnish 最大缓存大小为 1G

三、Varnish 启动命令

1、终端中执行下面命令启动 Varnish,官方的命令启动分配的内存为 1G,我的内存共 1G,我给分配了 512M。

# varnishd -f /etc/varnish/default.vcl -s malloc,512M -T 127.0.0.1:6082 -a 0.0.0.0:80

命令中 127.0.0.1:6082 就是 Varnish 配置第4点介绍的服务 ip 和端口,而最后的 0.0.0.0:80,就是监听 80 端口,众所周知,网站访问默认端口就是80,访问时输入 //www.izhangheng.com 和 //www.izhangheng.com:80 是一样的。

2、下面命令可以查看当前网络连接情况,可以看到 Varnish 已经成功监听到 80 端口就正确了。

# netstat -ntlp

3、下面命令可以强制杀掉 Varnish 的服务,Varnish 也就停止了。

# pkill varnishd

4、WordPress 中可以安装 w3tc 缓存插件来清除 Varnish 缓存。

相关文档:

Varnish 3.0 官方文档:https://www.varnish-cache.org/docs/3.0/

Varnish简单配置实例:http://www.fkblog.org/blog907

Comments

  1. 这是基调的探测图?

  2. 高大上

  3. 用了有效果吗?

  4. 网站打开速度很不错~

Speak Your Mind

*

· 527 次浏览