萬(wàn)一你的網(wǎng)站被DDOS颶風(fēng)式攻擊,你會(huì)怎么辦?筆者以經(jīng)驗(yàn)告訴你,這里的每一層都起著保護(hù)網(wǎng)站的作用。如果您寧愿擁有如何在單臺(tái)服務(wù)器上維持大量流量的版本,則可以:
專用硬件服務(wù)器,無(wú)共享主機(jī)
千兆上行鏈路處理突發(fā)流量
用大量RAM清漆緩存
插件輕WordPress安裝
通過(guò)WordPress/Jetpack的離線統(tǒng)計(jì)
Cloudflare作為CDN
現(xiàn)在,讓我們來(lái)看看細(xì)節(jié)。
托管和軟件
從硬件開(kāi)始,WEB最好存在于專用物理服務(wù)器上,而不是虛擬專用服務(wù)器(VPS)。這不是共享主機(jī)設(shè)置,它不是基于云的。該服務(wù)器配備四核至強(qiáng)E3-1230CPU,16GB內(nèi)存和鏡像R1固態(tài)硬盤(pán)。它通常運(yùn)行在100Mbps的上行鏈路上,但是一旦風(fēng)暴流量可能發(fā)生變化,我們就會(huì)搶先將其升級(jí)到1Gbps上行鏈路。額外的容量對(duì)于處理Eric和他的工作人員的新帖子的巨大爆發(fā)量非常重要。
該機(jī)器運(yùn)行UbuntuServer16.04LTS,并且是“非托管”的,即沒(méi)有安裝cPanel或其他“簡(jiǎn)單模式”管理工具。這可以最大限度地減少服務(wù)器的攻擊面,并有助于節(jié)省資源。為了運(yùn)行我的托管站點(diǎn),已安裝的軟件保持在必要的最小應(yīng)用程序集內(nèi)。
服務(wù)器堆棧的兩大目標(biāo)是讓所有托管站點(diǎn)使用HTTPS,并讓所有托管站點(diǎn)利用緩存;這提出了一些雞與雞的問(wèn)題,因?yàn)榫彺婕用芰髁勘染彺嫖醇用芰髁繌?fù)雜得多。原因是加密的流量是完全被加密的。同一頁(yè)面的兩個(gè)加密副本看起來(lái)像不同的隨機(jī)噪聲塊。這對(duì)高速緩存提出了挑戰(zhàn),它依賴于存儲(chǔ)一個(gè)副本并反復(fù)提供。
對(duì)付它的辦法是做加密以上的高速緩存層。這樣,Web服務(wù)器仍然可以緩存內(nèi)容并通過(guò)HTTPS加密。就緩存而言,該網(wǎng)站只是運(yùn)行普通的HTTP。
實(shí)際上,我通過(guò)使用HAProxy終止所有站點(diǎn)的SSL/TLS連接來(lái)實(shí)現(xiàn)此目的,這是一個(gè)七層感知負(fù)載平衡器應(yīng)用程序。HAProxy監(jiān)視TCP端口443上的傳入HTTPS連接,讀取SNI信息,為請(qǐng)求的站點(diǎn)提供適當(dāng)?shù)腟SL/TLS證書(shū),并執(zhí)行SSL/TLS握手,然后將連接沿著堆棧傳遞給Varnish,緩存應(yīng)用程序。另外,HAProxy還會(huì)偵聽(tīng)TCP端口80上的傳入HTTP連接,并將其重定向到端口443,從而將所有流量強(qiáng)制轉(zhuǎn)換為HTTPS。
HAProxy下面是秘密武器:清漆。Varnish是一種反向代理和緩存應(yīng)用程序,旨在直接從RAM中提供靜態(tài)資產(chǎn),這比直接向文件系統(tǒng)層提供服務(wù)要快得多(盡管這里有一個(gè)全面的討論兔子洞,當(dāng)你在Linux的頁(yè)面緩存機(jī)制中混合使用時(shí),文件真的存在)。以下是緩存如何工作的簡(jiǎn)短版本,以及它為什么幫助SpaceCityWeather。當(dāng)WordPress提供頁(yè)面時(shí),通常該頁(yè)面是由WordPress應(yīng)用程序動(dòng)態(tài)生成的。通常,每次從WordPress請(qǐng)求頁(yè)面時(shí)(無(wú)論是博客的首頁(yè)還是帖子的頁(yè)面或類別頁(yè)面或任何其他頁(yè)面),該頁(yè)面將從各種元素中以編程方式從頭開(kāi)始組裝,并且為每位訪客提供熱和新鮮的服務(wù)。想想WordPress就像一個(gè)面包師,忙著在廚房做牛角面包。每一位參觀者都會(huì)得到自己特別為他們制作的溫暖,酥脆的羊角面包。
這意味著當(dāng)你的WordPress網(wǎng)站有很多流量時(shí),面包師會(huì)變得非常忙碌。一條線形成。人們不得不等待他們的羊角面包。誰(shuí)喜歡等羊角面包?有時(shí)你現(xiàn)在需要一個(gè)牛角面包。添加像Varnish這樣的緩存應(yīng)用程序意味著面包師只需制作一個(gè)牛角面包。那個(gè)牛角面包還需要一些時(shí)間才能制作,但一旦制成,面包師就可以將它放入一個(gè)神奇的羊角面包復(fù)制盒。按下按鈕后,盒子立即(并非瞬間,但非常,非常快)彈出一個(gè)新月形面包的副本。只要人們只需要那種牛角面包,面包師就可以按下按鈕,遞出牛角面包,然后繼續(xù)幫助下一位顧客。
當(dāng)然,魔術(shù)盒不能制作不同的羊角面包。面包師仍然必須這樣做。但貝克只需要花費(fèi)的時(shí)間,使一個(gè)東西,然后魔術(shù)盒(幾乎)可以立即發(fā)送給任何人誰(shuí)想要它的那個(gè)副本,讓自由地做其他的東西面包師。對(duì)于太空城天氣,Varnish處理了絕大多數(shù)流向服務(wù)器的流量,因?yàn)榇蠖鄶?shù)人想要查看網(wǎng)站的首頁(yè)或最新的更新帖子。因?yàn)閺木彺嬷刑峁┓?wù)的對(duì)象比從頭開(kāi)始服務(wù)要快得多(從服務(wù)器負(fù)載的角度來(lái)看,緩存中服務(wù)的內(nèi)容幾乎是“免費(fèi)的”),因此Varnish是允許SpaceCityWeather擴(kuò)展到多于一個(gè)的關(guān)鍵組件之一通常的日常負(fù)載的100倍,而不會(huì)被要求服務(wù)的請(qǐng)求數(shù)量所淹沒(méi)。