溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Nginx反向代理與負(fù)載均衡怎么配置

發(fā)布時(shí)間:2022-04-25 15:41:56 來(lái)源:億速云 閱讀:206 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹了Nginx反向代理與負(fù)載均衡怎么配置的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Nginx反向代理與負(fù)載均衡怎么配置文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。

反向代理

反向代理指的是以代理服務(wù)器接收用戶(hù)的的訪問(wèn)請(qǐng)求,代理用戶(hù)向內(nèi)部服務(wù)器重新發(fā)起請(qǐng)求,最后把內(nèi)部服務(wù)器的響應(yīng)信息返回給用戶(hù)。這樣,代理服務(wù)器對(duì)外就表現(xiàn)為一臺(tái)服務(wù)器,而訪問(wèn)內(nèi)部服務(wù)器的客戶(hù)端用的就是代理服務(wù)器,而不是真實(shí)網(wǎng)站訪問(wèn)用戶(hù)。

為什么使用反向代理

  • 可以起到保護(hù)網(wǎng)站安全的作用,因?yàn)槿魏蝸?lái)自internet的請(qǐng)求都必須先經(jīng)過(guò)代理服務(wù)器。

  • 通過(guò)緩存靜態(tài)資源,加速web請(qǐng)求。

  • 實(shí)現(xiàn)負(fù)載均衡

反向代理例子

環(huán)境說(shuō)明

假如有ab兩個(gè)服務(wù)器。a服務(wù)器提供web資源,并且只給內(nèi)網(wǎng)訪問(wèn)。b服務(wù)器有兩塊網(wǎng)卡,一塊與a服務(wù)器在一個(gè)內(nèi)網(wǎng),以塊是外網(wǎng)。此時(shí),用戶(hù)c想直接訪問(wèn)a服務(wù)器是行不通的。這時(shí)就可以通過(guò)b服務(wù)器代理用戶(hù)c的請(qǐng)求去訪問(wèn)a服務(wù)器了。

hostname網(wǎng)卡ip說(shuō)明
moli-04ens33192.168.30.6內(nèi)網(wǎng)ip,代理服務(wù)器
moli-04ens37192.168.93.129外網(wǎng)ip,代理服務(wù)器
moli-05ens33192.168.30.7內(nèi)網(wǎng)服務(wù)器
  • 兩臺(tái)機(jī)器都安裝nginx

  • moli-05服務(wù)器訪問(wèn)是wordpress博客,域名blog.syushin.org

  • 虛擬機(jī)實(shí)驗(yàn)環(huán)境,就都關(guān)閉防火墻了

配置虛擬主機(jī)

moli-04機(jī)器上編輯虛擬主機(jī)配置文件,內(nèi)容如下:

[root@moli-04 extra]$ cat blog.syushin.org.conf 
server{
 listen 80;
 server_name blog.syushin.org;
 
 location / {
  proxy_pass http://192.168.30.7;
  proxy_set_header host $host;
  proxy_set_header x-real-ip $remote_addr;
  proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
 } 
}

更改hosts文件

windows上修改hosts文件,添加配置

192.168.93.129 blog.syushin.org

瀏覽器測(cè)試

Nginx反向代理與負(fù)載均衡怎么配置

訪問(wèn)地址是192.168.93.129,出現(xiàn)的界面的05機(jī)器的頁(yè)面,配置成功。

負(fù)載均衡

負(fù)載均衡的功能

  • 對(duì)用戶(hù)的訪問(wèn)請(qǐng)求進(jìn)行調(diào)度管理

  • 對(duì)用戶(hù)的訪問(wèn)請(qǐng)求進(jìn)行壓力分擔(dān)

負(fù)載均衡集群在運(yùn)行時(shí),一般是通過(guò)一個(gè)或者多個(gè)前端負(fù)載均衡器將客戶(hù)訪問(wèn)請(qǐng)求發(fā)到后端的一組服務(wù)器上。

nginx負(fù)載均衡

嚴(yán)格來(lái)說(shuō),nginx僅僅是作為nginx proxy反向代理的使用的,但是因?yàn)檫@個(gè)反向代理功能表現(xiàn)的效果是負(fù)載均衡機(jī)器的效果,因此nginx負(fù)載均衡是特殊的反向代理。

