如何在 Ubuntu 14.04 上配置 Varnish Cache 4.0 实现 SSL 终止

本文涉及的产品
.cn 域名,1个 12个月
简介: 如何在 Ubuntu 14.04 上配置 Varnish Cache 4.0 实现 SSL 终止

本文指导如何使用Varnish4.0提升Web服务器性能,包括配置Varnish为LAMP服务器提供缓存,以及通过Nginx实现SSL终止并添加HTTPS支持。还介绍了Varnish的配置和故障排查方法。

简介

在本教程中,我们将介绍如何使用 Varnish Cache 4.0 来提高现有 Web 服务器的性能。我们还将向您展示如何通过使用 Nginx 执行 SSL 终止来为 Varnish 添加 HTTPS 支持。我们假设您已经设置了一个 Web 应用服务器,并且我们将使用一个通用的 LAMP(Linux、Apache、MySQL、PHP)服务器作为起点。

Varnish Cache 是一个缓存 HTTP 反向代理,或者说是 HTTP 加速器,它可以减少向用户提供内容所需的时间。它主要使用的技术是将来自 Web 或应用服务器的响应缓存在内存中,因此将来对相同内容的请求可以在无需从 Web 服务器检索的情况下提供服务。在各种环境中都可以大大提高性能,特别是在内容丰富的动态 Web 应用程序中特别有用。Varnish 的主要特点是缓存,但它还有其他用途,比如反向代理负载均衡。

在许多情况下,Varnish 默认情况下工作良好,但请记住,它必须进行调整以提高对某些应用程序的性能,特别是那些使用 cookie 的应用程序。本教程不涉及 Varnish 的深度调整。

先决条件

在本教程中,我们假设您已经有一个 Web 应用程序服务器,它正在其私有 IP 地址上监听 HTTP(端口 80)。如果您还没有设置 Web 服务器,请使用以下链接在 Ubuntu 14.04 上设置自己的 LAMP 堆栈:如何在 Ubuntu 14.04 上安装 Linux、Apache、MySQL、PHP(LAMP)堆栈。我们将把这台服务器称为 LAMP_VPS

!现有环境

您需要创建一个新的 Ubuntu 14.04 VPS,用于安装 Varnish。通过完成 Ubuntu 14.04 服务器初始设置指南中的步骤 1-4,创建一个具有 sudo 权限的非根用户。我们将把这台服务器称为 Varnish_VPS

请记住,Varnish 服务器将接收用户请求,并且应该根据您预期接收的流量进行充分大小的设置。

我们的目标

!我们的目标

我们的目标是在我们的 Web 应用程序服务器前设置 Varnish Cache,以便可以快速高效地提供请求。在设置缓存之后,我们将向您展示如何通过利用 Nginx 处理传入的 SSL 请求,为 Varnish 添加 HTTPS 支持。设置完成后,您的 HTTP 和 HTTPS 流量都将看到缓存的性能优势。

现在您已经设置了先决条件,并且知道您要构建什么,让我们开始吧!

安装 Varnish

获取 Varnish 4.0 的最新版本的推荐方法是通过安装官方存储库中提供的软件包。

Ubuntu 14.04 自带 apt-transport-https,但是在 Varnish_VPS 上运行以下命令以确保:

sudo apt-get install apt-transport-https

现在将 Varnish 的 GPG 密钥添加到 apt:

curl https://repo.varnish-cache.org/ubuntu/GPG-key.txt | sudo apt-key add -

然后将 Varnish 4.0 存储库添加到您的 apt 源列表中:

sudo sh -c 'echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list'

最后,使用以下命令更新 apt-get 并安装 Varnish:

sudo apt-get update
sudo apt-get install varnish

默认情况下,Varnish 配置为监听端口 6081,并期望您的 Web 服务器在同一台服务器上并监听端口 8080。打开浏览器,访问您服务器的端口 6081(用您的公共 IP 地址或域名替换下面的突出显示部分):

http://varnish_VPS_public_IP:6081

因为我们在新的 VPS 上安装了 Varnish,访问您服务器的公共 IP 地址或域名的端口 6081 将返回以下错误页面:

!503 错误

这表示 Varnish 已安装并正在运行,但找不到它应该缓存的 Web 服务器。现在让我们配置它以使用我们的 Web 服务器作为后端。

配置 Varnish

首先,我们将配置 Varnish 使用我们的 LAMP_VPS 作为后端。

Varnish 配置文件位于 /etc/varnish/default.vcl。现在让我们编辑它:

sudo vi /etc/varnish/default.vcl

找到以下行:

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

并更改 hostport 的值以匹配您的 LAMP 服务器私有 IP 地址和监听端口。请注意,我们假设您的 Web 应用程序正在其私有 IP 地址和端口 80 上监听。如果不是这种情况,请修改配置以满足您的需求:

backend default {
    .host = "LAMP_VPS_private_IP";
    .port = "80";
}

