舉個例子:
1.請解釋一下什么是 Nginx ?
Nginx ,是一個 Web 服務(wù)器和反向代理服務(wù)器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 協(xié)議。目前使用的最多的 Web 服務(wù)器或者代理服務(wù)器,像淘寶、新浪、網(wǎng)易、迅雷等都在使用。Nginx 的主要功能如下:作為 http server FastCGI:Nginx 本身不支持 PHP 等語言,但是它可以通過 FastCGI 來將請求扔給某些語言或框架處理。
Ingress-nginx和Nginx都是Web服務(wù)器,但是它們有一些不同之處。
Ingress-nginx是一個基于Nginx的Ingress控制器,它提供了更高級別的路由功能和負(fù)載均衡功能。它還可以與Kubernetes集群集成,為Kubernetes服務(wù)提供外部訪問。Ingress-nginx通過使用自定義資源定義(CRD)和控制器擴(kuò)展了Kubernetes API,并將HTTP請求路由到正確的后端服務(wù)。
Nginx是一個獨(dú)立的Web服務(wù)器軟件,它也可以用作反向代理服務(wù)器、負(fù)載均衡器和HTTP緩存器。Nginx通過處理并轉(zhuǎn)發(fā)HTTP請求來提供靜態(tài)內(nèi)容,同時還支持動態(tài)內(nèi)容生成,例如PHP腳本等。它還可以用作SSL終止器,在客戶端和服務(wù)器之間進(jìn)行加密通信。
因此,Ingress-nginx與Nginx之間的主要區(qū)別在于其目的和應(yīng)用場景。Ingress-nginx專門用于管理Kubernetes中的服務(wù)路由和負(fù)載均衡,而Nginx則可以廣泛用于各種Web應(yīng)用程序中。
1、可以高并發(fā)連接
官方測試Nginx能夠支撐5萬并發(fā)連接,實(shí)際生產(chǎn)環(huán)境中可以支撐2~4萬并發(fā)連接數(shù)。
原因,主要是Nginx使用了最新的epoll(Linux2.6內(nèi)核)和kqueue(freeBSD)網(wǎng)路I/O模型,而Apache使用的是傳統(tǒng)的Select模型,其比較穩(wěn)定的Prefork模式為多進(jìn)程模式,需要經(jīng)常派生子進(jìn)程,所以消耗的CPU等服務(wù)器資源,要比Nginx高很多。
2、內(nèi)存消耗少
Nginx+PHP(FastCGI)服務(wù)器,在3萬并發(fā)連接下,開啟10個Nginx進(jìn)程消耗150MB內(nèi)存,15MB*10=150MB,開啟的64個PHP-CGI進(jìn)程消耗1280內(nèi)存,20MB*64=1280MB,加上系統(tǒng)自身消耗的內(nèi)存,總共消耗不到2GB的內(nèi)存。
如果服務(wù)器的內(nèi)存比較小,完全可以只開啟25個PHP-CGI進(jìn)程,這樣PHP-CGI消耗的總內(nèi)存數(shù)才500MB。
3、成本低廉
購買F5BIG-IP、NetScaler等硬件負(fù)載均衡交換機(jī),需要十多萬到幾十萬人民幣,而Nginx為開源軟件,采用的是2-clause BSD-like協(xié)議,可以免費(fèi)試用,并且可用于商業(yè)用途。
BSD開源協(xié)議是一個給使用者很大自由的協(xié)議,協(xié)議指出可以自由使用、修改源代碼、也可以將修改后的代碼作為開源或?qū)S密浖侔l(fā)布。
4、配置文件非常簡單
網(wǎng)絡(luò)和程序一樣通俗易懂,即使,非專用系統(tǒng)管理員也能看懂。
5、支持Rewrite重寫
能夠根據(jù)域名、URL的不同,將http請求分到不同的后端服務(wù)器群組。
6、內(nèi)置的健康檢查功能
如果NginxProxy后端的某臺Web服務(wù)器宕機(jī)了,不會影響前端的訪問。
7、節(jié)省帶寬
支持GZIP壓縮,可以添加瀏覽器本地緩存的Header頭。
8、穩(wěn)定性高
用于反向代理,宕機(jī)的概率微乎其微。
9、支持熱部署
Nginx支持熱部署,它的自動特別容易,并且,幾乎可以7天*24小時不間斷的運(yùn)行,即使,運(yùn)行數(shù)個月也不需要重新啟動,還能夠在不間斷服務(wù)的情況下,對軟件版本進(jìn)行升級。
1、作為Web服務(wù)器,Nginx處理靜態(tài)文件、索引文件,自動索引的效率非常高
2、作為代理服務(wù)器,Nginx可以實(shí)現(xiàn)無緩存的反向代理加速,提高網(wǎng)站運(yùn)行速度
3、作為負(fù)載均衡服務(wù)器,Nginx既可以在內(nèi)部直接支持Rails和PHP,也可以支持HTTP代理服務(wù)器對外進(jìn)行服務(wù),同時還支持簡單的容錯和利用算法進(jìn)行負(fù)載均衡
4、在性能方面,Nginx是專門為性能優(yōu)化而開發(fā)的,實(shí)現(xiàn)上非常注重效率。它采用內(nèi)核Poll模型,可以支持更多的并發(fā)連接,最大可以支持對5萬個并發(fā)連接數(shù)的響應(yīng),而且只占用很低的內(nèi)存資源
5、在穩(wěn)定性方面,Nginx采取了分階段資源分配技術(shù),使得CPU與內(nèi)存的占用率非常低。Nginx官方表示,Nginx保持1萬個沒有活動的連接,而這些連接只占用2.5MB內(nèi)存,因此,類似DOS這樣的攻擊對Nginx來說基本上是沒有任何作用的
6、在高可用性方面,Nginx支持熱部署,啟動速度特別迅速,因此可以在不間斷服務(wù)的情況下,對軟件版本或者配置進(jìn)行升級,即使運(yùn)行數(shù)月也無需重新啟動,幾乎可以做到7x24小時不間斷地運(yùn)行
7、內(nèi)置的健康檢查功能:如果有一個服務(wù)器宕機(jī),會做一個健康檢查,再發(fā)送的請求就不會發(fā)送到宕機(jī)的服務(wù)器了。重新將請求提交到其他的節(jié)點(diǎn)上。
這個是nginx出現(xiàn)403 forbidden最常見的原因。為了保證文件能正確執(zhí)行,nginx既需要文件的讀權(quán)限,又需要文件所有父目錄的可執(zhí)行權(quán)限。
例如,當(dāng)訪問/usr/local/nginx/html/image.jpg時,nginx既需要image.jpg文件的可讀權(quán)限,也需要/, /usr,/usr/local,/usr/local/nginx,/usr/local/nginx/html的可以執(zhí)行權(quán)限。解決辦法:設(shè)置所有父目錄為755權(quán)限,設(shè)置文件為644權(quán)限可以避免權(quán)限不正確。
nginx keepalived工作在IP/TCP協(xié)議棧的IP層,TCP層,及應(yīng)用層,其工作原理基于VRRP協(xié)議。
網(wǎng)絡(luò)層(layer 3):Keepalived會定期向服務(wù)器群中的服務(wù)器發(fā)送一個ICMP的數(shù)據(jù)包,(既我們平時用的Ping程序), 如果發(fā)現(xiàn)某臺服務(wù)的IP地址沒有激活,Keepalived便報(bào)告這臺服務(wù)器失效,并將它從服務(wù)器群中剔除。
一、限制訪問頻率(正常流量)Nginx中我們使用ngx_http_limit_req_module模塊來限制請求的訪問頻率,基于漏桶算法原理實(shí)現(xiàn)。接下來我們使用 nginx limit_req_zone 和 limit_req 兩個指令,限制單個IP的請求處理速率。
二、限制訪問頻率(突發(fā)流量)
在流量突然增大時,超出的請求將被拒絕,無法處理突發(fā)流量,那么在處理突發(fā)流量的時候,該怎么處理呢?Nginx提供了 burst 參數(shù)來解決突發(fā)流量的問題,并結(jié)合 nodelay 參數(shù)一起使用。burst 譯為突發(fā)、爆發(fā),表示在超過設(shè)定的處理速率后能額外處理的請求數(shù)?!?/p>
nginx非常適合這一點(diǎn),因?yàn)樗峁┝朔奖阈遁d并發(fā),延遲處理,SSL(安全套接字層),靜態(tài)內(nèi)容,壓縮和緩存,連接和請求限制,甚至來自應(yīng)用程序的HTTP媒體流所需的關(guān)鍵功能層到更有效的邊緣Web服務(wù)器層。它還允許直接與memcached / Redis或其他“NoSQL”解決方案集成,以在為大量并發(fā)用戶提供服務(wù)時提高性能。
隨著最近開發(fā)套件和編程語言的廣泛使用,越來越多的公司正在改變他們的應(yīng)用程序開發(fā)和部署習(xí)慣。nginx已成為這些不斷變化的范例中最重要的組成部分之一,它已經(jīng)幫助許多公司在預(yù)算范圍內(nèi)快速啟動和開發(fā)其Web服務(wù)。
nginx的第一行是在2002年編寫的。2004年,它根據(jù)雙條款BSD許可證向公眾發(fā)布。從那時起,nginx用戶的數(shù)量一直在增長,提供想法,并提交對整個社區(qū)非常有幫助和有益的錯誤報(bào)告,建議和觀察。
nginx代碼庫是原創(chuàng)的,完全是用C編程語言從頭開始編寫的。nginx已被移植到許多架構(gòu)和操作系統(tǒng),包括Linux,F(xiàn)reeBSD,Solaris,Mac OS X,AIX和Microsoft Windows。nginx有自己的庫,其標(biāo)準(zhǔn)模塊除了zlib,PCRE和OpenSSL之外不會超出系統(tǒng)的C庫,除非zlib,PCRE和OpenSSL可以選擇從構(gòu)建中排除,如果不需要或者由于潛在的許可證沖突。
Nginx默認(rèn)大小是指Nginx服務(wù)器在處理請求時,默認(rèn)的最大請求體大小限制。在Nginx的配置文件中,有一個名為client_max_body_size的指令,用于設(shè)置請求體的最大大小。
默認(rèn)情況下,Nginx的client_max_body_size指令沒有顯式設(shè)置,因此它的默認(rèn)值是0,表示沒有限制。這意味著Nginx默認(rèn)情況下可以處理任意大小的請求體。
然而,實(shí)際上,Nginx在處理請求時還受到其他因素的限制,比如操作系統(tǒng)的限制、硬件資源等。因此,盡管Nginx默認(rèn)沒有設(shè)置請求體大小限制,但實(shí)際上仍然受到一些限制。
如果您需要設(shè)置Nginx的請求體大小限制,可以在Nginx的配置文件中添加或修改client_max_body_size指令,并設(shè)置合適的值。例如,可以將其設(shè)置為client_max_body_size 10m;表示最大請求體大小為10MB。
請注意,修改Nginx配置文件后,需要重新加載或重啟Nginx服務(wù)器才能使配置生效。
作用:當(dāng)一臺機(jī)器宕機(jī)時,另外一臺機(jī)器接管機(jī)器的IP資源和服務(wù)資源,提供服務(wù)。常用于不易實(shí)現(xiàn)負(fù)載均衡的應(yīng)用,比如在均衡器,主數(shù)據(jù)庫,主存儲之間高可用性集群常用的軟件包括keepalived heartbeat等。
負(fù)載均衡集群:負(fù)載均衡集群為了提供更為實(shí)用,性價(jià)比更高的系統(tǒng)架構(gòu)解決方案,可以把很多客戶集中的訪問請求盡可能平均分?jǐn)傇谟?jì)算機(jī)集群中處理。
高可用性集群:在集群任意一個節(jié)點(diǎn)失效的情況下,該節(jié)點(diǎn)的所有任務(wù)會自動轉(zhuǎn)移到其他正常的節(jié)點(diǎn)上,并且不影響真?zhèn)€集群的運(yùn)行。
高性能計(jì)算集群:通常,高性能計(jì)算集群設(shè)置為集群開發(fā)的并行應(yīng)用程序,以解決負(fù)復(fù)雜的科學(xué)問題(天氣預(yù)報(bào),石油勘探,核反應(yīng)模擬等)