安装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