實(shí)現(xiàn)nginx負(fù)載均衡的主要組件:

nginx模塊說(shuō)明
ngx_http_proxy_moduleproxy代理模塊,用于把請(qǐng)求發(fā)送給服務(wù)器節(jié)點(diǎn)或upstream服務(wù)器池
ngx_http_upstream_module負(fù)載均衡模塊,可以實(shí)現(xiàn)網(wǎng)站的負(fù)載均衡功能及節(jié)點(diǎn)的健康檢查

upstream模塊介紹

ngx_http_upstream_module模塊支持的代理方式有proxy_pass,fastcgi_pass等,主要使用proxy_pass。

upstream模塊允許nginx定義一組或多組節(jié)點(diǎn)服務(wù)器組,使用時(shí)通過(guò)proxy_pass代理把網(wǎng)站的請(qǐng)求發(fā)送到定義好的對(duì)應(yīng)的節(jié)點(diǎn)組中。

示例:創(chuàng)建節(jié)點(diǎn)服務(wù)器池

upstream blog {
 server 192.168.30.5:80 weight=5;
 server 192.168.30.6:81 weight=10;
 server 192.168.30.7:82 weight=15;
}

upstream:創(chuàng)建節(jié)點(diǎn)服務(wù)器組的關(guān)鍵字,必須有;
blog:節(jié)點(diǎn)服務(wù)器組的名字,必須有,可自定義名字;
server:關(guān)鍵字,后面可加ip或者域名或者ip:端口,不指定端口默認(rèn)80;
weight:權(quán)重,數(shù)值越大被分配的請(qǐng)求越多。默認(rèn)為1

設(shè)置節(jié)點(diǎn)服務(wù)器的狀態(tài)值除了weight之外,還有:
max_fails:允許請(qǐng)求失敗的次數(shù)默認(rèn)為1.當(dāng)超過(guò)最大次數(shù)時(shí),返回proxy_next_upstream 模塊定義的錯(cuò)誤.
fail_timeout:max_fails次失敗后,暫停的時(shí)間。
down:表示當(dāng)前的節(jié)點(diǎn)服務(wù)器不參與負(fù)載,標(biāo)志機(jī)器永遠(yuǎn)不可用,可配合ip_hash使用
backup:其它所有的非backup機(jī)器down或者忙的時(shí)候,請(qǐng)求backup機(jī)器。所以這臺(tái)機(jī)器壓力會(huì)最輕。

使用域名的upstream

upstream blog2{
 server www.syushin.com weight=5;
 server blog.syushin.org down;
 server blog.syushin.cc backup;
}

調(diào)度算法

rr輪詢(xún)(默認(rèn)調(diào)度算法,靜態(tài)調(diào)度算法)

按客戶(hù)端請(qǐng)求順序把客戶(hù)端的請(qǐng)求逐一分配到不同的后端節(jié)點(diǎn)服務(wù)器。

wrr(權(quán)重輪詢(xún),靜態(tài)調(diào)度算法)

在rr輪詢(xún)的基礎(chǔ)上加上權(quán)重,使用該算法的時(shí)候,權(quán)重和用戶(hù)訪問(wèn)成正比,權(quán)重值越大,被轉(zhuǎn)發(fā)的請(qǐng)求就越多。
比如有30個(gè)請(qǐng)求,2臺(tái)服務(wù)器a(10.0.0.1)和b(10.0.0.2),如果希望a處理10個(gè)請(qǐng)求,b處理20個(gè)請(qǐng)求,可以這樣定義:

upstream pools{
 server 10.0.0.1 weight=1;
 server 10.0.0.2 weight=2;
}

ip_hash(靜態(tài)調(diào)度算法)

每個(gè)請(qǐng)求按客戶(hù)端ip的hash結(jié)果分配,當(dāng)新的請(qǐng)求到達(dá),先將客戶(hù)端ip通過(guò)哈希算法哈希出一個(gè)值,在隨后的分配客戶(hù)端請(qǐng)求中,客戶(hù)ip的哈希值只要相同,就會(huì)被分配到同一臺(tái)服務(wù)器。