Varnish 有一个名为 “grace mode” 的功能,当启用时,它指示 Varnish 在您的 Web 服务器后端关闭并不可用时提供请求页面的缓存副本。现在让我们启用它。找到以下 sub vcl_backend_response 块,并添加以下突出显示的行:

sub vcl_backend_response {
    set beresp.ttl = 10s;
    set beresp.grace = 1h;
}

这将将缓存页面的宽限期设置为一小时,这意味着如果 Varnish 无法访问您的 Web 服务器以获取新的副本,它将继续提供缓存的页面长达一小时。如果您的应用服务器关闭,并且您希望向用户提供陈旧的内容而不是错误页面(比如我们之前看到的 503 错误),这可能会很方便。

保存并退出 default.vcl 文件。

我们将希望设置 Varnish 监听默认的 HTTP 端口(80),这样您的用户将能够在 URL 中不添加不寻常的端口号的情况下访问您的站点。这可以在 /etc/default/varnish 文件中设置。现在让我们编辑它:

sudo vi /etc/default/varnish

您会看到很多行,但大多数都是被注释掉的。找到以下 DAEMON_OPTS 行(它应该已经被取消注释):

DAEMON_OPTS="-a :6081 \

-a 选项用于分配 Varnish 将监听请求的地址和端口。让我们将其更改为监听默认的 HTTP 端口,即端口 80。修改后,它应该如下所示:

DAEMON_OPTS="-a :80 \

保存并退出。

现在重新启动 Varnish 以使更改生效:

sudo service varnish restart

现在使用 Web 浏览器进行测试,通过这次在端口 80(HTTP)上访问您的 Varnish 服务器的公共 IP 地址:

http://varnish_VPS_public_IP

您应该看到与从您的 LAMP_VPS 服务的相同内容。在我们的情况下,它只是一个普通的 Apache2 Ubuntu 页面:

!Apache2 Ubuntu 默认页面

此时,Varnish 正在缓存我们的应用服务器 - 希望您会看到响应时间减少的性能优势。如果您的域名指向您现有的应用服务器,您可以将其 DNS 条目更改为指向您的 Varnish_VPS_public_IP

现在我们已经设置了基本的缓存,让我们使用 Nginx 添加 SSL 支持吧!

Nginx 的 SSL 支持(可选)

Varnish 不原生支持 SSL 终止,因此我们将安装 Nginx,其唯一目的是处理 HTTPS 流量。我们将介绍安装和配置 Nginx 以使用自签名 SSL 证书,并将 HTTPS 连接的流量通过反向代理从 HTTPS 连接传输到 Varnish 上的 HTTP。

如果您想要更详细的关于在 Nginx 上设置自签名 SSL 证书的解释,请参考此链接:Ubuntu 上的 Nginx SSL。如果您想尝试使用 StartSSL 的证书,这里有一个涵盖该过程的教程。

让我们安装 Nginx。

安装 Nginx

Varnish_VPS 上,让我们使用以下 apt 命令安装 Nginx:

sudo apt-get install nginx

安装完成后,您会注意到 Nginx 没有在运行。这是因为它默认配置为监听端口 80,但 Varnish 已经在使用该端口。这没关系,因为我们希望监听默认的 HTTPS 端口,即端口 443。

让我们生成将要使用的 SSL 证书。

生成自签名 SSL 证书

Varnish_VPS 上,创建一个目录,用于放置 SSL 证书:

sudo mkdir /etc/nginx/ssl

生成一个自签名的、2048 位的 SSL 密钥和证书对:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

确保您设置 common name 与您的域名匹配。这个特定的证书将在一年后过期。

现在我们已经放置了证书,让我们配置 Nginx 来使用它。

配置 Nginx

打开默认的 Nginx 服务器块配置进行编辑:

sudo vi /etc/nginx/sites-enabled/default

删除文件中的所有内容,并用以下内容替换(并将 server_name 更改为匹配您的域名):

server {
        listen 443 ssl;
        server_name example.com;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;
        location / {
            proxy_pass http://127.0.0.1:80;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Port 443;
            proxy_set_header Host $host;
        }
}

保存并退出。上述配置有一些重要的行,我们将更详细地解释:

  • ssl_certificate:指定 SSL 证书位置
  • ssl_certificate_key:指定 SSL 密钥位置
  • listen 443 ssl:配置 Nginx 监听端口 443
  • server_name:指定您的服务器名称,并应与 SSL 证书的 common name 匹配
  • proxy_pass http://127.0.0.1:80;:重定向流量到 Varnish(它在 127.0.0.1(即 localhost)的端口 80 上运行)

其他的 proxy_set_header 行告诉 Nginx 转发信息,例如原始用户的 IP 地址,以及任何用户请求。

现在让我们启动 Nginx,以便我们的服务器可以处理 HTTPS 请求。

sudo service nginx start

现在使用 Web 浏览器进行测试,通过访问您的 Varnish 服务器的公共 IP 地址,这次是在端口 443(HTTPS):

