如何在 Ubuntu 14.04 上使用 SSL 终止配置 Varnish 缓存 4.0

介绍

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

Varnish Cache是一种caching HTTP倒置代理,即HTTP加速器,它减少了向用户提供内容所需的时间. 它使用的主要技术是在内存中从一个网络或应用程序服务器中缓存响应,因此将来对相同内容的请求可以满足,而不必从网络服务器中取回. 在各种环境中,性能可以被大大地提高,当您有内容繁多的动态网络应用程序时,特别有用. Varnish的建造以缓存为主要特征,但也有其他用途,如逆向代理负载平衡.

在许多情况下,Varnish与其默认功能很好,但请记住,它必须调整以提高某些应用程序的性能,特别是那些使用cookie的应用程序。

前提条件

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

Existing Environment

您需要创建一个新的Ubuntu 14.04 VPS,它将用于您的Varnish安装。 通过完成 [Ubuntu 14.04初始服务器设置指南]中的步骤 1-4 来创建一个非 root 用户(https://www.digitalocean.com/community/articles/initial-server-setup-with-ubuntu-14-04). 我们将把这个服务器称为 Varnish_VPS

请记住,Varnish服务器将接收用户请求,并应适用于您预计接收的流量。

我们的目标

Our Goal

我们的目标是将Varnish缓存设置在我们的Web应用程序服务器前面,以便请求能够快速有效地进行处理。缓存设置后,我们将向您展示如何将HTTPS支持添加到Varnish,通过使用Nginx来处理接收的SSL请求。

现在你已经建立了前提条件,你知道你试图建立什么,让我们开始!

安装 Varnish

获取Varnish 4.0的最新版本的建议方法是通过官方存储库安装可启动的包。

Ubuntu 14.04 配有 apt-transport-https,但只需在 Varnish_VPS 上运行以下命令以确保:

1sudo apt-get install apt-transport-https

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

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

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

1sudo 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:

1sudo apt-get update
2sudo apt-get install varnish

默认情况下,Varnish 配置为在端口6081上聆听,并预期您的 Web 服务器在同一台服务器上聆听,并在端口8080上聆听。

1http://varnish_VPS_public_IP:6081

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

503 Error

这表明Varnish已安装并运行,但它无法找到它应该缓存的Web服务器。

配置 Varnish

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

Varnish 配置文件位于 /etc/varnish/default.vcl

1sudo vi /etc/varnish/default.vcl

找出以下几条线:

1backend default {
2    .host = "127.0.0.1";
3    .port = "8080";
4}

更改主机端口的值分别匹配您的 LAMP 服务器私有 IP 地址和收听端口。 请注意,我们假定您的 Web 应用程序正在收听其私有 IP 地址和端口 80。

1backend default {
2    .host = "LAMP_VPS_private_IP";
3    .port = "80";
4}

Varnish 有一个名为恩典模式的功能,一旦启用,它会指示Varnish在您的网页服务器后端出现故障时提供请求的页面的缓存副本。

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

这将缓存页面的宽限期设置为一个小时,这意味着如果Varnish无法到达您的Web服务器以寻找新副本,Varnish将继续服务缓存页面长达一个小时。

保存并退出Default.vcl文件。

我们将要将Varnish设置为听取默认的HTTP端口(80),因此您的用户将能够访问您的网站而不添加一个不寻常的端口号码到您的URL。

1sudo vi /etc/default/varnish

你会看到很多行,但他们中的大多数都是评论出来的。找到以下的):

1DAEMON_OPTS="-a :6081 \

使用a选项来分配Varnish会听取请求的地址和端口. 让我们将其更改为听取默认的HTTP端口,端口80。

1DAEMON_OPTS="-a :80 \

保存和退出。

现在重新启动 Varnish 以执行这些更改:

1sudo service varnish restart

现在用网页浏览器测试它,通过访问您的Varnish服务器以其公共IP地址,在端口80(HTTP)这一次:

1http://varnish_VPS_public_IP

你应该看到从你的LAMP_VPS中提供的相同的东西,在我们的情况下,这只是一个简单的Apache2 Ubuntu页面:

Apache2 Ubuntu Default Page

