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