一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文詳解Nginx負(fù)載均衡

馬哥Linux運(yùn)維 ? 來源:博客園 ? 2025-06-25 14:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Nginx作為負(fù)載均衡器,通過將請(qǐng)求分發(fā)到多個(gè)后端服務(wù)器,以提高性能、可靠性和擴(kuò)展性。支持多種負(fù)載均衡算法,如輪詢、最小連接數(shù)、IP哈希等,可以根據(jù)需求選擇適合的算法。

一、工作原理

nginx的高性能主要是因?yàn)?/p>

1、事件驅(qū)動(dòng)架構(gòu)

Nginx采用事件驅(qū)動(dòng)的非阻塞方式處理請(qǐng)求,主要利用了操作系統(tǒng)提供的多路復(fù)用機(jī)制,通過異步非阻塞的方式處理大量并發(fā)請(qǐng)求,減少了線程切換和資源消耗,提高了并發(fā)處理能力和系統(tǒng)的穩(wěn)定性。

2、事件循環(huán)

事件循環(huán)機(jī)制是核心的工作模式之一。它通過單線程的方式處理事件,包括等待事件、處理事件和繼續(xù)循環(huán)。在等待事件時(shí),Nginx并不會(huì)像傳統(tǒng)多線程模型那樣阻塞等待,而是通過事件通知機(jī)制在有事件發(fā)生時(shí)再進(jìn)行處理,這樣可以充分利用CPU資源,提升系統(tǒng)的效率和性能。

3、多進(jìn)程

Nginx可以通過配置文件中的worker_processes選項(xiàng)來啟動(dòng)多個(gè)進(jìn)程來處理請(qǐng)求。每個(gè)進(jìn)程都有自己獨(dú)立的事件循環(huán)和資源管理,進(jìn)程之間沒有共享狀態(tài),這種設(shè)計(jì)可以避免單點(diǎn)故障,提高系統(tǒng)的可靠性和穩(wěn)定性。并且Nginx的多進(jìn)程模型使得它能夠更好地利用多核CPU,通過并行處理請(qǐng)求來提高整體的處理能力。

二、反向代理

server {
  listen 80; 
  server_name example.com; 
  root /root/build/;#靜態(tài)資源地址
  index index.html;  

  location /api/server/ {
    proxy_pass http://localhost:8080;
    proxy_set_header Host$host;
    proxy_set_header X-Real-IP$remote_addr;
    proxy_set_header X-Forwarded-For
  }
}

例如在這個(gè)例子中,設(shè)置了index目錄和靜態(tài)資源目錄。并且設(shè)置了域名訪問。很大了保證了服務(wù)器的安全性。在下面的反向代理配置中,通過正則表達(dá)式將/api/server/開頭的映射到http://localhost:8080這個(gè)地址。

ec2666c8-4dba-11f0-b715-92fbcf53809c.pngwhiteboard_exported_image.png

三、負(fù)載均衡

負(fù)載均衡也就是通過反向代理到不同的服務(wù),保證服務(wù)的可用性。多用于在分布式系統(tǒng)中。例如某個(gè)系統(tǒng)分布在100個(gè)服務(wù)器上,當(dāng)某幾臺(tái)服務(wù)器崩潰時(shí),會(huì)代理到其他服務(wù)器,不會(huì)影響系統(tǒng)的運(yùn)行。更好的實(shí)現(xiàn)橫向擴(kuò)展。

例如一個(gè)簡(jiǎn)單的get請(qǐng)求代碼

importtornado.ioloop
importtornado.web

classMainHandler(tornado.web.RequestHandler):
 defget(self):
   self.write("Hello, Tornado!")

defmake_app():
 returntornado.web.Application([
    (r"/", MainHandler),
  ])

if__name__ =="__main__":
  app = make_app()
  app.listen(8888)
 print("Server running on http://localhost:8888")
  tornado.ioloop.IOLoop.current().start()

具體的負(fù)載均衡算法

1、輪詢

nginx的均衡默認(rèn)算法:直接基于事件循環(huán)。類似于排隊(duì),一個(gè)一個(gè)來,例如第一個(gè)請(qǐng)求分發(fā)給第一個(gè)服務(wù),第二個(gè)就分發(fā)給第二個(gè)服務(wù),以此類推。缺點(diǎn):沒有具體情況具體分析,某些情況下的請(qǐng)求會(huì)導(dǎo)致負(fù)載很高。

upstream tornado_servers {
  server 192.168.31.158:8888;
  server localhost:8888;
}