在此时,Varnish正在缓存我们的应用程序服务器 - 希望您能在减少响应时间时看到性能效益. 如果您有一个域名指向您的现有应用程序服务器,您可以更改其DNS输入以指向您的 Varnish_VPS_public_IP

现在我们已经建立了基本的缓存设置,让我们与 Nginx 添加 SSL 支持!

支持 Nginx 的 SSL (可选)

Varnish 不支持 SSL 终止,所以我们将为处理 HTTPS 流量的唯一目的安装 Nginx. 我们将涵盖使用自签名的 SSL 证书安装和配置 Nginx 的步骤,并从 HTTPS 连接转向 Varnish 通过 HTTP 的代理流量。

如果您想更详细的解释如何设置一个自签名的SSL证书与Nginx,请参阅此链接: SSL with Nginx for Ubuntu. 如果您想尝试从StartSSL的证书, 这里有一个教程,涵盖这一点

让我们安装 Nginx。

安装 Nginx

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

1sudo apt-get install nginx

安装完毕后,你会注意到 Nginx 没有运行,这是因为它默认配置为倾听端口 80,但Varnish 已经使用该端口,这很好,因为我们想要倾听默认 HTTPS 端口,端口 443。

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

生成自签名的 SSL 证书

Varnish_VPS 上,创建一个可以放置 SSL 证书的目录:

1sudo mkdir /etc/nginx/ssl

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

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

请确保您将共同名称设置为匹配您的域名,此特定证书将在一年内到期。

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

配置 Nginx

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

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

删除文件中的所有内容,并用以下内容替换(并更改):

 1server {
 2        listen 443 ssl;
 3
 4        server_name example.com;
 5        ssl_certificate /etc/nginx/ssl/nginx.crt;
 6        ssl_certificate_key /etc/nginx/ssl/nginx.key;
 7
 8        location / {
 9            proxy_pass http://127.0.0.1:80;
10            proxy_set_header X-Real-IP  $remote_addr;
11            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
12            proxy_set_header X-Forwarded-Proto https;
13            proxy_set_header X-Forwarded-Port 443;
14            proxy_set_header Host $host;
15        }
16}

上面的配置有几个重要行,我们将更详细地解释:

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

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

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

1sudo service nginx start

现在用网页浏览器测试它,通过访问您的Varnish服务器以其公共IP地址,在端口443(HTTPS)这一次:

1https://varnish_VPS_public_IP

注意: 如果您使用了自签证书,则会看到一个警告,如网站的安全证书不受信任

不同之处在于您实际上正在访问 Nginx 服务器,该服务器处理 SSL 加密并将未加密的请求转发到 Varnish,该服务器像通常一样处理请求。

配置后端 Web 服务器

如果您的后端 Web 服务器对其所有网络接口(即公共和私人网络接口)有约束力,则您将想要修改您的 Web 服务器配置,以便它只在其私人接口上收听。

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

解决问题 Varnish

如果您有问题让Varnish正确服务您的页面,这里有几个命令,可以帮助您看到Varnish在幕后做什么。

◎ 国家

如果你想知道你的缓存性能有多好,你会想看看varnishstat命令。

1varnishstat

你会看到一个屏幕,看起来如下:

Varnish Stats

有大量的统计数据出现,使用向上/向下箭头滚动将向您展示每个项目的简短描述。 cache_hit stat 向您显示有多少请求被提供缓存结果 - 您希望这个数字尽可能接近客户端请求的总数(client_req)。

q来停止。

日志

如果您想获得Varnish如何处理每个单独请求的详细视图,以流媒体日志的形式,您将想要使用varnishlog命令。

1varnishlog

一旦运行,请尝试通过 Web 浏览器访问 Varnish 服务器. 对于您发送给 Varnish 的每个请求,您将看到一个详细的输出,可用于帮助解决问题并调整 Varnish 配置。

CTRL + C停止。

结论

现在你的网页服务器有一个Varnish缓存服务器在它的前面,你会看到改善的性能在大多数情况下. 记住,Varnish是非常强大和可调节,它可能需要额外的调整,以充分利用它。

Published At
Categories with 技术
comments powered by Disqus