万一你的网站被 DDOS 飓风式攻击, 你会怎么办? 笔者以经验告诉你, 这里的每一层都起着保护网站的作用. 如果您宁愿拥有如何在单台服务器上维持大量流量的版本, 则可以:
专用硬件服务器, 无共享主机
千兆上行链路处理突发流量
用大量 RAM 清漆缓存
插件轻 WordPress 安装
通过 WordPress/Jetpack 的离线统计
Cloudflare 作为 CDN
现在, 让我们来看看细节.
托管和软件
从硬件开始, web 最好存在于专用物理服务器上, 而不是虚拟专用服务器(VPS). 这不是共享主机设置, 它不是基于云的. 该服务器配备四核至强 E3-1230CPU,16GB 内存和镜像 R1 固态硬盘. 它通常运行在 100Mbps 的上行链路上, 但是一旦风暴流量可能发生变化, 我们就会抢先将其升级到 1Gbps 上行链路. 额外的容量对于处理 Eric 和他的工作人员的新帖子的巨大爆发量非常重要.
该机器运行 UbuntuServer16.04LTS, 并且是 "非托管" 的, 即没有安装 cPanel 或其他 "简单模式" 管理工具. 这可以最大限度地减少服务器的攻击面, 并有助于节省资源. 为了运行我的托管站点, 已安装的软件保持在必要的最小应用程序集内.
服务器堆栈的两大目标是让所有托管站点使用 HTTPS, 并让所有托管站点利用缓存; 这提出了一些鸡与鸡的问题, 因为缓存加密流量比缓存未加密流量复杂得多. 原因是加密的流量是完全被加密的. 同一页面的两个加密副本看起来像不同的随机噪声块. 这对高速缓存提出了挑战, 它依赖于存储一个副本并反复提供.
对付它的办法是做加密以上的高速缓存层. 这样, Web 服务器仍然可以缓存内容并通过 HTTPS 加密. 就缓存而言, 该网站只是运行普通的 HTTP.
实际上, 我通过使用 HAProxy 终止所有站点的 SSL/TLS 连接来实现此目的, 这是一个七层感知负载平衡器应用程序. HAProxy 监视 TCP 端口 443 上的传入 HTTPS 连接, 读取 SNI 信息, 为请求的站点提供适当的 SSL/TLS 证书, 并执行 SSL/TLS 握手, 然后将连接沿着堆栈传递给 Varnish, 缓存应用程序. 另外, HAProxy 还会侦听 TCP 端口 80 上的传入 HTTP 连接, 并将其重定向到端口 443, 从而将所有流量强制转换为 HTTPS.
HAProxy 下面是秘密武器: 清漆. Varnish 是一种反向代理和缓存应用程序, 旨在直接从 RAM 中提供静态资产, 这比直接向文件系统层提供服务要快得多(尽管这里有一个全面的讨论兔子洞, 当你在 Linux 的页面缓存机制中混合使用时, 文件真的存在). 以下是缓存如何工作的简短版本, 以及它为什么帮助 SpaceCityWeather. 当 WordPress 提供页面时, 通常该页面是由 WordPress 应用程序动态生成的. 通常, 每次从 WordPress 请求页面时(无论是博客的首页还是帖子的页面或类别页面或任何其他页面), 该页面将从各种元素中以编程方式从头开始组装, 并且为每位访客提供热和新鲜的服务. 想想 WordPress 就像一个面包师, 忙着在厨房做牛角面包. 每一位参观者都会得到自己特别为他们制作的温暖, 酥脆的羊角面包.
这意味着当你的 WordPress 网站有很多流量时, 面包师会变得非常忙碌. 一条线形成. 人们不得不等待他们的羊角面包. 谁喜欢等羊角面包? 有时你现在需要一个牛角面包. 添加像 Varnish 这样的缓存应用程序意味着面包师只需制作一个牛角面包. 那个牛角面包还需要一些时间才能制作, 但一旦制成, 面包师就可以将它放入一个神奇的羊角面包复制盒. 按下按钮后, 盒子立即 (并非瞬间, 但非常, 非常快) 弹出一个新月形面包的副本. 只要人们只需要那种牛角面包, 面包师就可以按下按钮, 递出牛角面包, 然后继续帮助下一位顾客.
当然, 魔术盒不能制作不同的羊角面包. 面包师仍然必须这样做. 但贝克只需要花费的时间, 使一个东西, 然后魔术盒 (几乎) 可以立即发送给任何人谁想要它的那个副本, 让自由地做其他的东西面包师. 对于太空城天气, Varnish 处理了绝大多数流向服务器的流量, 因为大多数人想要查看网站的首页或最新的更新帖子. 因为从缓存中提供服务的对象比从头开始服务要快得多(从服务器负载的角度来看, 缓存中服务的内容几乎是 "免费的"), 因此 Varnish 是允许 SpaceCityWeather 扩展到多于一个的关键组件之一通常的日常负载的 100 倍, 而不会被要求服务的请求数量所淹没.
当然, Varnish 并不是镇上唯一的缓存游戏, 甚至没有关闭. Nginx 本身有一个很好的缓存机制. 关于 Nginx 或 Varnish 是否是任何给定站点的更适合的缓存层, 都有一个单独的辩论 - 两者都是高性能的, 但是在功能和配置方面存在差异. 我更喜欢 (至少现在) 坚持使用光油, 以利用具有清晰定义的图层的堆栈, 这可以使故障排除问题更容易, 因为问题通常是分区的. 另外, 经过多年使用光油后, 我很合理地习惯了它的怪癖和古怪.
提示你的服务器
但是如果你没有任何东西需要服务, 世界上所有的缓存都无法帮到你, 所以一个强大的 Web 服务器应用程序是必需的. SpaceCityWeather 以及服务器上的所有其他站点都由 Nginx 提供支持, Nginx 是一款高性能, 事件驱动的 Web 服务器应用程序, 我已经为此编写了广泛的应用程序.
Nginx 是当前使用的三种最流行的 Web 服务器应用程序之一, 以及 Apache 和 Microsoft 的 IIS. 它快速而广泛的使用, 这意味着它适用于很多目的, 关于它配置的每个方面的 Nginx 专用教程都遍布在 Web 上. 作为实际的 "服务器" 应用程序, Nginx 提供了 WordPress 应用程序和其他堆栈之间的链接; 它还提供 WordPress 的 "静态资产"(像图像和其他文件不经常更改的东西), 而不必打扰 WordPress.
WordPress 是一个应用程序, 这意味着它必须在某些方面运行. 更准确地说, WordPress 的 PHP 文件需要运行在 Web 服务器上的 PHP 解释器或进程管理器来解析和执行它们包含的代码. 对于这项任务, 我们使用 PHP-FPM, 并进行了一些性能调整 (主要是 RAM 和工作人员数量) 以及 php7.PHP7 通常比仍然常见的 PHP5 快得多, 并且当您每秒提供几十或几百页时, 速度就很重要. 我对 PHP 做了一些调整, 尽管它对空间城市天气无关紧要 - 确保 PHP 会话存储在 memcached 而不是磁盘上. 在拥有大量登录用户的系统上, 这可以缓解一些 IO 瓶颈.
WordPress 本身
由于 WordPress 作为博客平台的普及程度非常高, 因此对于如何调整 WordPress 性能的建议无处不在. 如果您正在运行一个高度定制的 WordPress 网站, 您可能需要调整深度以适应杂草, 以确保其在负载下的高性能. 幸运的是, 除了应用主题外, Eric 并没有选择在 SpaceCityWeather 上做太多的定制. 这种配置选择使得调整起来相对简单.
如果您搜索 "WordPress 性能", 您可能会看到的第一件事是建议安装 WPSuperCache 或 W3TotalCache 等一些流行的 WordPress 插件之一. 这些插件确实有帮助(尤其是 W3TotalCache, 它与 Varnish 和其他缓存应用程序很好地协作), 并且使用它们是一种选择; 不过, 我选择避开它们的使用, 而是将清漆缓存作为我单一的主要缓存解决方案. 再一次, 这是因为我更喜欢把我的堆栈中的图层分开清晰 - 每个地方都有一个地方, 一切都在它的位置.
来源: http://server.51cto.com/sOS-570634.htm