server {
  listen 80;
  server_name 192.168.62.132;

  location / {
    proxy_pass http://tornado_servers;
    proxy_set_header Host$host;
    proxy_set_header X-Real-IP$remote_addr;
  }
  location /nginx_status {
  stub_status on;
  access_log off;
  allow 192.168.62.0/24; # 允許訪問的IP地址,根據(jù)需要調(diào)整
  deny all;    # 禁止其他IP地址訪問
  }  
}

將上述訪問運(yùn)行在兩個(gè)不同的服務(wù)器上,默認(rèn)的輪詢會(huì)每個(gè)服務(wù)器都請(qǐng)求一次,除非有一臺(tái)掉線,否則nginx會(huì)均分請(qǐng)求。

下面行的localhost塊b表示新的匹配規(guī)則,用于查看nginx當(dāng)前的連接數(shù)和請(qǐng)求統(tǒng)計(jì)信息。

server accepts handled requests

Active connections: 1

表示當(dāng)前活躍的連接數(shù),即正在與Nginx服務(wù)器建立通信的客戶端連接數(shù)量。

server accepts handled requests

accepts: 表示Nginx已經(jīng)接受的連接總數(shù)。

handled: 表示Nginx已經(jīng)處理的連接總數(shù)。

requests: 表示Nginx已經(jīng)處理的請(qǐng)求總數(shù)。

Reading: 0 Writing: 1 Waiting: 0

Reading: 正在讀取客戶端請(qǐng)求的數(shù)量。

Writing: 正在向客戶端發(fā)送響應(yīng)的數(shù)量。

Waiting: 當(dāng)前空閑的客戶端連接數(shù),等待處理請(qǐng)求

2、最少連接

會(huì)將請(qǐng)求分配給連接最少的服務(wù),保證系統(tǒng)的整體性能。缺點(diǎn)是沒有具體情況具體分析,沒有考慮負(fù)載情況,不是請(qǐng)求越多負(fù)載越大。

upstream tornado_servers {
  least_conn; # 使用最少連接數(shù)算法
  server192.168.31.158:8888;
  server localhost:8888;
}

server {
 listen80;
  server_name192.168.62.132; 

  location / {
    proxy_pass http://tornado_servers;
    proxy_set_header Host$host;
    proxy_set_header X-Real-IP$remote_addr;
  }
}

least_conn字段表示使用最少連接算法。

3、IP哈希

通過客戶端的IP地址的哈希值分配給特定的服務(wù)器,如果下一次請(qǐng)求的IP哈希值與之前一樣,那么依然會(huì)請(qǐng)求到之前的服務(wù)器。如果不一樣那么為新的服務(wù)器創(chuàng)建新的哈希值。這樣避免了服務(wù)器的切換開銷,保持了會(huì)話的一致性。但是這樣的缺點(diǎn)是同一個(gè)客戶端的請(qǐng)求無法做到負(fù)載均衡。

upstream tornado_servers {
  ip_hash; # 使用IP哈希算法
  server 192.168.31.158:8888;
  server localhost:8888;
}

server {
  listen 80;
  server_name 192.168.62.132; 

  location / {
    proxy_pass http://tornado_servers;
    proxy_set_header Host$host;
    proxy_set_header X-Real-IP$remote_addr;
  }
  location /nginx_status {
  stub_status on;
  access_log off;
  allow 192.168.62.0/24; # 允許訪問的IP地址,根據(jù)需要調(diào)整
  deny all;    # 禁止其他IP地址訪問
  }
}

4、加權(quán)輪詢

在輪詢的基礎(chǔ)上為每個(gè)服務(wù)器加上一個(gè)權(quán)重值,每個(gè)服務(wù)器的承受連接數(shù)量。在輪詢的情況下再次考慮權(quán)重值。例如兩臺(tái)服務(wù)器,服務(wù)器A、B的權(quán)重分別為5,3輪詢流程為:

第一次請(qǐng)求:服務(wù)器A處理請(qǐng)求

第二次請(qǐng)求:服務(wù)器B處理請(qǐng)求

第三次請(qǐng)求:服務(wù)器A處理請(qǐng)求

第四次請(qǐng)求:服務(wù)器A處理請(qǐng)求

第五次請(qǐng)求:服務(wù)器A處理請(qǐng)求

第六次請(qǐng)求:服務(wù)器B處理請(qǐng)求

upstream tornado_servers {
  server 192.168.31.158:8888 weight=5;
  server localhost:8888 weight=3;
}

