万一你的网站被DDOS飓风式攻击,你会怎么办?笔者以经验告诉你,这里的每一层都起着保护网站的做用。若是您宁愿拥有如何在单台服务器上维持大量流量的版本,则能够:编程
专用硬件服务器,无共享主机缓存
千兆上行链路处理突发流量服务器
用大量RAM清漆缓存memcached
插件轻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和其余缓存应用程序很好地协做),而且使用它们是一种选择;不过,我选择避开它们的使用,而是将清漆缓存做为我单一的主要缓存解决方案。再一次,这是由于我更喜欢把个人堆栈中的图层分开清晰-每一个地方都有一个地方,一切都在它的位置。(来源:黑客周刊,欢迎分享)