Nginx配置文件的使用以及實現(xiàn)負(fù)載均衡的4種常用方式
前提:
首先先了解一下正向代理和反向代理的理論知識,再直接解讀nginx配置文件和實現(xiàn)負(fù)載均衡的4種方式。
Nginx是一個強(qiáng)大的開源Web服務(wù)器和反向代理服務(wù)器,它支持正向代理和反向代理功能。下面是對兩者的簡要解釋:
正向代理
正向代理是在客戶端和目標(biāo)服務(wù)器之間充當(dāng)中間人的代理服務(wù)器。當(dāng)客戶端請求訪問目標(biāo)服務(wù)器時,請求先發(fā)送到正向代理服務(wù)器,然后由代理服務(wù)器轉(zhuǎn)發(fā)請求給目標(biāo)服務(wù)器,并將目標(biāo)服務(wù)器的響應(yīng)返回給客戶端。正向代理隱藏了客戶端的真實IP地址,使得目標(biāo)服務(wù)器無法直接識別和追蹤客戶端。
簡而言之:正向代理是客戶端訪問代理服務(wù)器去訪問目標(biāo)服務(wù)器,并且對目標(biāo)服務(wù)器隱藏了客戶端的真實信息(IP等信息)。
正向代理的主要用途包括:
- 訪問被限制的資源:當(dāng)某些資源受到網(wǎng)絡(luò)限制或訪問限制時,可以使用正向代理繞過這些限制來獲取資源。
- 提高訪問速度:代理服務(wù)器可以緩存經(jīng)常請求的資源,從而提高客戶端訪問資源的速度。
- 突破防火墻:正向代理可以幫助繞過企業(yè)或國家防火墻的限制,訪問被封鎖的網(wǎng)站或資源。
反向代理
反向代理是在服務(wù)器端和客戶端之間充當(dāng)中間人的代理服務(wù)器。當(dāng)客戶端發(fā)送請求訪問反向代理服務(wù)器時,代理服務(wù)器會根據(jù)一定的規(guī)則將請求轉(zhuǎn)發(fā)給后端的多個服務(wù)器中的一臺,然后將后端服務(wù)器的響應(yīng)返回給客戶端。反向代理隱藏了真實的服務(wù)端,對于客戶端而言,它們并不知道具體訪問的是哪一臺后端服務(wù)器。
簡而言之:反向代理是指代理服務(wù)器接收客戶端的請求,然后反向代理將客戶端的請求分發(fā)給一個或多個目標(biāo)服務(wù)器,最后將響應(yīng)返回給客戶端,對于客戶端隱藏了真實的服務(wù)端信息。
反向代理的主要用途包括:
- 負(fù)載均衡:反向代理可以根據(jù)一定的算法將請求均勻地分發(fā)給后端的多臺服務(wù)器,從而實現(xiàn)負(fù)載均衡,提高系統(tǒng)的并發(fā)處理能力和穩(wěn)定性。
- 緩存靜態(tài)資源:反向代理可以緩存經(jīng)常請求的靜態(tài)資源,減少后端服務(wù)器的負(fù)載,提高網(wǎng)站的訪問速度。
- 安全性和可靠性:反向代理可以作為防火墻和安全設(shè)備,提供安全認(rèn)證、訪問控制、DDoS攻擊防護(hù)等功能。
總結(jié):
- 正向代理和反向代理都是利用代理服務(wù)器作為中間人來轉(zhuǎn)發(fā)請求和響應(yīng)。
- 正向代理是客戶端通過代理服務(wù)器發(fā)送請求,代理服務(wù)器幫助客戶端發(fā)送請求到互聯(lián)網(wǎng)上的目標(biāo)服務(wù)器。隱藏客戶端的真實IP地址(目標(biāo)服務(wù)器并不知道是那個真實的客戶端訪問的)。
- 反向代理是客戶端通過代理服務(wù)器發(fā)送請求,代理服務(wù)器將請求轉(zhuǎn)發(fā)到后端的多個服務(wù)器中的一個。反向代理隱藏真實的服務(wù)端(客戶端并不知道那個后端服務(wù)器響應(yīng)的結(jié)果)。
- 兩者的區(qū)別在于請求的流向和代理服務(wù)器與目標(biāo)服務(wù)器的關(guān)系,正向代理中代理服務(wù)器與客戶端處于同一側(cè)(客戶端通過代理服務(wù)器獲取特定的資源),反向代理中代理服務(wù)器與目標(biāo)服務(wù)器處于同一側(cè)(服務(wù)端通過代理服務(wù)器處理客戶端的請求)。
Nginx配置文件
nginx 的組成部分
配置文件中有很多#, 開頭的表示注釋內(nèi)容,我們?nèi)サ羲幸?# 開頭的段落,精簡之后的 內(nèi)容如下:
#user nobody; 是用來指定 Nginx 進(jìn)程運行的用戶和用戶組的配置項。 在 Linux 系統(tǒng)中,各個進(jìn)程需要以某個用戶的身份來運行,以限制權(quán)限并提高安全性 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 8080; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
nginx 配置文件有三部分組成
第一部分:全局塊
比如上面第一行配置的:
worker_processes 1;
這是 Nginx 服務(wù)器并發(fā)處理服務(wù)的關(guān)鍵配置,worker_processes 值越大,可以支持的并發(fā)處理量也越多,但是 會受到硬件、軟件等設(shè)備的制約。
第二部分:events塊
比如上面的配置:
events { worker_connections 1024; }
events 塊涉及的指令 主要影響 Nginx 服務(wù)器與用戶的網(wǎng)絡(luò)連接,常用的設(shè)置包括是否開啟對多 work process 下的網(wǎng)絡(luò)連接進(jìn)行序列化,是否允許同時接收多個網(wǎng)絡(luò)連接,選取哪種事件驅(qū)動模型來處理連接請求,每個 word process 可以同時支持的最大網(wǎng)絡(luò)連接數(shù)等。
上述例子就表示每個 work process 支持的最大連接數(shù)為 1024.
這部分的配置對 Nginx 的性能影響較大,在實際中應(yīng)該靈活配置。
第三部分:http塊
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 8080; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
需要注意的是:http 塊也可以包括 http全局塊、server 塊。
http全局塊
http全局塊配置的指令包括文件引入、MIME-TYPE 定義、日志自定義、連接超時時間、單鏈接請求數(shù)上限等。
server 塊
這塊和虛擬主機(jī)有密切關(guān)系,虛擬主機(jī)從用戶角度看,和一臺獨立的硬件主機(jī)是完全一樣的,該技術(shù)的產(chǎn)生是為了 節(jié)省互聯(lián)網(wǎng)服務(wù)器硬件成本。
每個 http 塊可以包括多個 server 塊,而每個 server 塊就相當(dāng)于一個虛擬主機(jī)。
而每個 server 塊也分為全局 server 塊,以及可以同時包含多個 locaton 塊。
Nginx常用的實現(xiàn)負(fù)載均衡的4種方式
Nginx提供了多種方式實現(xiàn)負(fù)載均衡,以下是其中幾種常用的方式:
輪詢(Round Robin)
這是默認(rèn)的負(fù)載均衡算法,Nginx按照請求的順序依次將請求分配給后端的服務(wù)器。每個服務(wù)器按照其權(quán)重來處理請求,然后按順序循環(huán)分配。
這種算法簡單且平均地將負(fù)載分配給后端服務(wù)器,適用于后端服務(wù)器配置相同、處理能力相當(dāng)?shù)膱鼍啊?/p>
http { upstream backend { server 192.168.1.101:8080; server 192.168.1.102:8080; server 192.168.1.103:8080; } server { listen 80; location / { proxy_pass http://backend; } } }
IP哈希(IP Hash)
Nginx根據(jù)客戶端的IP地址進(jìn)行哈希運算,并根據(jù)計算結(jié)果將請求分配給固定的后端服務(wù)器。
這種算法保證了相同的客戶端IP每次請求都會被分配到相同的服務(wù)器,適用于需要保持會話狀態(tài)的應(yīng)用。
http { upstream backend { ip_hash; server 192.168.1.101:8080; server 192.168.1.102:8080; server 192.168.1.103:8080; } server { listen 80; location / { proxy_pass http://backend; } } }
加權(quán)輪詢(Weighted Round Robin)
Nginx根據(jù)每個后端服務(wù)器的配置權(quán)重將請求分配給服務(wù)器。權(quán)重越高的服務(wù)器,處理的請求就越多。這種方式適用于后端服務(wù)器之間配置不同、處理能力不同的情況下。
http { upstream backend { server 192.168.1.101:8080 weight=3; server 192.168.1.102:8080 weight=2; server 192.168.1.103:8080 weight=1; } server { listen 80; location / { proxy_pass http://backend; } } }
最少連接(Least Connections)
Nginx會統(tǒng)計每個后端服務(wù)器當(dāng)前的活動連接數(shù),并將請求分配給活動連接數(shù)最少的服務(wù)器,以實現(xiàn)負(fù)載均衡。這種算法適用于后端服務(wù)器配置和處理能力不同、連接持續(xù)時間不均衡的場景。
http { upstream backend { least_conn; server 192.168.1.101:8080; server 192.168.1.102:8080; server 192.168.1.103:8080; } server { listen 80; location / { proxy_pass http://backend; } } }
什么是跨域?
跨域(跨域資源共享(Cross-Origin Resources Sharing ,CORS))是指跨域名:域名,記憶網(wǎng)絡(luò)電腦ip很難記,就給它取了一個名字來記憶,這個名字就要域名。域名最終要被轉(zhuǎn)換為ip地址??缬蚴侵缚缬蛎脑L問,從一個域名的系統(tǒng)去訪問另一個域名系統(tǒng)www.baidu.com-www.jd.com,以下情況都屬于跨域:
當(dāng)一個請求url的協(xié)議、域名、端口號三者之間任意一個與當(dāng)前頁面url不同即為跨域。
負(fù)載均衡
什么是負(fù)載均衡【降低后端某個服務(wù)器的壓力 】
在高并發(fā)的情況下,一臺服務(wù)器的負(fù)載承受不住,我們就需要使用服務(wù)器集群來解決高并發(fā),但是又會出現(xiàn)另一個問題,就是客戶端的請求如何分配給多個服務(wù)器,所以在服務(wù)器集群中,需要一個服務(wù)器充當(dāng)一個【負(fù)載均衡器-Nginx】【NameServer-也可以是一個集群】的作用,用戶的所有請求都會都會由負(fù)載均衡器【NameServer】進(jìn)行接收,調(diào)度者根據(jù)每臺服務(wù)器的負(fù)載情況通過負(fù)載均衡算法將請求分配給某一臺后端服務(wù)器進(jìn)行處理。
負(fù)載均衡算法比如輪詢、權(quán)重、隨機(jī)、區(qū)域等等
RoundRobbonRule
:簡單輪詢,ribbon默認(rèn)規(guī)則AvailabilityFilteringRule
:忽略短路狀態(tài)和并發(fā)過高的服務(wù)器WeightedResponseTimeRule
:根據(jù)服務(wù)器響應(yīng)時間作為權(quán)重,響應(yīng)時間越長權(quán)重越小ZoneAvoidanceRule
:根據(jù)區(qū)域選擇可用的服務(wù)器BestAvailableRule
:忽略短路的服務(wù)器,選擇并發(fā)較低的服務(wù)器RandomRule
:隨機(jī)選擇一個可用服務(wù)器Retry
:重試機(jī)制的選擇邏輯【不建議】
動靜分離
為了加快網(wǎng)站的解析速度,可以把動態(tài)頁面和靜態(tài)頁面由不同的服務(wù)器來解析,加快解析速 度。降低原來單個服務(wù)器的壓力。【各司其職】
Nginx常用命令
a. 使用nginx操作命令前提
使用nginx操作命令前提:必須進(jìn)入到nginx的自動生成目錄的下/sbin文件夾下。
就是 Super User 的意思,是 Superuser Binaries (超級用戶的二進(jìn)制文件) 的縮寫,這里存放的是系統(tǒng)管理員使用的系統(tǒng)管理程序。
查看 nginx 的版本號
./nginx -v
啟動 nginx
./nginx
關(guān)閉nginx
./nginx -s stop
重新加載 nginx
在目錄:/usr/local/nginx/sbin 下執(zhí)行命令,不需要重啟服務(wù)器,自動編譯。
./nginx -s reload
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nginx訪問控制與參數(shù)調(diào)優(yōu)的方法
這篇文章主要介紹了Nginx訪問控制與參數(shù)調(diào)優(yōu)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03利用nginx與ffmpeg搭建流媒體服務(wù)器過程詳解
這篇文章主要給大家介紹了利用nginx與ffmpeg搭建流媒體服務(wù)器的全過程,文中介紹的很詳細(xì),對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-03-03Nginx配置檢測服務(wù)狀態(tài)的實現(xiàn)方法
這篇文章主要介紹了Nginx配置檢測服務(wù)狀態(tài)的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05