蘇翔宇,朱愛群
(深圳技師學院,深圳 518116)
隨著互聯網技術的迅猛發展,網絡安全的重要性不言而喻,對于互聯網上數以百萬計的Web服務器來說,提升訪問效率的同時兼顧安全更是必不可少的。但近年來,針對Internet上的Web服務器的網絡攻擊屢見不鮮,攻擊手段也是層出不窮,如此嚴峻的網絡環境,對企業的網絡安全工程師提出了更高的要求。通常情況下,企業是通過購買價格昂貴的硬件安全設備和負載均衡器來應對此類挑戰的,但對于預算有限的中小企業往往顯得力不從心,其實用戶也可以使用基于開源軟件的方案實現,可定制的開源CentOS7 Linux操作系統再加上開源Nginx服務器就是最佳組合,既穩定又高效,且具有良好的可擴展性。
反向代理服務器通常架設于企業網絡的邊界,不但可以通過訪問安全控制來阻斷外網對內網服務器直接的惡性攻擊,還可以利用緩存后方服務器的靜態數據來減輕訪問壓力。其主要的工作模式就是將外網客戶端的訪問請求轉發給內網的Web服務器,并且將Web服務器經過處理得到的結果頁面返回給發送請求的外網客戶端,這時的反向代理服務器和后端的Web服務器在外網看來就是一個整合在一起的單一服務器。一旦遭到外網攻擊,首當其沖的就是反向代理服務器,而其后端存儲網站數據的Web服務器就得到了有效的保護。
負載均衡,顧名思義就是使得多臺服務器不要出現有些負載過重而有些又負載過輕的問題,盡量達到所謂的“均衡”。對于Web服務器來說,實現負載均衡的前提是有多臺內容和應用相同的物理服務器來共同承擔外部的訪問流量,負載均衡器通過適合的調度算法來決定由哪臺服務器來接收客戶端的請求。當系統的整體負載趨向飽和時,可以通過線性增加物理服務器的數量和擴充網絡帶寬來解決,只要是所有的物理服務器處于同個負載均衡器的管控之下,指定的調度算法就會使得擴展之后的服務器資源實現新的均衡。
在Web服務器架設中引入負載均衡技術,既可以通過多服務器的負載均衡有效的分散單一服務器的訪問壓力,而且還可以避免“單點故障”,當一臺Web服務器發生故障或遭到攻擊無法對外提供服務以后,負載均衡技術會自動地將發生故障服務器的訪問流量轉移給其他的服務器,當故障解決之后再把流量恢復過來,這樣對整個Web服務器的安全性能都會有很大的提升。
如圖1所示,在Nginx實現反向代理和負載均衡的案例中,安裝Nginx的CentOS7 Linux服務器上有內外兩塊網卡,外網網卡/dev/ens37,在防火墻firewalld的public區域中,公網地址為202.96.133.100,內網網卡/dev/eno16777736,在防火墻firewalld的work區域中,內網地址為10.1.50.100。外網客戶端訪問公網地址202.96.133.100的80端口提交Web訪問請求,Nginx接收到請求后,通過反向代理機制將請求按照Nginx負載均衡器中分配的權值轉發給3臺不同的內網Web服務器。這3臺Web服務器中運行的服務,網站應用以及數據庫都是相同的,外網客戶端并不知道具體訪問的是哪一臺,Nginx的反向代理有效地保護了最終提供服務的Web服務器。這樣通過Nginx的反向代理和負載均衡機制,多臺Web服務器有效的分擔了外網客戶端的訪問請求,而且當某臺服務器故障時,還可以自動轉移請求到別的服務器上,保障服務不中斷。

圖1 Nginx實現反向代理和負載均衡
在如圖1所示的網絡模型中,Nginx通過反向代理和負載均衡機制成功的把外網客戶端的Web訪問請求按照如表1所示的Web服務器的地址、服務端口和weight值進行轉發,然后再把Web服務器的結果返回給Internet上的客戶端。為了實現上述功能,需要在CentOS7上Nginx服務器的配置文件/etc/nginx.conf的http塊中添加下列腳本。


表1 Nginx負載均衡器包含的內網Web服務器調度信息
在以上腳本中,首先使用Nginx的HTTP Upstream模塊新建了一個名為Webservers的負載均衡器,包含了內網3臺Web服務器的調度算法,接著使用proxy_pass參數反向代理到負載均衡器Webservers,最后使用proxy_next_upstream參數定義了故障轉移策略,當外網客戶端訪問后端的1臺Web服務器出現故障,返回404或者出現執行超時等錯誤時,Nginx會自動將請求轉發到負載均衡器Webservers中的另一臺Web服務器,實現故障轉移,有效地避免了“單點故障”。
防火墻Firewalld是CentOS7較之前版本的Redhat Linux操作系統相比最明顯的變化之一。Firewalld較以前Redhat Linux系統默認安裝的防火墻Iptales/Netfilter,增加了“區域”、“IP偽裝”等很多實用的功能,操作也簡化了許多。為了實現上述方案的功能,防火墻Firewalld要添加以下配置策略。
(1)為防火墻的public區域和work區域同時開啟IP偽裝。
firewall-cmd--zone=public--add-masquerade--permanent
firewall-cmd--zone=work--add-masquerade--permanent
(2)為防火墻的public區域添加外網訪問網卡/dev/ens37的80端口的允許策略。
firewall-cmd--zone=public--add-port=80/tcp--permanent
(3)打開內核IP數據包轉發功能。
echo"1">/proc/sys/net/ipv4/ip_forward
在上述實施方案中,負載均衡器采用指定輪詢權值的訪問方法分配資源,這種方法適用于Nginx的后端有多臺配置有明顯差異的Web服務器環境,性能高的服務器配以較高的weight值,相應承擔的訪問流量也越大,反之亦然。但用戶的實施環境多種多樣,需求也不盡相同,為了滿足更多實際的需求,就需要采用不同的負載均衡調度算法,具體如下:
(1)ip_hash算法,能夠將某個客戶端IP的請求通過哈希算法定位到同一臺后端服務器上,例如:當來自某個IP的外網用戶在后端一臺Web服務器上登錄后,再訪問該服務器的其他頁面,該算法能夠保證其訪問的后端服務器不變化。這種調度算法主要適用于session數據廣泛使用的場景。
(2)fair算法,被稱為新一代的更為智能的負載均衡算法,其工作原理是后端Web服務器的資源分配是根據各自響應客戶端訪問請求的時間長短來實現的,哪個響應快就優先分配,這種算法主要適用于對訪問性能有較高需求的業務應用。
高效穩定的CentOS7 Linux服務器系統搭配Nginx強大的反向代理和負載均衡機制,實現了開源領域的一次強強聯合。這種技術實施方案成本低、可靠性高,而且由于軟件本身的特點,可擴展性還十分出色。對于亟待加強Web服務器安全性的企業用戶來說,不失為一個經濟高效的解決方案,有較為廣泛的推廣價值。
參考文獻:
[1]凌質億,劉哲星,曹蕾.高并發環境下Apache與Nginx的I/O性能比較[J].計算機系統應用,2013.
[2]張宴.實戰Nginx:取代Apache的高性能Web服務器.北京:電子工業出版社,2011.
[3]喬鑫.Nginx:新一代 Web服務器軟件[J].科技浪潮,2009(1).
[4]張云,許江淳,李玉惠,王志偉,史鵬坤.基于Nginx服務器負載均衡技術的研究與改進[J].軟件,2017.