使用 Cloudflare 让您的网站更快更安全
Cloudflare 是内容交付领域的行业领导者,减少了数百万网站的负载并加快了速度。
这个提供程序的特别之处在于它不是作为加速/性能工具开始的,而是从 Project Honeypot 中诞生的,它被认为是一种垃圾邮件和黑客保护服务。 时至今日,这是 Cloudflare 的主要卖点之一:DDoS 检测和保护。 他们的算法会记录访问者的 IP 地址、负载、请求的资源和请求频率,以检测恶意访问者。
由于它作为网站和所有传入流量之间的代理,Cloudflare 能够显着减轻服务器压力,以至于 DDoS 攻击甚至无法到达源网站,如本简介中所述。 Cloudflare 还提供了 Always Online 选项,它会缓存用户网站的一个版本,并在原始服务器中断的情况下提供其有限版本——当原始网站返回 5xx 或 4xx 错误时。 它还具有成熟的页面缓存。
这些功能可能是一个巨大的优势:它们可以在重负载下挽救陷入困境的 Web 服务器,并且在服务器出现错误的情况下,可以为开发人员提供一些喘息的空间来解决问题。
它也是免费提供的。 当然,有高级层,有些东西(如额外的页面规则)需要付费,但仅 Cloudflare 的免费层的范围就值得了解它的来龙去脉。
比较基准将 Cloudflare 在速度方面置于中间位置,但很难说它是市场上最具价值的 CDN。
设置 Cloudflare
使用 Cloudflare 设置站点非常简单。 在 (cloudflare.com) 注册后[http://www.cloudflare.com],我们可以添加一个新的网站。 当系统扫描给定域的 IP 和其他详细信息时,我们会收到一个介绍性视频。 完成后,我们将获得新的名称服务器以与我们的注册商一起设置。
我们需要向我们的注册商注册这些名称服务器,并等待更改在互联网上传播。 最多可能需要 24 小时。
此更改意味着将对我们域的所有控制权交给 Cloudflare。 这也意味着,如果我们在这个域上有电子邮件(MX 记录),我们需要将这些记录传输到 Cloudflare。 如果我们有任何子域,它们还需要在 Cloudflare 的仪表板中设置为相应的 A 记录。
通过我们的域注册商或托管服务提供商设置的所有现有域记录都需要移动/复制到 Cloudflare。
一些托管托管服务提供商可能会进一步简化/自动化此过渡过程。
对于我们的每个域记录,我们可以决定让所有流量直接通过我们的服务器——这意味着我们可以为某些子域设置例外——或者我们可以关闭所有 Cloudflare 功能——例如,当我们正在网站上的一些变化。
一旦我们设置了域,这基本上就是 Cloudflare 仪表板之外所需的所有工作。 在网站本身或原始服务器上没有什么可做的。 所有进一步的调整都在 Cloudflare 网站上完成。
设置加密
SSL 证书是 Cloudflare 上免费计划的一部分。 SSL 设置有四个选项,我们可以在仪表板的“加密”选项卡下找到它们。
- OFF – 这是不言自明的。 所有流量都将重定向到不安全的协议 (http) 灵活 – 无论我们服务器的协议如何,也无论我们是否拥有现有的 SSL 证书,Cloudflare 都将通过 https 将我们所有的页面提供给最终访问者。 从 Cloudflare 到源服务器的连接将通过不安全的连接。 FULL – Cloudflare 将通过 https 与您的服务器通信,但不会在源上验证证书。 从 Cloudflare 到访问者的流量通过 https 提供。 FULL STRICT – Cloudflare 将需要源服务器上的有效(非自签名)SSL 证书。 从 Cloudflare 到访问者的流量通过 https 提供。
使用这些设置,我们需要确保设置是合理的,因为我们在最终用户和服务器内容之间有两层,所以这里的遗漏可能会导致重定向循环,或者太多的重定向最终会减慢网站速度。
Cloudflare 还提供购买自定义证书的选项,对于需要额外安全或关心其市场形象的高级用户,它提供了上传自定义/高级证书的选项。 这是保费计划的一部分。
保护网站
这是 Cloudflare 大放异彩的一个领域:它免费提供前所未有的价值。 在整个托管领域,DDoS 保护是一项优质服务,并不总是提供,即使对于付费客户也是如此。
Cloudflare 在免费层提供不限流量的 DDoS 保护,以及其他一些相当复杂的工具,可以在恶意流量到达网站之前在基础设施级别保护网站。 它提供速率限制——根据用户定义的、可定制的规则来限制访问。 它提供智能防火墙规则、国家块、浏览器完整性检查、验证码保护等。
如今,当僵尸网络统治互联网,新安装的网站或服务器有时会在上线后几分钟内被暴力闯入尝试淹没,当垃圾邮件发送者自动化网络评论时,即使没有任何闯入,引荐来源垃圾邮件也很猖獗,POST 攻击使用非常规手段进行缓慢攻击的情况并不少见。 这种保护可以成就或破坏中小型网站。
还有抓取保护、拒绝某些访问者资料的某些资源或混淆电子邮件。
高级层提供更多选项。
速度和性能
默认情况下,使用 Cloudflare,我们可以缓存静态内容——JavaScript、字体、样式表,甚至图像。 我们可以设置缓存过期规则。 对于各种 CMS 系统,有一些插件可以连接到 Cloudflare,这样我们就可以从我们的网站中清除缓存。
Cloudflare 的基础设施在 DNS 设置时“接管”这些静态资源,然后根据访问者的位置从其遍布全球的数据中心网络提供服务。
可以根据查询字符串或我们的源服务器设置的缓存标头来缓存(或从源获取)资源。 例如,在 PHP 中我们可以这样设置缓存过期时间:
header('Cache-Control: max-age=3600');
如果这还不够,我们可能需要删除 Pragma、Expires 和 Cache Control 标头:
header_remove('Pragma');
header_remove('Expires');
header_remove('Cache-Control');
我们也可以在服务器级别执行此操作。 在 nginx 中,我们会在虚拟主机块/文件中设置这些规则:
if ($http_cookie ~* "some-cookie") {
#removing headers that stop Cloudflare cloudflare from caching
more_clear_headers 'Pragma';
more_clear_headers 'Expires';
more_clear_headers 'Cache-Control';
add_header Cache-Control "no-cache, no-store, max-age=0";
}
location ~* "(!?.*some-url-path.*)" {
#removing headers that stop Cloudflare cloudflare from caching
more_clear_headers 'Pragma';
more_clear_headers 'Expires';
more_clear_headers 'Cache-Control';
add_header Cache-Control "max-age=3600";
}
Apache 用户会在他们的 .htaccess
文件:
<IfModule mod_headers.c>
Header unset Pragma env=LONGCACHE
Header unset Expires env=LONGCACHE
Header set Cache-Control "max-age=3600" env=LONGCACHE
</IfModule>
显然,上面的 some-cookie 和 some-url-path 需要替换为合适的值。 页面缓存也需要这些规则,如下所述。
我们可以选择缩小我们的 CSS、JS 和 HTML。 可以选择将 AMP 用于传出 AMP 链接。 还有一个测试版功能 Rocket Loader,它可以异步捆绑和提供 JS,使用浏览器的本地存储来缓存它。 但是要小心,因为资源加载顺序的小错误可能会破坏您的网站。
付费客户可以使用 Railgun 功能,它解决了缓存系统的主要痛点——动态内容。 它试图加快来自源服务器的动态内容交付。 它需要在原始服务器上安装软件,并通过压缩交付的内容和“为多个同时请求保持单个持久连接,消除网络连接延迟”来工作。 这让人想起 HTTP/2 协议的多路复用功能——仅在此处,在源服务器和 Cloudflare 之间。
在 Polish 和 Mirage 机制中,还有针对 Pro 计划的图像压缩/优化。 在 Traffic 选项卡下,有跨 Cloudflare 全球数据中心的 Argo 路由优化,以及负载均衡选项。
全页 HTML 缓存
全页缓存意味着缓存我们系统的整个输出——CMS、应用程序、博客系统或其他任何东西。
在 Page Rules 下,有一个隐藏的宝石可以将您的 Cloudflare 帐户转变为一个成熟的缓存系统,可以与 Varnish 等专业解决方案竞争,并且——由于全球数据中心——可能胜过它。
缓存级别规则设置为缓存所有内容将缓存网站的整个 HTML 内容以及所有其他资源。
通过对这些规则进行排序,我们可以实现复杂的缓存/排除解决方案,甚至可以以最小的延迟交付动态生成的内容。 首字节时间 (TTFB) 提高 15 倍并非闻所未闻。
这些规则支持通配符,需要按优先级排序:
*some-website.com/static/*
[/static/ subdirectory for static HTML pages]
*some-website.com/*.shtml
[.shtml file extension to signify HTML that is static]
*some-website.com/*?*static=true*
[adding static=true query parameter]
如果我们将此规则与下图中的绕过设置结合使用,我们可以在不同条件下将需要缓存/从缓存中忽略的网站部分分开设置——例如管理部分等。
如果页面缓存正常工作,我们应该在浏览器检查器的响应标头中看到 CF-Cache-Status: HIT。
付费客户有额外的缓存选项,或者根据 cookie 绕过缓存。 在这里,cookie 名称可以设置通配符,内容也可以根据设备类型进行缓存。
这些规则更为复杂,并非每种类型的网站都需要。 免费客户可以使用三个页面规则,但可以购买额外的页面规则。
HTTP/2 和服务器推送
浏览器检查器显示 HTTP/2 协议上资源的并行、异步加载
默认情况下,免费和企业客户会启用 HTTP/2——这是对 HTTP/1.1 协议的重大改进——其中包括:
- 多路复用——可以在单个连接中以异步方式发送多个资源,标头压缩服务器推送——服务器预测资源请求,并在浏览器请求它们之前发送它们。
虽然认识到需要根据每个案例来判断 Cloudflare 的改进和价值,但可以公平地说,总体而言,Cloudflare 提供的价值(尤其是其免费套餐)稳固地高于平均水平。
结论
本文介绍了如何在网站上使用和配置 Cloudflare 以使其快速、可靠和 DDoS 防护。 这并不是说 CDNed 站点是坚不可摧的。 事实上,它带来了新的漏洞。
当人为错误导致 Cloudflare 服务在 2016 年瑞典 Telia 网络提供商的案例中受到影响时,这是欧洲互联网的一个主要问题。 据估计,全球排名前 100 万的网站中有 6.2% 使用 Cloudflare 服务。
来自 Cloudflare 的 Telia 中断事后分析报告的信息图,当时配置错误的路由器将欧洲网络的大部分流量重新路由到亚洲,导致数据包丢失。
无论如何,我们不应该因为此类事件而害怕 CDN。 它们为数不多且介于两者之间,最终有助于构建一个更加强大的网络。