https://varnish_VPS_public_IP

注意: 如果您使用了自签名证书,您将会看到一个警告,类似于“该站点的安全证书不受信任”。由于您知道刚刚创建了证书,因此可以安全地继续。

同样,您应该看到与之前相同的应用程序页面。不同之处在于您实际上正在访问处理 SSL 加密并将未加密请求转发到 Varnish 的 Nginx 服务器。

配置后端 Web 服务器

如果您的后端 Web 服务器正在绑定到其所有网络接口(即公共和私有网络接口),您将希望修改您的 Web 服务器配置,以便它只监听其私有接口。这是为了防止用户通过其公共 IP 地址直接访问您的后端 Web 服务器,从而绕过您的 Varnish 缓存。

在 Apache 或 Nginx 中,这将涉及将 listen 指令的值分配给绑定到后端服务器的私有 IP 地址。

Varnish 故障排除

如果您在使 Varnish 正常提供页面方面遇到问题,以下是一些命令,可以帮助您查看 Varnish 在幕后的操作。

统计信息

如果你想了解缓存的性能如何,你可以使用 varnishstat 命令来查看。像这样运行它:

varnishstat

你会看到如下所示的屏幕:

!Varnish Stats

有各种各样的统计信息显示出来,使用上/下箭头滚动将显示每个项目的简短描述。cache_hit 统计信息显示了有多少请求是使用缓存结果返回的–你希望这个数字尽可能接近客户端请求的总数 (client_req)。

q 键退出。

日志

如果你想详细查看 Varnish 如何处理每个单独的请求,以流式日志的形式,你可以使用 varnishlog 命令。像这样运行它:

varnishlog

一旦它开始运行,尝试通过 web 浏览器访问你的 Varnish 服务器。对于你发送到 Varnish 的每个请求,你将看到一个详细的输出,可以用来帮助排除故障并调整你的 Varnish 配置。

CTRL + C 键退出。

结论

现在你的 Web 服务器前面有一个 Varnish 缓存服务器,大多数情况下你会看到性能有所提升。请记住,Varnish 非常强大且可调整,可能需要额外的调整才能充分从中获益。


目录
相关文章
|
1月前
|
Ubuntu 网络安全 开发工具
Ubuntu19.04的安装过程详解以及操作系统初始化配置
本文详细介绍了Ubuntu 19.04操作系统的安装过程、初始化配置、网络设置、软件源配置、SSH远程登录以及终端显示设置。
61 1
Ubuntu19.04的安装过程详解以及操作系统初始化配置
|
18天前
|
存储 Prometheus 监控
在Ubuntu系统上安装与配置Prometheus的步骤
通过以上步骤,您应该已经成功在Ubuntu系统上安装并配置了Prometheus。您现在可以开始使用Prometheus收集和分析您的系统和应用程序的指标数据了。
36 1
|
1月前
|
Ubuntu Oracle 关系型数据库
Oracle VM VirtualBox之Ubuntu 22.04LTS双网卡网络模式配置
这篇文章是关于如何在Oracle VM VirtualBox中配置Ubuntu 22.04LTS虚拟机双网卡网络模式的详细指南,包括VirtualBox网络概述、双网卡网络模式的配置步骤以及Ubuntu系统网络配置。
50 3
|
1月前
|
Ubuntu 开发工具 虚拟化
MacOS系统基于VMware Fusion配置Ubuntu 22.04LTS环境
这篇文章介绍了如何在MacOS系统上使用VMware Fusion虚拟化软件配置Ubuntu 22.04 LTS环境,包括自定义VMware Fusion网段、Ubuntu系统安装、配置root用户登录、设置静态IP地址、修改默认网卡名称、配置PS1变量、设置登录界面为字符界面、修改软件源和进行vim基础优化等步骤。
107 2
|
1月前
|
Ubuntu
树莓派 —— ubuntu上通过netplan配置网络
树莓派 —— ubuntu上通过netplan配置网络
|
2月前
|
Ubuntu Linux 开发工具
【事件中心 Azure Event Hub】在Linux环境中(Ubuntu)安装Logstash的简易步骤及配置连接到Event Hub
【事件中心 Azure Event Hub】在Linux环境中(Ubuntu)安装Logstash的简易步骤及配置连接到Event Hub
|
1月前
|
存储 Ubuntu Linux
ubuntu上配置multipath
ubuntu上配置multipath
|
1月前
ubuntu20.04 下桥接模式配置
ubuntu20.04 下桥接模式配置
|
2月前
|
Linux 网络安全 开发工具
Ubuntu16装机配置
Ubuntu16装机配置
50 0
|
2月前
|
开发工具 git 计算机视觉
在Ubuntu16.04上配置CLion的OpenCV4.3.0开发环境
在Ubuntu16.04上配置CLion的OpenCV4.3.0开发环境
25 0
下一篇
无影云桌面