upstream blog_pool{
 ip_hash;
 server 192.168.30.5:80;
 server 192.168.30.6:8090;
}

注意:當(dāng)使用ip_hash時(shí),不能有weight和backup。

least_conn算法

least_conn算法會(huì)根據(jù)后端服務(wù)器的連接數(shù)來(lái)覺(jué)得分配情況,哪臺(tái)服務(wù)器連接數(shù)最少就分發(fā)多的請(qǐng)求。

調(diào)度算法除了上面所列的(常用)還有很多,就不一一列舉了。

http_proxy_module模塊

http_proxy_module可以將請(qǐng)求轉(zhuǎn)發(fā)到另外一臺(tái)服務(wù)器,在反向代理中,會(huì)通過(guò)location功能匹配指定的uri,然后把收到符合匹配的uri的請(qǐng)求通過(guò)proxy_pass拋給定義好的upstream節(jié)點(diǎn)池。

http_proxy模塊參數(shù)

參數(shù)說(shuō)明
proxy_set_header設(shè)置http請(qǐng)求header項(xiàng)傳給后端服務(wù)器節(jié)點(diǎn),例如:可實(shí)現(xiàn)讓代理后端的服務(wù)器節(jié)點(diǎn)獲取訪問(wèn)客戶(hù)端用戶(hù)的真實(shí)ip地址
client_body_buffer_size用于指定客戶(hù)端請(qǐng)求主體緩沖區(qū)大小
proxy_connect_timeout表示反向代理后端節(jié)點(diǎn)服務(wù)器連接的超時(shí)時(shí)間,即發(fā)起握手等候響應(yīng)的超時(shí)時(shí)間
proxy_send_timeout表示代理后端服務(wù)器的數(shù)據(jù)回傳時(shí)間,即在規(guī)定時(shí)間內(nèi)后端服務(wù)器必須傳完所有數(shù)據(jù),否則nginx將斷開(kāi)這個(gè)連接
proxy_read_timeout設(shè)置nginx從代理的后端服務(wù)器獲取信息的時(shí)間,表示連接建立成功后,nginx等待后端服務(wù)器的響應(yīng)時(shí)間,其實(shí)是nginx已經(jīng)進(jìn)入后端的排隊(duì)之中等候處理的時(shí)間
proxy_buffer_size設(shè)置緩沖區(qū)大小,默認(rèn)該緩沖區(qū)大小等于指令proxy_buffers設(shè)置的大小
proxy_buffers設(shè)置緩沖區(qū)的數(shù)量和大小,nginx從代理的后端服務(wù)器獲取的響應(yīng)信息,會(huì)設(shè)置到緩沖區(qū)
proxy_busy_buffers_size用于設(shè)置相同很忙時(shí)可以使用的proxy_buffers大小,官方推薦的大小為 proxy_buffers * 2
proxy_trmp_file_write_size指定proxy緩存臨時(shí)文件的大小

proxy_pass使用

格式:proxy_pass url;

示例如下:

proxy_pass http://blog.syushin.com/;
proxy_pass http://192.168.30.7:8080/uri;
proxy_pass http://tmp/www.sock;

url可以是域名,ip地址也可以是socket文件。

對(duì)于proxy_pass的配置有幾點(diǎn)需要注意:
示例1

location /upload/ {
    proxy_pass http://192.168.30.7;
}

示例2

location /upload/ {
    proxy_pass http://192.168.30.7/; # 注意多了一個(gè)斜桿
}

示例3

location /upload/ {
    proxy_pass http://192.168.30.7/blog/;
}

示例4

location /upload/ {
    proxy_pass http://192.168.30.7/blog;
}

假如server_name為blog.syushin.com,當(dāng)請(qǐng)求http://blog.syushin.com/uploa...,上面示例1-4的請(qǐng)求結(jié)果是:

示例1:http://192.168.30.7/upload/index.html
示例2:http://192.168.30.7/index.html
示例3:http://192.168.30.7/blog/index.html
示例4:http://192.168.30.7/blogindex.html

關(guān)于“Nginx反向代理與負(fù)載均衡怎么配置”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Nginx反向代理與負(fù)載均衡怎么配置”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI