<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Nginx 除了負載均衡,還能做什么?

          共 10594字,需瀏覽 22分鐘

           ·

          2021-04-06 20:00


          上一篇:3600萬中國人在抖音“上清華”

          作者:jitwxs
          鏈接:https://jitwxs.cn/90f4b8f6.html

          本文只針對 Nginx 在不加載第三方模塊的情況能處理哪些事情,由于第三方模塊太多所以也介紹不完,當然本文本身也可能介紹的不完整,畢竟只是我個人使用過和了解到過的。

          Nginx能做什么

          • 反向代理
          • 負載均衡
          • HTTP 服務(wù)器(包含動靜分離)
          • 正向代理

          以上就是我了解到的 Nginx 在不依賴第三方模塊能處理的事情,下面詳細說明每種功能怎么做。

          反向代理

          反向代理應(yīng)該是 Nginx 做的最多的一件事了,什么是反向代理呢,以下是百度百科的說法:反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受 internet 上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給 internet 上請求連接的客戶端,此時代理服務(wù)器對外就表現(xiàn)為一個反向代理服務(wù)器。

          簡單來說就是真實的服務(wù)器不能直接被外部網(wǎng)絡(luò)訪問,所以需要一臺代理服務(wù)器,而代理服務(wù)器能被外部網(wǎng)絡(luò)訪問的同時又跟真實服務(wù)器在同一個網(wǎng)絡(luò)環(huán)境,當然也可能是同一臺服務(wù)器,端口不同而已。下面貼上一段簡單的實現(xiàn)反向代理的代碼:

          server {    
              listen       80;                                                           
              server_name  localhost;                                                 
              client_max_body_size 1024M;  
            
              location / {  
                  proxy_pass http://localhost:8080;  
                  proxy_set_header Host $host:$server_port;  
              }  
          }  

          保存配置文件后啟動 Nginx,這樣當我們訪問 localhost 的時候,就相當于訪問 localhost:8080 了。

          負載均衡

          負載均衡也是 Nginx 常用的一個功能,負載均衡其意思就是分攤到多個操作單元上進行執(zhí)行,例如 Web 服務(wù)器、FTP 服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器等,從而共同完成工作任務(wù)。

          簡單而言就是當有2臺或以上服務(wù)器時,根據(jù)規(guī)則隨機的將請求分發(fā)到指定的服務(wù)器上處理,負載均衡配置一般都需要同時配置反向代理,通過反向代理跳轉(zhuǎn)到負載均衡。

          Nginx 目前支持自帶3種負載均衡策略,還有2種常用的第三方策略。


          RR(默認)

          每個請求按時間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動剔除。

          upstream test {  
              server localhost:8080;  
              server localhost:8081;  
          }  
          server {  
              listen       81;                                                           
              server_name  localhost;                                                 
              client_max_body_size 1024M;  
            
              location / {  
                  proxy_pass http://test;  
                  proxy_set_header Host $host:$server_port;  
              }  
          }  

          負載均衡的核心代碼為:

          upstream test {  
              server localhost:8080;  
              server localhost:8081;  
          }  

          這里我配置了2臺服務(wù)器,當然實際上是一臺,只是端口不一樣而已,而 8081 的服務(wù)器是不存在的,也就是說訪問不到,但是我們訪問 http://localhost 的時候,也不會有問題,會默認跳轉(zhuǎn)到 http://localhost:8080 具體是因為Nginx會自動判斷服務(wù)器的狀態(tài),如果服務(wù)器處于不能訪問(服務(wù)器掛了),就不會跳轉(zhuǎn)到這臺服務(wù)器,所以也避免了一臺服務(wù)器掛了影響使用的情況,由于Nginx默認是RR策略,所以我們不需要其他更多的設(shè)置。

          權(quán)重

          指定輪詢幾率,weight 和訪問比率成正比,用于后端服務(wù)器性能不均的情況。例如

          upstream test {  
              server localhost:8080 weight=9;  
              server localhost:8081 weight=1;  
          }  

          那么10次一般只會有1次會訪問到8081,而有9次會訪問到8080。另外,關(guān)注公眾號互聯(lián)網(wǎng)架構(gòu)師,在后臺回復(fù):2T,可以獲取我整理的 Java 系列面試題和答案,非常齊全。

          ip_hash

          上面的2種方式都有一個問題,那就是下一個請求來的時候請求可能分發(fā)到另外一個服務(wù)器,當我們的程序不是無狀態(tài)的時候(采用了 session 保存數(shù)據(jù)),這時候就有一個很大的很問題了,比如把登錄信息保存到了session 中,那么跳轉(zhuǎn)到另外一臺服務(wù)器的時候就需要重新登錄了,所以很多時候我們需要一個客戶只訪問一個服務(wù)器,那么就需要用 iphash 了,iphash 的每個請求按訪問 ip 的 hash 結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器,可以解決 session 的問題。

          upstream test {  
              ip_hash;  
              server localhost:8080;  
              server localhost:8081;  
          }  
          fair(第三方)

          按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配。

          upstream backend {   
              fair;   
              server localhost:8080;  
              server localhost:8081;  
          }  
          url_hash(第三方)

          按訪問 url 的hash結(jié)果來分配請求,使每個 url 定向到同一個后端服務(wù)器,后端服務(wù)器為緩存時比較有效。在 upstream 中加入 hash 語句,server 語句中不能寫入 weight 等其他的參數(shù),hash_method 是使用的 hash 算法

          upstream backend {   
              hash $request_uri;   
              hash_method crc32;   
              server localhost:8080;  
              server localhost:8081;  
          }  

          以上5種負載均衡各自適用不同情況下使用,所以可以根據(jù)實際情況選擇使用哪種策略模式,不過 fair 和 url_hash 需要安裝第三方模塊才能使用,由于本文主要介紹 Nginx 能做的事情,所以 Nginx 安裝第三方模塊不會再本文介紹。

          HTTP服務(wù)器

          Nginx 本身也是一個靜態(tài)資源的服務(wù)器,當只有靜態(tài)資源的時候,就可以使用 Nginx 來做服務(wù)器,同時現(xiàn)在也很流行動靜分離,就可以通過 Nginx 來實現(xiàn),首先看看 Nginx 做靜態(tài)資源服務(wù)器。

          server {  
              listen  80;                                                           
              server_name  localhost;                                                 
              client_max_body_size 1024M;  
                
              location / {  
                  root   e:\wwwroot;  
                  index  index.html;  
              }  
          }  

          這樣如果訪問 http://localhost 就會默認訪問到 E 盤 wwwroot目錄下面的 index.html,如果一個網(wǎng)站只是靜態(tài)頁面的話,那么就可以通過這種方式來實現(xiàn)部署。

          動靜分離

          動靜分離是讓動態(tài)網(wǎng)站里的動態(tài)網(wǎng)頁根據(jù)一定規(guī)則把不變的資源和經(jīng)常變的資源區(qū)分開來,動靜資源做好了拆分以后,我們就可以根據(jù)靜態(tài)資源的特點將其做緩存操作,這就是網(wǎng)站靜態(tài)化處理的核心思路

          upstream test{    
             server localhost:8080;    
             server localhost:8081;    
          }     
            
          server {    
              listen       80;    
              server_name  localhost;    
            
              location / {    
                  root   e:\wwwroot;    
                  index  index.html;    
              }    
            
              # 所有靜態(tài)請求都由nginx處理,存放目錄為html    
              location ~ \.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {    
                  root    e:\wwwroot;    
              }    
            
              # 所有動態(tài)請求都轉(zhuǎn)發(fā)給tomcat處理    
              location ~ \.(jsp|do)$ {    
                  proxy_pass  http://test;    
              }    
            
              error_page   500 502 503 504  /50x.html;    
              location = /50x.html {    
                  root   e:\wwwroot;    
              }    
          }  

          這樣我們就可以把 HTML 以及圖片和 css 以及 js 放到 wwwroot 目錄下,而tomcat只負責處理 jsp 和請求,例如當我們后綴為 gif 的時候,Nginx 默認會從 wwwroot 獲取到當前請求的動態(tài)圖文件返回,當然這里的靜態(tài)文件跟 Nginx 是同一臺服務(wù)器,我們也可以在另外一臺服務(wù)器,然后通過反向代理和負載均衡配置過去就好了,只要搞清楚了最基本的流程,很多配置就很簡單了,另外 localtion 后面其實是一個正則表達式,所以非常靈活。

          正向代理

          正向代理,意思是一個位于客戶端和原始服務(wù)器(origin server)之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶端向代理發(fā)送一個請求并指定目標(原始服務(wù)器),然后代理向原始服務(wù)器轉(zhuǎn)交請求并將獲得的內(nèi)容返回給客戶端,客戶端才能使用正向代理。

          resolver 114.114.114.114 8.8.8.8;  
          server {  
            
              resolver_timeout 5s;  
            
              listen 81;  
            
              access_log  e:\wwwroot\proxy.access.log;  
              error_log   e:\wwwroot\proxy.error.log;  
            
              location / {  
                  proxy_pass http://$host$request_uri;  
              }  
          }  

          resolver 是配置正向代理的 DNS 服務(wù)器,listen 是正向代理的端口,配置好了就可以在 IE 上面或者其他代理插件上面使用服務(wù)器 ip+端口號進行代理了。

          最后說兩句

          啟動停止及配置文件位置的命令:

          /etc/init.d/nginx start/restart # 啟動/重啟Nginx服務(wù)  
            
          /etc/init.d/nginx stop # 停止Nginx服務(wù)  
            
          /etc/nginx/nginx.conf # Nginx配置文件位置  
          Nginx 是支持熱啟動的,也就是說當我們修改配置文件后,不用關(guān)閉 Nginx,就可以實現(xiàn)讓配置生效,Nginx 重新讀取配置的命令是 nginx -s reload
          看完這篇文章,你有什么收獲?歡迎在留言區(qū)與10w+Java開發(fā)者一起討論~

          關(guān)注微信公眾號:互聯(lián)網(wǎng)架構(gòu)師,在后臺回復(fù):2T,可以獲取我整理的教程,都是干貨。


          猜你喜歡

          1、GitHub 標星 3.2w!史上最全技術(shù)人員面試手冊!FackBoo發(fā)起和總結(jié)

          2、如何才能成為優(yōu)秀的架構(gòu)師?

          3、從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧

          4、程序員一般可以從什么平臺接私活?

          5、37歲程序員被裁,120天沒找到工作,無奈去小公司,結(jié)果懵了...

          6、滴滴業(yè)務(wù)中臺構(gòu)建實踐,首次曝光

          7、不認命,從10年流水線工人,到谷歌上班的程序媛,一位湖南妹子的勵志故事

          8、15張圖看懂瞎忙和高效的區(qū)別

          9、2T架構(gòu)師學(xué)習資料干貨分享


          瀏覽 75
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产做受 cos | 一级片官网| 亚洲黄片免费在线观看 | 破小嫩苟一区二区三区 | 亚洲无码第一页 |