server {
  listen 80;
  server_name 192.168.62.132;

  location / {
    proxy_pass http://tornado_servers;
    proxy_set_header Host$host;
    proxy_set_header X-Real-IP$remote_addr;
  }
  location /nginx_status {
  stub_status on;
  access_log off;
  allow 192.168.62.0/24; # 允許訪問的IP地址,根據(jù)需要調(diào)整
  deny all;    # 禁止其他IP地址訪問
  }
}

5、加權(quán)最小連接

在最小連接的算法基礎(chǔ)上,加上權(quán)重值。這時(shí)候需要根據(jù)連接數(shù)量和權(quán)重值來評(píng)估目標(biāo)服務(wù)器。

例如服務(wù)器A、B、C。權(quán)重值分別為5、3、2。連接數(shù)分別為10、5、3.

計(jì)算加權(quán)連接數(shù):

服務(wù)器A:10/5=2

服務(wù)器B:5/3=1.67

服務(wù)器C:3/2=1.5

那么根據(jù)加權(quán)連接數(shù),最小加權(quán)連接數(shù)為1.5。那么會(huì)代理到服務(wù)器C

upstream tornado_servers {
  least_conn; # 使用最少連接數(shù)算法
  server 192.168.31.158:8888 weight=5;
  server localhost:8888 weight=3;
}

server {
  listen 80;
  server_name 192.168.62.132;

  location / {
    proxy_pass http://tornado_servers;
    proxy_set_header Host$host;
    proxy_set_header X-Real-IP$remote_addr;
  }
  location /nginx_status {
  stub_status on;
  access_log off;
  allow 192.168.62.0/24; # 允許訪問的IP地址,根據(jù)需要調(diào)整
  deny all;    # 禁止其他IP地址訪問
  }
}

四、總結(jié)

反向代理就像是位于用戶和真實(shí)服務(wù)器之間的一座橋梁,它接收用戶的請(qǐng)求并將其轉(zhuǎn)發(fā)到后端的多臺(tái)服務(wù)器上。這種配置不僅隱藏了真實(shí)服務(wù)器的信息,還能提供安全性和負(fù)載均衡功能。負(fù)載均衡通過智能地分發(fā)請(qǐng)求到不同的服務(wù)器,確保每臺(tái)服務(wù)器的負(fù)載相對(duì)平衡,從而提高整體性能和可靠性。這種結(jié)合能夠有效地處理高并發(fā)請(qǐng)求,保證系統(tǒng)在壓力下仍能保持穩(wěn)定運(yùn)行。

鏈接:https://www.cnblogs.com/changwan/p/18246095

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    13

    文章

    9749

    瀏覽量

    87547
  • nginx
    +關(guān)注

    關(guān)注

    0

    文章

    168

    瀏覽量

    12537
  • 負(fù)載均衡器
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    2666

