Nginx配置文件的使用以及實(shí)現(xiàn)負(fù)載均衡的4種常用方式
前提:
首先先了解一下正向代理和反向代理的理論知識(shí),再直接解讀nginx配置文件和實(shí)現(xiàn)負(fù)載均衡的4種方式。
Nginx是一個(gè)強(qiáng)大的開(kāi)源Web服務(wù)器和反向代理服務(wù)器,它支持正向代理和反向代理功能。下面是對(duì)兩者的簡(jiǎn)要解釋?zhuān)?/p>
正向代理

正向代理是在客戶(hù)端和目標(biāo)服務(wù)器之間充當(dāng)中間人的代理服務(wù)器。當(dāng)客戶(hù)端請(qǐng)求訪問(wèn)目標(biāo)服務(wù)器時(shí),請(qǐng)求先發(fā)送到正向代理服務(wù)器,然后由代理服務(wù)器轉(zhuǎn)發(fā)請(qǐng)求給目標(biāo)服務(wù)器,并將目標(biāo)服務(wù)器的響應(yīng)返回給客戶(hù)端。正向代理隱藏了客戶(hù)端的真實(shí)IP地址,使得目標(biāo)服務(wù)器無(wú)法直接識(shí)別和追蹤客戶(hù)端。
簡(jiǎn)而言之:正向代理是客戶(hù)端訪問(wèn)代理服務(wù)器去訪問(wèn)目標(biāo)服務(wù)器,并且對(duì)目標(biāo)服務(wù)器隱藏了客戶(hù)端的真實(shí)信息(IP等信息)。
正向代理的主要用途包括:
- 訪問(wèn)被限制的資源:當(dāng)某些資源受到網(wǎng)絡(luò)限制或訪問(wèn)限制時(shí),可以使用正向代理繞過(guò)這些限制來(lái)獲取資源。
- 提高訪問(wèn)速度:代理服務(wù)器可以緩存經(jīng)常請(qǐng)求的資源,從而提高客戶(hù)端訪問(wèn)資源的速度。
- 突破防火墻:正向代理可以幫助繞過(guò)企業(yè)或國(guó)家防火墻的限制,訪問(wèn)被封鎖的網(wǎng)站或資源。
反向代理

