nginx源碼安裝詳解 什么是源碼安裝?
什么是源碼安裝?源代碼安裝也叫編譯安裝,pagoda給的提示是安裝時(shí)間20分鐘-2小時(shí),適合生產(chǎn)環(huán)境。源碼安裝方法是下載源碼包,然后解壓安裝。這種方法可以指定配置參數(shù),以及當(dāng)特定版本的中間件(如NGI
什么是源碼安裝?
源代碼安裝也叫編譯安裝,pagoda給的提示是安裝時(shí)間20分鐘-2小時(shí),適合生產(chǎn)環(huán)境。
源碼安裝方法是下載源碼包,然后解壓安裝。
這種方法可以指定配置參數(shù),以及當(dāng)特定版本的中間件(如NGINX、PHP等。)時(shí),可以安裝指定的插件和指定的路徑,具有很強(qiáng)的兼容性和穩(wěn)定性。
但是如果有1000多臺(tái)管理服務(wù)器,至少100臺(tái)服務(wù)器,同樣的環(huán)境需要同樣的軟件,那么源代碼安裝就有點(diǎn)捉襟見(jiàn)肘了。
haproxy和nginx的區(qū)別?
Nginx和Haproxy其實(shí)定位不一樣。Nginx定位為服務(wù)器,Haproxy定位為負(fù)載均衡器。
Nginx可以通過(guò)各種插件模塊支持負(fù)載均衡的功能,性能也不比haproxy弱多少,所以總有人拿這兩樣?xùn)|西做比較。其實(shí)Apache也可以通過(guò)相關(guān)模塊做負(fù)載均衡器,但是性能差很多,所以沒(méi)人用。當(dāng)然,Nginx s LB功能現(xiàn)在是它的主要功能。
我看到大家對(duì)haproxy的多進(jìn)程有很多誤解。特別是這里,haproxy早就支持多進(jìn)程模型,但它不是Nginx的Worker Master結(jié)構(gòu),而是一個(gè)平等的多進(jìn)程結(jié)構(gòu),它還支持重用端口選項(xiàng)。所以Nginx和Haproxy在多核利用上沒(méi)有本質(zhì)區(qū)別。
1.8以后,haproxy增加了多線程模式,現(xiàn)在推薦這個(gè)模式,在一些平臺(tái)上可以更好的利用多核。Nginx一直沒(méi)有多線程模型。而且社區(qū)似乎不打算支持它。
Nginx其實(shí)是基于服務(wù)器的功能,這是Haproxy沒(méi)有的。Haproxy很難像普通Web服務(wù)器一樣回復(fù)一個(gè)普通的HTTP請(qǐng)求,不大規(guī)模修改源代碼是不可能做到的。Haproxy是圍繞轉(zhuǎn)發(fā)模型設(shè)計(jì)的,整個(gè)過(guò)程都是圍繞著如何快速轉(zhuǎn)發(fā)一個(gè)請(qǐng)求或者回復(fù)給另一端。It 這不像服務(wù)器接受請(qǐng)求然后回復(fù)。
但是Nginx作為一個(gè)純LB,尤其是針對(duì)Web負(fù)載均衡器的,并沒(méi)有haproxy那么細(xì)致。Haproxy支持廣泛的ACL對(duì)象。在許多情況下,復(fù)雜的功能可以在沒(méi)有腳本的幫助下完成,而Nginx 的稍微復(fù)雜的負(fù)載平衡功能需要用腳本來(lái)完成,所以性能會(huì)差很多。
從功能的角度來(lái)看,Nginx實(shí)際上比Haproxy更多(當(dāng)然不是全部免費(fèi)),因?yàn)樗拈_(kāi)發(fā)社區(qū)和定位方向比Haproxy更大更廣。Nginx上還有很多解決方案。比如WAF和haproxy都沒(méi)有更好的原生解決方案。還有就是最近對(duì)Service Mesh的支持,haproxy很難跟上。
但是基本的功能,包括HTTP2、TLS 1.3、Script、SSL/TLS offload、ocsp、SNI預(yù)加載,haproxy最新版本早就已經(jīng)支持了,甚至比Nginx還要早(HTTP2更晚,但現(xiàn)在也支持了)。另外硬件SSL卸載支持其實(shí)主要是OpenSSL的引擎支持,所以這個(gè)和大家差不多,只要兼容最新的OpenSSL就沒(méi)有問(wèn)題。
haproxy的優(yōu)勢(shì)其實(shí)是轉(zhuǎn)發(fā)性能略高。因?yàn)镠aproxy追求的是零拷貝的正向過(guò)程,所以代碼傾向于這方面的優(yōu)化。然而,這個(gè)優(yōu)勢(shì)現(xiàn)在被TLS/SSL的廣泛應(yīng)用抹殺了。相比0 copy節(jié)省的時(shí)間,加解密的性能占了絕大部分,所以haproxy在目前粗放的SSL環(huán)境下基本沒(méi)有優(yōu)勢(shì)。除非你想用純HTTP,也想用基于HTTP頭的復(fù)雜負(fù)載均衡功能,那么Haproxy是個(gè)不錯(cuò)的選擇,否則如果只是LB,LVS性能其實(shí)更高,畢竟人在內(nèi)核。
從代碼層面來(lái)看,Nginx s的結(jié)構(gòu)化代碼和模塊化比Haproxy好很多。Haproxy代碼的模塊化一直是個(gè)大問(wèn)題。內(nèi)部結(jié)構(gòu)不夠模塊化,二次開(kāi)發(fā)難度大。最近才改進(jìn)到1.9,但是還是有很多內(nèi)部的招數(shù)hack和混淆旗。與Nginx s的徹底模塊化,通過(guò)開(kāi)發(fā)自己的模塊很容易改變或?qū)崿F(xiàn)相關(guān)功能,這是haproxy所不具備的。
從開(kāi)發(fā)社區(qū)來(lái)說(shuō),Nginx比Haproxy好太多了。雖然社區(qū)歷史更久,但Haproxy一直都是無(wú)動(dòng)于衷的。由于原作者的嚴(yán)格控制,一直以來(lái)貢獻(xiàn)者很少,也沒(méi)有模塊開(kāi)發(fā)功能,所以并沒(méi)有吸引多少開(kāi)發(fā)者。問(wèn)題是版本更新慢,支持的新功能也慢。HTTP2的開(kāi)發(fā)完全依賴(lài)原作者,所以支持進(jìn)度嚴(yán)重滯后。
這篇文章好像成了對(duì)haproxy的吐槽,但我覺(jué)得我還是有些了解的,因?yàn)槲以诠ぷ髦薪佑|這兩個(gè)東西太多了,也在深度開(kāi)發(fā)。目前,如果haproxy可以 t與NGINX不可比,因?yàn)樗_(kāi)放,可以招募更多的貢獻(xiàn)者,不能完全修改架構(gòu)來(lái)支持模塊開(kāi)發(fā)。
另外,Haproxy的優(yōu)勢(shì)在于免費(fèi)版的功能比Nginx更實(shí)惠。對(duì)于小而差的網(wǎng)站來(lái)說(shuō),這確實(shí)是一個(gè)好處。