激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - Nginx - 深入理解Nginx及使用Nginx實現負載均衡

深入理解Nginx及使用Nginx實現負載均衡

2021-06-01 01:32Java架構學習交流 Nginx

正向代理是代理客戶端,也就是客戶端能真正接觸到的,比如訪問外網時需要使用VPN軟件,在這個軟件中用戶可以選擇連接哪里的服務器。

前言

最近在部署項目時要求實現負載均衡,有趣的是發現網上一搜全部都是以下類似的配置文件

  1. upstream localhost{ 
  2.  server 127.0.0.1:8080 weight=1; 
  3.  server 127.0.0.1:8081 weight=1; 
  4.  } 
  5.  server { 
  6.  listen 80; 
  7.  server_name localhost; 
  8.  location / { 
  9.  proxy_pass http://localhost; 
  10.  index index.html index.htm index.jsp; 
  11.   
  12.  } 
  13.  } 

所以打算來看看Nginx內部原理,這篇博客主要介紹Nginx如何實現反向代理以及在Nginx中負載均衡的參數使用

一、正向代理與反向代理

正向代理是代理客戶端,也就是客戶端能真正接觸到的,比如訪問外網時需要使用VPN軟件,在這個軟件中用戶可以選擇連接哪里的服務器。

反向代理則是代理服務端,用戶感知不到,只是客戶端把請求發到服務端的端口時,Nginx監聽到了便把該端口的請求轉發到不同的服務器上。就以上面配置文件來講解,當在網址中輸入http://localhost:80/時(不加80一樣時默認進入80端口,這里為了表示清楚),而后Nginx監聽到80端口的請求之后,就會查找對應的location來執行。由上面的配置文件我們可以看出是將請求轉發到了不同的端口。這是在服務器中執行的,用戶不可見。

而服務端中我們最常使用的反向代理的工具就是Nginx。

二、Nginx內部基本架構

nginx在啟動后以daemon的方式在后臺運行,會有一個master進程和多個worker進程。

master進程:主要用來管理worker進程,包含:接收來自外界的信號,向各worker進程發送信號,監控worker進程的運行狀態,當worker進程退出后(異常情況下),會自動重新啟動新的worker進程。

worker進程:處理基本的網絡事件了。多個worker進程之間是對等的,他們同等競爭來自客戶端的請求,各進程互相之間是獨立的。一個請求,只可能在一個worker進程中處理,一個worker進程,不可能處理其它進程的請求。worker進程的個數是可以設置的,一般我們會設置與機器cpu核數一致,或者直接設置參數worker_processes auto;

深入理解Nginx及使用Nginx實現負載均衡

所以Nginx基本的架構就如下:

深入理解Nginx及使用Nginx實現負載均衡

當我們輸入./nginx -s reload,就是來重啟nginx,./nginx -s stop,就是來停止nginx的運行,這里面是如何做到的?執行命令時,我們是啟動一個新的nginx進程,而新的nginx進程在解析到reload參數后,就知道我們的目的是控制nginx來重新加載配置文件了,它會向master進程發送信號。master進程在接到信號后,會先重新加載配置文件,然后再啟動新的worker進程,并向所有老的worker進程發送信號,告訴他們可以光榮退休了。新的worker在啟動后,就開始接收新的請求,而老的worker在收到來自master的信號后,就不再接收新的請求,并且在當前進程中的所有未處理完的請求處理完成后,再退出。所以使用上面命令重啟Nginx的時候服務是不中斷的。

三、Nginx如何處理客戶端請求

首先來解釋一下上面的架構圖:每個worker進程都是從master進程分支過來的,在master進程里面,先建立好需要監聽的socket之后,然后再分支出多個worker進程。所有worker進程的listenfd(socket中listenfd是指客戶端連接本機時的fd,是用來和客戶端通信用的)會在新連接到來時變得可讀,為保證只有一個進程處理該連接,所有worker進程在注冊listenfd讀事件前搶accept_mutex,搶到互斥鎖的那個進程注冊listenfd讀事件,在讀事件里調用accept接受該連接。

在Nginx中worker進程之間是平等的,每個進程,處理請求的機會也是一樣的。當Nginx監聽80端口時,一個客戶端的連接請求過來,每個進程都有可能處理這個連接,上面說到是每個worker進程都會去搶注listenfd讀事件。當一個worker進程在accept這個連接之后,就開始讀取請求,解析請求,處理請求,產生數據后,再返回給客戶端,最后才斷開連接,這樣一個完整的請求就是這樣的了。這里需要注意的是一個請求,完全由worker進程來處理,而且只在一個worker進程中處理。

下面兩幅流程圖能很好的幫我們理解

深入理解Nginx及使用Nginx實現負載均衡
深入理解Nginx及使用Nginx實現負載均衡

四、Nginx如何處理事件并且實現高并發

Nginx內部采用了異步非阻塞的方式來處理請求,也就是說,Nginx是可以同時處理成千上萬個請求的。

異步非阻塞:當一個網絡請求過來時,我們并不依賴于這個請求才能做后續操作,那么這個請求就是異步操作,也就是調用者在沒有得到結果之前同樣可以執行后續的操作。非阻塞就是當前進程/線程沒有得到請求調用的結果時也不會妨礙到進程/線程后續的操作。可以看出異步和非阻塞的對象是不同的。

五、Nginx負載均衡的算法及參數

round robin(默認):輪詢方式,依次將請求分配到后臺各個服務器中,適用于后臺機器性能一致的情況,若服務器掛掉,可以自動從服務列表中剔除

weight:根據權重來分發請求到不同服務器中,可以理解為比例分發,性能較高服務器分多點請求,較低的則分少點請求

IP_hash:根據請求者ip的hash值將請求發送到后臺服務器中,保證來自同一ip的請求被轉發到固定的服務器上,解決session問題

  1. upstream localhost {  
  2. ip_hash;  
  3. server 127.0.0.1:8080;  
  4. server 127.0.0.1:8080;  
  5. }  

上面是最基本的三種算法,我們還可以通過改變參數來自行配置負載均衡

  1. upstream localhost{  
  2. ip_hash;  
  3. server 127.0.0.1:9090 down;  
  4. server 127.0.0.1:8080 weight=2;  
  5. server 127.0.0.1:6060;  
  6. server 127.0.0.1:7070 backup;  

參數列表如下:

深入理解Nginx及使用Nginx實現負載均衡

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 成人免费毛片在线观看 | 91精品免费在线 | 国产精品视频导航 | 欧美日韩在线看片 | 久久精品视频1 | 久久精品女人天堂av | 色婷婷久久久久久 | 国产一级伦理片 | 亚洲精品一区二区三区在线看 | 国产亚洲精品yxsp | av电影观看 | 成人小视频在线播放 | av在线大全| 一级在线免费观看视频 | 91免费在线看片 | 日韩视频一二区 | 综合97 | 在线看91| 91久久国产露脸精品国产 | www.7777在线| 嫩草影院在线观看网站成人 | 国产青青 | 日韩精品久久久久久久九岛 | 亚洲成人激情在线 | 免费黄色大片在线观看 | 九九热免费观看 | 草草久久久| 毛片一级网站 | 91精品国产91热久久久做人人 | 国产亚洲精品久久久久5区 日韩一级片一区二区三区 国产精品久久久久av | 国产在线精品区 | 久久精品片 | 香蕉久久久精品 | 操皮视频 | 久久精品国产久精国产 | 国产午夜精品在线 | 国产精品999在线观看 | 在线a毛片免费视频观看 | 国产成人av免费观看 | 久久精品国产亚洲aa级女大片 | 有兽焉免费动画 |