如何在CentOS 7/RHEL 7上安装Varnish 4
Varnish是众所周知的前端网络缓存软件。而它也可以用作负载平衡器。
在/etc/yum.repos.d/中创建varnish.repo文件
vi /etc/yum.repos.d/varnish.repo
内容如下:
[varnish-4.0] name=Varnish 4.0 for Enterprise Linux baseurl=https://repo.varnish-cache.org/redhat/varnish-4.0/el7/$basearch enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-VARNISH
使用yum命令安装Varnish
yum install varnish varnish-libs varnish-libs-devel
查看varnish配置目录和文件。
Varnish配置目录:/etc/Varnish
Varnish配置文件:在/etc/varnish中创建了3个新文件
(a) default.vcl
(b) secret
(c) varnish.params
修改默认端口
默认情况下,Varnish 4监听端口6081。
其在文件varnish.params中定义。
将端口6081改为80,以便访问网站时,首先访问的是缓存在前端的Varnish。
vi /etc/varnish/varnish.params
VARNISH_LISTEN_PORT=80
设置Varnish缓存的存储方式
我们有两种选择:
- 保存在磁盘上的Varnish缓存
- 保存在内存上的Varnish缓存
在磁盘上设置Varnish缓存:
编辑Varnish.params,在文件上设置VARNISH和VARNISH参数。
vi /etc/varnish/varnish.params
下面给出的是VARNISH_存储的默认值。
存储文件varnish_storage.bin的大小为1GB
VARNISH_STORAGE="file,/var/lib/varnish/varnish_storage.bin,1G"
在RAM上设置Varnish缓存:
如果服务器的内存配置很高,有足够的空闲RAM用于Varnish, 那么使用这种方式缓存更快,效率更高。
vi /etc/varnish/varnish.params
我们指定2g内存作为Varnish存储。
VARNISH_STORAGE="malloc,2048m"
default.vcl文件
default.vcl是一套VCL规则,内置于Varnish。
# This is an example VCL file for Varnish.
#
# It does not do anything by default, delegating control to the
# builtin VCL. The builtin VCL is called when there is no explicit
# return statement.
#
# See the VCL chapters in the Users Guide at https://www.varnish-cache.org/docs/
# and http://varnish-cache.org/trac/wiki/VCLExamples for more examples.
# Marker to tell the VCL compiler that this VCL has been adapted to the
# new 4.0 format.
vcl 4.0;
# Default backend definition. Set this to point to your content server.
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_recv {
# Happens before we check if we have this in cache already.
#
# Typically you clean up the request here, removing cookies you dont need,
# rewriting the request, etc.
}
sub vcl_backend_response {
# Happens after we have read the response headers from the backend.
#
# Here you clean the response headers, removing silly Set-Cookie headers
# and other mistakes your backend does.
}
sub vcl_deliver {
# Happens when we have all the pieces we need, and are about to send the
# response to the client.
#
# You can do accounting or modifying the final object here.
}
这个default.vcl文件不是每项都要配置。因此,“vcl_recv,vcl_backend_response”和“vcl_deliver”没有内容。
根据backend的定义,网络流量将连接127.0.0.1的8080端口进行http通讯。
backend default {
.host = "127.0.0.1";
.port = "8080";
}
所以我们的Varnish和web服务在同一台服务器上运行。
现在根据配置,将web服务器监听端口改成8080。
将apache端口号改为8080
修改httpd.conf中Listen的值
vi /etc/httpd/conf/httpd.conf Listen *:8080
更改Apache虚拟主机中的端口号:
vi /etc/httpd/conf/httpd.conf
<VirtualHost *:8080>
ServerAdmin [email protected]
ServerName example.com
DocumentRoot /var/www/html/
ErrorLog logs/sample-error.log
CustomLog logs/sampleaccess_log common
</VirtualHost>
启动/重启Varnish,Apache服务
重启Apache
在CentOS 7/RHEL 7服务器上重新启动apache服务。
systemctl restart httpd
Varnish服务器
systemctl restart varnishd
启用Varnish日志
日志对于任何服务都很重要,因此我们将启用Varnish日志记录。
重新启动varnishncsa和varnishlog服务。
重新启动varnishncsa
systemctl restart varnishncsa
##3 重新启动varnishlog
systemctl restart varnishlog
默认Varnish日志目录路径为/var/log/Varnish/

