如何對Web服務器進行颶風級防護

  萬一你的網站被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和其餘緩存應用程序很好地協做),而且使用它們是一種選擇;不過,我選擇避開它們的使用,而是將清漆緩存做爲我單一的主要緩存解決方案。再一次,這是由於我更喜歡把個人堆棧中的圖層分開清晰-每一個地方都有一個地方,一切都在它的位置。(來源:黑客週刊,歡迎分享)​

相關文章
相關標籤/搜索