反向代理是在服務(wù)器端和客戶(hù)端之間充當(dāng)中間人的代理服務(wù)器。當(dāng)客戶(hù)端發(fā)送請(qǐng)求訪問(wèn)反向代理服務(wù)器時(shí),代理服務(wù)器會(huì)根據(jù)一定的規(guī)則將請(qǐng)求轉(zhuǎn)發(fā)給后端的多個(gè)服務(wù)器中的一臺(tái),然后將后端服務(wù)器的響應(yīng)返回給客戶(hù)端。反向代理隱藏了真實(shí)的服務(wù)端,對(duì)于客戶(hù)端而言,它們并不知道具體訪問(wèn)的是哪一臺(tái)后端服務(wù)器。
簡(jiǎn)而言之:反向代理是指代理服務(wù)器接收客戶(hù)端的請(qǐng)求,然后反向代理將客戶(hù)端的請(qǐng)求分發(fā)給一個(gè)或多個(gè)目標(biāo)服務(wù)器,最后將響應(yīng)返回給客戶(hù)端,對(duì)于客戶(hù)端隱藏了真實(shí)的服務(wù)端信息。
反向代理的主要用途包括:
- 負(fù)載均衡:反向代理可以根據(jù)一定的算法將請(qǐng)求均勻地分發(fā)給后端的多臺(tái)服務(wù)器,從而實(shí)現(xiàn)負(fù)載均衡,提高系統(tǒng)的并發(fā)處理能力和穩(wěn)定性。
- 緩存靜態(tài)資源:反向代理可以緩存經(jīng)常請(qǐng)求的靜態(tài)資源,減少后端服務(wù)器的負(fù)載,提高網(wǎng)站的訪問(wèn)速度。
- 安全性和可靠性:反向代理可以作為防火墻和安全設(shè)備,提供安全認(rèn)證、訪問(wèn)控制、DDoS攻擊防護(hù)等功能。
總結(jié):
- 正向代理和反向代理都是利用代理服務(wù)器作為中間人來(lái)轉(zhuǎn)發(fā)請(qǐng)求和響應(yīng)。
- 正向代理是客戶(hù)端通過(guò)代理服務(wù)器發(fā)送請(qǐng)求,代理服務(wù)器幫助客戶(hù)端發(fā)送請(qǐng)求到互聯(lián)網(wǎng)上的目標(biāo)服務(wù)器。隱藏客戶(hù)端的真實(shí)IP地址(目標(biāo)服務(wù)器并不知道是那個(gè)真實(shí)的客戶(hù)端訪問(wèn)的)。
- 反向代理是客戶(hù)端通過(guò)代理服務(wù)器發(fā)送請(qǐng)求,代理服務(wù)器將請(qǐng)求轉(zhuǎn)發(fā)到后端的多個(gè)服務(wù)器中的一個(gè)。反向代理隱藏真實(shí)的服務(wù)端(客戶(hù)端并不知道那個(gè)后端服務(wù)器響應(yīng)的結(jié)果)。
- 兩者的區(qū)別在于請(qǐng)求的流向和代理服務(wù)器與目標(biāo)服務(wù)器的關(guān)系,正向代理中代理服務(wù)器與客戶(hù)端處于同一側(cè)(客戶(hù)端通過(guò)代理服務(wù)器獲取特定的資源),反向代理中代理服務(wù)器與目標(biāo)服務(wù)器處于同一側(cè)(服務(wù)端通過(guò)代理服務(wù)器處理客戶(hù)端的請(qǐng)求)。
Nginx配置文件
nginx 的組成部分
配置文件中有很多#, 開(kāi)頭的表示注釋內(nèi)容,我們?nèi)サ羲幸?# 開(kāi)頭的段落,精簡(jiǎn)之后的 內(nèi)容如下:
#user nobody; 是用來(lái)指定 Nginx 進(jìn)程運(yùn)行的用戶(hù)和用戶(hù)組的配置項(xiàng)。 在 Linux 系統(tǒng)中,各個(gè)進(jìn)程需要以某個(gè)用戶(hù)的身份來(lái)運(yù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ā)處理量也越多,但是 會(huì)受到硬件、軟件等設(shè)備的制約。
第二部分:events塊
比如上面的配置:
events {
worker_connections 1024;
}events 塊涉及的指令 主要影響 Nginx 服務(wù)器與用戶(hù)的網(wǎng)絡(luò)連接,常用的設(shè)置包括是否開(kāi)啟對(duì)多 work process 下的網(wǎng)絡(luò)連接進(jìn)行序列化,是否允許同時(shí)接收多個(gè)網(wǎng)絡(luò)連接,選取哪種事件驅(qū)動(dòng)模型來(lái)處理連接請(qǐng)求,每個(gè) word process 可以同時(shí)支持的最大網(wǎng)絡(luò)連接數(shù)等。
上述例子就表示每個(gè) work process 支持的最大連接數(shù)為 1024.
這部分的配置對(duì) Nginx 的性能影響較大,在實(shí)際中應(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í)時(shí)間、單鏈接請(qǐng)求數(shù)上限等。
server 塊
這塊和虛擬主機(jī)有密切關(guān)系,虛擬主機(jī)從用戶(hù)角度看,和一臺(tái)獨(dú)立的硬件主機(jī)是完全一樣的,該技術(shù)的產(chǎn)生是為了 節(jié)省互聯(lián)網(wǎng)服務(wù)器硬件成本。
每個(gè) http 塊可以包括多個(gè) server 塊,而每個(gè) server 塊就相當(dāng)于一個(gè)虛擬主機(jī)。
而每個(gè) server 塊也分為全局 server 塊,以及可以同時(shí)包含多個(gè) locaton 塊。
Nginx常用的實(shí)現(xiàn)負(fù)載均衡的4種方式
Nginx提供了多種方式實(shí)現(xiàn)負(fù)載均衡,以下是其中幾種常用的方式:
輪詢(xún)(Round Robin)
這是默認(rèn)的負(fù)載均衡算法,Nginx按照請(qǐng)求的順序依次將請(qǐng)求分配給后端的服務(wù)器。每個(gè)服務(wù)器按照其權(quán)重來(lái)處理請(qǐng)求,然后按順序循環(huán)分配。
這種算法簡(jiǎn)單且平均地將負(fù)載分配給后端服務(wù)器,適用于后端服務(wù)器配置相同、處理能力相當(dāng)?shù)膱?chǎng)景。
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ù)客戶(hù)端的IP地址進(jìn)行哈希運(yùn)算,并根據(jù)計(jì)算結(jié)果將請(qǐng)求分配給固定的后端服務(wù)器。
這種算法保證了相同的客戶(hù)端IP每次請(qǐng)求都會(huì)被分配到相同的服務(wù)器,適用于需要保持會(huì)話狀態(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)輪詢(xún)(Weighted Round Robin)
Nginx根據(jù)每個(gè)后端服務(wù)器的配置權(quán)重將請(qǐng)求分配給服務(wù)器。權(quán)重越高的服務(wù)器,處理的請(qǐng)求就越多。這種方式適用于后端服務(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會(huì)統(tǒng)計(jì)每個(gè)后端服務(wù)器當(dāng)前的活動(dòng)連接數(shù),并將請(qǐng)求分配給活動(dòng)連接數(shù)最少的服務(wù)器,以實(shí)現(xiàn)負(fù)載均衡。這種算法適用于后端服務(wù)器配置和處理能力不同、連接持續(xù)時(shí)間不均衡的場(chǎng)景。
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很難記,就給它取了一個(gè)名字來(lái)記憶,這個(gè)名字就要域名。域名最終要被轉(zhuǎn)換為ip地址??缬蚴侵缚缬蛎脑L問(wèn),從一個(gè)域名的系統(tǒng)去訪問(wèn)另一個(gè)域名系統(tǒng)www.baidu.com-www.jd.com,以下情況都屬于跨域:
當(dāng)一個(gè)請(qǐng)求url的協(xié)議、域名、端口號(hào)三者之間任意一個(gè)與當(dāng)前頁(yè)面url不同即為跨域。
負(fù)載均衡
什么是負(fù)載均衡【降低后端某個(gè)服務(wù)器的壓力 】
在高并發(fā)的情況下,一臺(tái)服務(wù)器的負(fù)載承受不住,我們就需要使用服務(wù)器集群來(lái)解決高并發(fā),但是又會(huì)出現(xiàn)另一個(gè)問(wèn)題,就是客戶(hù)端的請(qǐng)求如何分配給多個(gè)服務(wù)器,所以在服務(wù)器集群中,需要一個(gè)服務(wù)器充當(dāng)一個(gè)【負(fù)載均衡器-Nginx】【NameServer-也可以是一個(gè)集群】的作用,用戶(hù)的所有請(qǐng)求都會(huì)都會(huì)由負(fù)載均衡器【NameServer】進(jìn)行接收,調(diào)度者根據(jù)每臺(tái)服務(wù)器的負(fù)載情況通過(guò)負(fù)載均衡算法將請(qǐng)求分配給某一臺(tái)后端服務(wù)器進(jìn)行處理。
負(fù)載均衡算法比如輪詢(xún)、權(quán)重、隨機(jī)、區(qū)域等等
RoundRobbonRule:簡(jiǎn)單輪詢(xún),ribbon默認(rèn)規(guī)則AvailabilityFilteringRule:忽略短路狀態(tài)和并發(fā)過(guò)高的服務(wù)器WeightedResponseTimeRule:根據(jù)服務(wù)器響應(yīng)時(shí)間作為權(quán)重,響應(yīng)時(shí)間越長(zhǎng)權(quán)重越小ZoneAvoidanceRule:根據(jù)區(qū)域選擇可用的服務(wù)器BestAvailableRule:忽略短路的服務(wù)器,選擇并發(fā)較低的服務(wù)器RandomRule:隨機(jī)選擇一個(gè)可用服務(wù)器Retry:重試機(jī)制的選擇邏輯【不建議】

動(dòng)靜分離
為了加快網(wǎng)站的解析速度,可以把動(dòng)態(tài)頁(yè)面和靜態(tài)頁(yè)面由不同的服務(wù)器來(lái)解析,加快解析速 度。降低原來(lái)單個(gè)服務(wù)器的壓力。【各司其職】

Nginx常用命令
a. 使用nginx操作命令前提
使用nginx操作命令前提:必須進(jìn)入到nginx的自動(dòng)生成目錄的下/sbin文件夾下。
就是 Super User 的意思,是 Superuser Binaries (超級(jí)用戶(hù)的二進(jìn)制文件) 的縮寫(xiě),這里存放的是系統(tǒng)管理員使用的系統(tǒng)管理程序。
查看 nginx 的版本號(hào)
./nginx -v

啟動(dòng) nginx
./nginx

關(guān)閉nginx
./nginx -s stop

重新加載 nginx
在目錄:/usr/local/nginx/sbin 下執(zhí)行命令,不需要重啟服務(wù)器,自動(dòng)編譯。
./nginx -s reload
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nginx訪問(wèn)控制與參數(shù)調(diào)優(yōu)的方法
這篇文章主要介紹了Nginx訪問(wèn)控制與參數(shù)調(diào)優(yōu)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03
利用nginx與ffmpeg搭建流媒體服務(wù)器過(guò)程詳解
這篇文章主要給大家介紹了利用nginx與ffmpeg搭建流媒體服務(wù)器的全過(guò)程,文中介紹的很詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-03-03
Nginx配置檢測(cè)服務(wù)狀態(tài)的實(shí)現(xiàn)方法
這篇文章主要介紹了Nginx配置檢測(cè)服務(wù)狀態(tài)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05

