Varnish Cache + NGINX 反向代理是如何工作的
已发表: 2022-08-09在本文中,我们将讨论 Varnish 缓存 NGINX 反向代理以及如何设置它。
一个强调 HTTP 缓存的代理服务器是 Varnish。 它是一个 HTTP 加速器,可以作为 Apache 或 NGINX Web 服务器的反向代理。 流量大、知名度高的网站都采用了 Varnish。
目录
什么是清漆缓存?
对于基于 Web 的公司,缓存通常是最关键的软件部分。 Varnish Cache 是一个强大的、开源的 HTTP 引擎/反向 HTTP 代理,正如其名称所暗示的那样:缓存(或存储)访问者第一次查看网页的副本。 这可以将网站的速度提高 1000%。 Varnish 向您的服务器发出单个请求以缓存页面,之后它会处理对同一页面的任何后续请求。 这导致了令人难以置信的快速内容交付和对后端服务器资源的更少需求。
- Varnish 的核心竞争力是速度和性能。
- 服务器基础设施节省
- 可扩展性——无论访问者或请求的数量如何,Varnish 都能让您的网站满足需求。
- 中断保护:即使您的服务器崩溃,Varnish 也会继续提供缓存信息。
- 灵活性:Varnish 配置语言 (VCL) 允许创建专门的解决方案、规则和模块。
- 增强的用户体验
Varnish Cache 是如何工作的?
在它们到达您的 Web 服务器的后端之前,Varnish 会处理所有传入的请求。 它的缓存处理所有网络流量,默认情况下每两分钟刷新一次。

Varnish 会将请求路由到 Web 服务器的后端并缓存结果,正如我们刚刚在通用反向代理段落中看到的,如果请求没有被缓存。
一旦请求被缓存,它们就会被放入内存中,然后可以快速检索并发送给客户。 Varnish 使用 VCL 语言来表达设置、缓存策略和其他规则(Varnish 配置语言)。
您可以使用该语言及其变体以不同方式响应每个请求。 例如,您可以将某些请求定向到特定后端或指示 Varnish 根据传入请求的特征或其结果采取不同的操作。
即使 Web 服务器不可用,缓存的材料仍然可以提供,因为有一个称为后端轮询的内置功能,这是另一个惊人的 Varnish 功能。 如果 Varnish 检测到停机时间,它将继续在称为宽限期的时间范围内提供缓存的内容。 后端轮询以您可以灵活设置的频率查询服务器。
什么是 Nginx?
NGINX 是可用于视频流、缓存、反向代理、Web 服务和其他功能的开源软件。 它最初是作为一个为实现最高速度和可靠性而构建的 Web 服务器。 除了作为 HTTP 服务器之外,NGINX 还可以作为 HTTP 服务器、电子邮件代理服务器(IMAP、POP3 和 SMTP)、反向代理和 HTTP、TCP 和 UDP 服务器的负载平衡器运行。
什么是反向代理?
反向代理的主要功能是保护 Web 服务器免受传入流量的影响。 每个连接请求都由一个反向代理接收,它在连接到处理请求的服务器之前通过许多服务器转发它。
每个反向代理操作都包含三个主要阶段:
- 连接请求收集:在网络边缘,反向代理接受传入的请求。
- TCP 三向握手:在 TCP 三向握手后创建与反向代理的连接,并关闭第一个连接。
- 源服务器连接:反向代理使用虚构的 IP 地址将源服务器连接到客户端请求。
用户永远无法直接连接到源服务器,因为所有 Web 浏览器与 Web 应用程序的连接始终是通过反向代理进行的。
你如何设置 Varnish 缓存 Nginx 反向代理?
在你的服务器上安装 Nginx
首先,我们需要使用apt
命令从 Ubuntu 存储库安装 Nginx
sudo apt update apt install nginx -y

安装完成后,我们需要使用systemctl
命令启动并启用 Nginx 在每次系统启动时启动
systemctl start nginx systemctl enable nginx

在端口 88 上配置 Nginx
我们将设置 Nginx 使用非常规的 HTTP 端口 8080 进行操作。 为此,我们必须修改位于“sites-available”目录中的虚拟主机文件。
nano /etc/nginx/sites-available/default

将“listen”行值更改为 8080。保存并退出。

现在通过测试 Nginx 设置来检查错误。 之后重新启动服务。

nginx -t systemctl restart nginx

使用netstat
再次检查 Nginx,并确认它在非常规的 HTTP 端口 8080 上运行。
netstat -plntu

已经安装好了,Nginx Web 服务器当前正在使用 8080 端口。
在 Ubuntu 上安装清漆
我们必须使用apt
命令安装 varnish
sudo apt install varnish -y

使用下面列出的systemctl
命令,启动 varnish 并将其设置为在系统启动时自动启动。
systemctl start varnish systemctl enable varnish

默认情况下,varnish 将使用端口 6082 进行管理 Web 界面,使用端口 6081 进行公共访问。 通过使用netstat
命令检查,确保列出了某些端口。
netstat -plntu

Varnish HTTP 加速器已安装
将 Varnish 配置为 Nginx 的反向代理
作为 Nginx Web 服务器的反向代理,将使用 Varnish。 Nginx Web 服务器将在 HTTP 端口 8080 上运行,而 Varnish 将在 HTTP 端口 80 上运行。
在这个阶段,我们将为 Nginx 设置 Varnish,识别后端服务器,并修改 Varnish,使其使用 HTTP 端口 80 作为其默认端口。
立即进入 varnish 配置目录编辑“default.vcl”文件。 并确保主机为 127.0.0.1,端口为 8080
nano /etc/varnish/default.vcl


后端的配置就完成了。
下一步是设置 Varnish 以使用 HTTP 端口 80。通过转到“/etc/default”目录中的“varnish”目录来编辑 varnish 配置文件。
nano /etc/default/varnish
确保您的默认端口是 6081,HTTP 端口是 80

现在应该编辑“/lib/systemd/system”目录中的清漆服务文件。 通过转到 systemd 系统目录来编辑 varnish.service 文件。
cd /lib/systemd/system nano varnish.service

将 HTTP 端口 80 替换为 'ExecStart' 行上的清漆端口 6081。

现在重新加载systemd
配置并重新启动 varnish
systemctl daemon-reload systemctl restart varnish

使用netstat
命令检查清漆
netstat -plntu

varnish 配置为 Nginx 的反向代理已完成
配置UFW防火墙
Ubuntu 操作系统上的默认人类可读防火墙称为“UFW”。 如果您还没有软件包,请使用下面显示的 apt 命令安装它们。
sudo apt install ufw

我们将打开防火墙并打开新的 SSH、HTTP 和 HTTPS 端口。
下面列出的 ufw 命令。
ufw allow ssh ufw allow http ufw allow https

现在打开防火墙并使其始终在启动时启动。
ufw enable

现在 UFW 防火墙处于活动状态,HTTP 和 HTTPS 端口都可以从外部网络访问。