Varnish 解决方案概述
Varnish 缓存是一个开放源代码的Web应用程序加速器.
Magento 2 支持Varnish 3.0.5以上的版本.
magento 2 强烈建议使用Varnish 代替默认的. full-page 缓存,因为他比默认的缓存块很多。
Varnish 解析图
过程概述
本主题讨论如何使用最少的参数和测试来安装Varnish。然后你可以从Magento 2后台导出一个Varnish配置。
这个过程可以概括如下:
- 通过访问任何magento页面如果你得到HTTP响应头表明Varnish工作测试成功
- 安装magento 2 登录后台创建一个Varnish 配置文件.
- 覆盖原先的Varnish配置文件.
-
再次测试一切。
如过
<Magento 2 安装目录>/var/page_cache
目录下面什么都没有,表示Varnish 配置成功!
下一步
安装Varnish
有关安装Varnish的更多信息,请网上搜索教程。
确认你的Varnish版本
输入下面的命令:
varnishd -V
示例:
varnishd (varnish-4.0.3 revision b8c4a34)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2014 Varnish Software AS
下一步
配置Varnish 和 web服务器
配置您的web服务器
配置Web服务器监听默认端口80以外的端口,因为Varnish直接响应传入的HTTP请求,而不是web服务器。
在后面的章节中,我们使用端口8080作为一个例子.
改变Apache 2.2监听端口:
- 打开
/etc/httpd/conf/httpd.conf
在文本编辑器中. - 查找
Listen
指令. - 将端口的值更改为
8080
. - 保存更改
httpd.conf
.
修改Varnish系统配置
- 打开
/etc/sysconfig/varnish
(或/etc/default/varnish
在 Debian 和 Ubuntu) 在文本编辑器中. -
设置Varnish 端口为 80:
VARNISH_LISTEN_PORT=80
-
## Alternative 1, Minimal configuration, no VCL #DAEMON_OPTS="-a :6081 \ # -T localhost:6082 \ # -b localhost:8080 \ # -u varnish -g varnish \ # -s file,/var/lib/varnish/varnish_storage.bin,1G" ## Alternative 2, Configuration with VCL #DAEMON_OPTS="-a :6081 \ # -T localhost:6082 \ # -f /etc/varnish/default.vcl \ # -u varnish -g varnish \ # -S /etc/varnish/secret \ # -s file,/var/lib/varnish/varnish_storage.bin,1G"
- 保存更改
/etc/sysconfig/varnish
.
下一步
配置Magento 2使用Varnish
配置Magento使用Varnish :
- 用管理员身份登录magento 2.
- 点击 STORES > Configuration > ADVANCED > System > Full Page Cache
- 从缓存应用列表中点击Varnish 缓存
- 点击 保存配置.
-
单击一个导出按钮以创建
default.vcl
你可以使用 Varnish.如果使用Varnish 4, 点击 Export VCL for Varnish 4
如下图:
- 代替之前的
default.vcl
最后一步
最后的验证
验证HTTP响应头
当你访问magento页面时使用curl或其他工具查看HTTP响应头
确保你使用的magento 2 开发者模式; 否则,你将无法看到。
例如,
curl -I -v --location-trusted 'http://192.0.2.55/magento2'
X-Magento-Cache-Control: max-age=86400, public, s-maxage=86400
Age: 0
X-Magento-Cache-Debug: MISS
503(Backend Fetch Failed后端获取失败)
如果Magento2缓存标签使用长度超过8192个字符,你可以看到HTTP 503(后台读取失败)在浏览器中的错误。这些错误可能显示如下:
Error 503 Backend fetch failed
Backend fetch failed
为了解决这个问题,修改varnish配置文件如下:
-
用
root
用户打开:- CentOS 6:
/etc/sysconfig/varnish
- CentOS 7:
/etc/varnish/varnish.params
- Ubuntu:
/etc/default/varnish
- CentOS 6:
- 搜索
http_resp_hdr_len
参数. - 如果参数不存在增加
thread_pool_max
. -
设置
http_resp_hdr_len
示例:
-p http_resp_hdr_len=64000 \
代码片段:
# DAEMON_OPTS is used by the init script. DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \ -f ${VARNISH_VCL_CONF} \ -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \ -p thread_pool_min=${VARNISH_MIN_THREADS} \ -p thread_pool_max=${VARNISH_MAX_THREADS} \ -p http_resp_hdr_len=64000 \ -S ${VARNISH_SECRET_FILE} \ -s ${VARNISH_STORAGE}"