原文標(biāo)題:手把手教程:10分鐘快速搭建Nginx負(fù)載均衡環(huán)境

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    高性能負(fù)載均衡Tomcat集群的實(shí)現(xiàn)

    Nginx+Tomcat搭建高性能負(fù)載均衡集群
    發(fā)表于 08-21 14:31

    使用nginx實(shí)現(xiàn)tomcat負(fù)載均衡

    Nginx+tomcat+memcached實(shí)現(xiàn)負(fù)載均衡及session(交叉存儲(chǔ))
    發(fā)表于 08-28 08:52

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

    nginx實(shí)現(xiàn)負(fù)載均衡
    發(fā)表于 05-04 13:42

    16nginx+keepalived +zuul如何實(shí)現(xiàn)高可用及負(fù)載均衡

    學(xué)習(xí)筆記微服務(wù)-16 nginx+keepalived +zuul 實(shí)現(xiàn)高可用及負(fù)載均衡
    發(fā)表于 05-22 10:16

    Nginx和Tomcat負(fù)載均衡實(shí)現(xiàn)session共享

    Nginx和Tomcat負(fù)載均衡實(shí)現(xiàn)session共享
    發(fā)表于 09-05 10:40 ?9次下載
    <b class='flag-5'>Nginx</b>和Tomcat<b class='flag-5'>負(fù)載</b><b class='flag-5'>均衡</b>實(shí)現(xiàn)session共享

    構(gòu)建實(shí)戰(zhàn):Nginx+IIS構(gòu)筑Web服務(wù)器集群負(fù)載均衡

    構(gòu)建實(shí)戰(zhàn):Nginx+IIS構(gòu)筑Web服務(wù)器集群負(fù)載均衡
    發(fā)表于 09-05 10:56 ?4次下載
    構(gòu)建實(shí)戰(zhàn):<b class='flag-5'>Nginx</b>+IIS構(gòu)筑Web服務(wù)器集群<b class='flag-5'>負(fù)載</b><b class='flag-5'>均衡</b>

    f5負(fù)載均衡Nginx負(fù)載均衡有什么區(qū)別

    負(fù)載均衡是分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)行執(zhí)行,建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,提供了種廉價(jià)有效透明的方法擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。市場(chǎng)上有很多的
    發(fā)表于 01-01 18:41 ?9341次閱讀
    f5<b class='flag-5'>負(fù)載</b><b class='flag-5'>均衡</b>和<b class='flag-5'>Nginx</b><b class='flag-5'>負(fù)載</b><b class='flag-5'>均衡</b>有什么區(qū)別

    路由器負(fù)載均衡如何設(shè)置_路由器負(fù)載均衡的模式詳解

    在路由器中加入負(fù)載均衡技術(shù)已經(jīng)不是新鮮事。那么現(xiàn)在已經(jīng)衍生出很多種路由負(fù)載模式,不同的模式狀態(tài)下,可以完成不同的任務(wù)。而且模式間也可以進(jìn)行轉(zhuǎn)化和結(jié)合。下面詳細(xì)介紹路由器負(fù)載
    發(fā)表于 01-01 19:43 ?4w次閱讀
    路由器<b class='flag-5'>負(fù)載</b><b class='flag-5'>均衡</b>如何設(shè)置_路由器<b class='flag-5'>負(fù)載</b><b class='flag-5'>均衡</b>的模式<b class='flag-5'>詳解</b>

    超詳細(xì)!使用 LVS 實(shí)現(xiàn)負(fù)載均衡原理及安裝配置詳解

    負(fù)載均衡集群是 load balance 集群的簡(jiǎn)寫,翻譯成中文就是負(fù)載均衡集群。常用的負(fù)載均衡
    發(fā)表于 01-21 14:01 ?1403次閱讀

    讀懂Nginx、Apache工作原理

    在高并發(fā)連接的情況下,Nginx是Apache服務(wù)器不錯(cuò)的替代品。Nginx同時(shí)也可以作為7層負(fù)載均衡服務(wù)器來使用。根據(jù)我的測(cè)試結(jié)果,Nginx
    發(fā)表于 04-26 11:33 ?2603次閱讀

    詳解Nginx負(fù)載均衡配置誤區(qū)

    之前有很多朋友問關(guān)于Nginx的upstream模塊中max_fails及fail_timeout,這兩個(gè)指令,分別是配置關(guān)于負(fù)載均衡過程中,對(duì)于上游(后端)服務(wù)器的失敗嘗試次數(shù)和不可用時(shí)間,很多人
    的頭像 發(fā)表于 05-13 14:36 ?1991次閱讀
    <b class='flag-5'>詳解</b><b class='flag-5'>Nginx</b><b class='flag-5'>負(fù)載</b><b class='flag-5'>均衡</b>配置誤區(qū)

    聊聊Nginx作為負(fù)載均衡器它支持的算法都有哪些?

    Nginx作為款最流行WEB服務(wù)器軟件,同時(shí)也是款反向代理和負(fù)載均衡軟件。毫不夸張地說,Nginx
    的頭像 發(fā)表于 02-14 17:50 ?971次閱讀

    如何使用Nginx作為應(yīng)用程序的負(fù)載均衡器?

    Nginx因其高性能和可擴(kuò)展性而廣受歡迎。它是排名第的開源Web 服務(wù)器。在本教程中,我們將學(xué)習(xí)如何使用Nginx作為應(yīng)用程序的負(fù)載均衡
    的頭像 發(fā)表于 03-23 14:52 ?1329次閱讀

    搭建Keepalived+Lvs+Nginx高可用集群負(fù)載均衡

    ? 、Nginx安裝 二、配置反向代理 三、配置負(fù)載均衡 四、upstream指令參數(shù) 五、配置ssl證書提供https訪問 六、配置ha ngi
    的頭像 發(fā)表于 06-25 15:39 ?3610次閱讀
    搭建Keepalived+Lvs+<b class='flag-5'>Nginx</b>高可用集群<b class='flag-5'>負(fù)載</b><b class='flag-5'>均衡</b>

    nginx負(fù)載均衡配置介紹

    代理 安裝Keepalived 配置Keepalived 編寫腳本監(jiān)控Keepalived和nginx的狀態(tài) 配置keepalived加入監(jiān)控腳本的配置 nginx負(fù)載均衡介紹
    的頭像 發(fā)表于 11-10 13:39 ?689次閱讀
    <b class='flag-5'>nginx</b><b class='flag-5'>負(fù)載</b><b class='flag-5'>均衡</b>配置介紹