Varnish 初体验

Varnish 是一款高性能的开源 HTTP 加速器,反向代理缓存,挪威最大的在线报纸 Verdens Gang 使用 3 台 Varnish 代替了原来的 12 台 Squid,性能比以前更好。

安装

以 ubuntu 为例

sudo apt-get install varnish

启动

service varnish start

访问网站:以我安装 varnish 的虚拟机为例,访问 192.168.0.215:6081

出现如下提示:

默认情况下 varnish 会请求他所在服务器的 8080 端口。
而我虚拟机上实际用的是 80 端口。所以 503 错误。

修改配置
etc/varnish/default.vcl

打开该文件会看到:

vcl 4.0;

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

我将端口改为 80 后保存,然后

service varnish reload

然后再刷新这下就正常了。跟访问 80 端口一样。

初步试验

在安装 varnish 之前,我已经建好了 Magento 2 的一个站点,80 访问正常。
下面用 6081 端口访问,看看有什么问题,记录下来,可能对后面有参照作用。

以下是我发现的问题:

首页正常,但页面中所有的链接仍然会被跳转回 80 端口。就是说尽管我请求的页面是 6081 但是页面中的其他链接仍然是 80 端口的请求。
6081 地址的后台是 404
woff, woff2,ttf 字体文件状态是 canceled

对比请求的头部信息变化:
6081 请求
6081

80 请求
80

至少可以发现请求头中出现了 X-Varnish

让 Varnish 使用 80

先让 varnish 停下

service varnish stop

我虚拟机是 ubuntu 16.04 (检查版本:lsb_release -a)
其他版本的文件位置可能有变化,请参考文尾的参考链接。

修改 /etc/default/varnish

然后修改:

DAEMON_OPTS="-a :6081 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m"

DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m"

完成后启动 varnish

service varnish start

现在我们更改 /etc/varnish/default.vcl
让他后端去找 8080 端口,所以将

vcl 4.0;

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

改回:

vcl 4.0;

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

重新载入配置文件
service varnish reload

下面让 Apache 把 80 端口让出来,使用 8080 端口。

首先是 /etc/apache2/ports.conf

Listen 80 改为 Listen 8080

然后虚拟目录的配置 /etc/apache2/sites-available/000-default.conf

<VirtualHost *:80> 80 改为 * 或者 8080

重启 Apache

service apache2 restart

然后发现访问 80 的时候提示错误 ERR_CONNECTION_REFUSED
查看端口情况 netstat -lntp 发现真的没有监听 80 端口

然后使用命令:service varnish status

发现他的配置文件是 /lib/systemd/system/varnish.service
下面打开该文件改为:

[Service]
ExecStart=/usr/sbin/varnishd -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m

保存后 systemctl daemon-reload

然后重新启动下 varnish

这下终于可以愉快的玩耍了。

配置 Magneto

可以通过命令行或者进入后台进行配置,参考文尾的参考链接。

登录管理后台后,进入 STORES > Configuration > ADVANCED > System > Full Page Cache.

然后看图:
Configure Magento to use Varnish

刷新缓存,体验飞起来的速度。 φ(゜▽゜*)

首页加载时间如下图,留着以后参考:

参考网址

如果遇到问题,可以参考以下文档,顺藤摸瓜。

Put Varnish on port 80
Configure Magento to use Varnish

2 comments

  1. kaka

    博主,首先赞一个
    你是自由工作者吗?

    1. Pisces Post author

      谢谢你的赞,目前是自由职业,不过正在找合适的工作,求收留。

发表评论

电子邮件地址不会被公开。 必填项已用*标注