如何在Ubuntu 18.04 Linux上安装varnish缓存服务器

安装Varnish和nginx

让我们首先安装Varnish和nginx服务。

$ sudo apt -y install varnish nginx

使用ss命令确认安装状态:

$ ss -tlnf inet
State       Recv-Q Send-Q Local Address:Port    Peer Address:Port         
LISTEN      0      128      0.0.0.0:5355                 0.0.0.0:*        
LISTEN      0      128      0.0.0.0:80                   0.0.0.0:*        
LISTEN      0      128      0.0.0.0:22                   0.0.0.0:*        
LISTEN      0      128      0.0.0.0:6081                 0.0.0.0:*        
LISTEN      0      10     127.0.0.1:6082                 0.0.0.0:*

安装成功后,第4行Nginx服务器在端口80上监听。
Varnish使用“6081”和“6082”端口

配置nginx服务器

Nginx服务器的作用是位于Varnish缓存服务器之后,因此我们需要将其默认端口80重新配置为其他侦听端口,例如“8080”。

为此,编辑默认站点:

$ sudo nano /etc/nginx/sites-available/default

修改端口号:

server {
        listen 8080 default_server;
        listen [::]:8080 default_server;

保存新设置并重新加载nginx服务器:

$ sudo service nginx reload

现在nginx应该在8080端口上监听:

$ ss -tlnf inet
State       Recv-Q Send-Q Local Address:Port          Peer Address:Port              
LISTEN      0      128      0.0.0.0:5355                 0.0.0.0:*             
LISTEN      0      128      0.0.0.0:8080                 0.0.0.0:*             
LISTEN      0      128      0.0.0.0:22                   0.0.0.0:*             
LISTEN      0      128      0.0.0.0:6081                 0.0.0.0:*             
LISTEN      0      10     127.0.0.1:6082                 0.0.0.0:*

(可选)我们可以更改默认索引页面:

$ sudo sed -i 's/nginx/Varnish cache server on Nginx/g' /var/www/html/index.nginx-debian.html

设置varnish缓存服务器

由于我们希望通过Varnish cache server从Nginx路由流量,现在的目标是重新配置Varnish cache server,以侦听端口'80',从而充当所有公共HTTP请求的前端。为此,请编辑其systemd配置文件“/lib/systemd/system/varnish.service”:

$ sudo nano /lib/systemd/system/varnish.service

将默认端口6081修改成80:

[Unit]
Description=Varnish HTTP accelerator
Documentation=https://www.varnish-cache.org/docs/4.1/ man:varnishd
[Service]
Type=simple
LimitNOFILE=131072
LimitMEMLOCK=82000
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
ExecReload=/usr/share/varnish/varnishreload
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
PrivateDevices=true
[Install]
WantedBy=multi-user.target

我们需要指示Varnish依赖Nginx端口8080
编辑文件:

$ sudo nano /etc/varnish/default.vcl

在Varnish服务器中设置Nginx套接字信息。

# Default backend definition. Set this to point to your content server.
backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

重新加载SystemD守护程序并重新启动varnish缓存服务器:

$ sudo systemctl daemon-reload
$ sudo service varnish restart

再次使用“ss命令”来确认Varnish和Nginx的端口

$ ss -tlnf inet
State      Recv-Q Send-Q Local Address:Port     Peer Address:Port              
LISTEN     0      128       0.0.0.0:5355                  0.0.0.0:*        
LISTEN     0      128       0.0.0.0:80                    0.0.0.0:*        
LISTEN     0      128       0.0.0.0:8080                  0.0.0.0:*        
LISTEN     0      128       0.0.0.0:22                    0.0.0.0:*        
LISTEN     0      10      127.0.0.1:6082                  0.0.0.0:*

测试varnish缓存服务器

假设varnish-server-ubuntu是主机名:

$ curl -I varnish-server-ubuntu
$ curl -I web服务器ip

可以看到,我们正通过 Via: 1.1 varnish (Varnish/5.2)访问nginx服务器:

HTTP/1.1 200 OK
Server: nginx/1.13.6 (Ubuntu)
Date: Thu, 22 Nov 2015 03:50:52 GMT
Content-Type: text/html
Last-Modified: Thu, 22 Nov 2015 03:08:27 GMT
ETag: W/"5a8e342b-324"
Vary: Accept-Encoding
X-Varnish: 2
Age: 0
Via: 1.1 varnish (Varnish/5.2)
Accept-Ranges: bytes
Connection: keep-alive

我们还可以使用“varnishstat命令”查看一些rancish缓存统计信息:

$ sudo varnishstat
日期:2020-07-07 20:55:32 来源:oir作者:oir