Nginx服務器 之反向代理與負載均衡


一、反向代理

正向代理:

客戶端要獲取的資源就在服務器上,客戶端請求的資源路徑就是最終響應資源的服務器路徑,這就是正向代理。正向代理的特點:就是我們明確知道要訪問哪個網站地址。

反向代理:

 

客戶端想獲取服務器集群中(服務1,服務2,服務3 他們的資源相同)中的資源,但是客戶端無法與該服務器集群建立連接,但我們可以與另一台服務器(代理服務器)建立連接且該服務器能獲取服務器集群中的資源。這個時候客戶端就可以通過請求代理服務器,獲取想要的資源,但客戶端並不知道給他資源的是哪個服務器。這種方式就是反向代理。

二、負載均衡

  當一台服務器的單位時間內的訪問量越大的時候,服務器的壓力會越大。當一台服務器壓力大得超過自身的承受能力的時候,服務器會崩潰。為了避免服務器崩潰,讓用戶有更好地體驗,我們通常通過負載均衡的方式來分擔服務器的壓力。那么什么是負載均衡呢?我們通過建立很多個服務器,把這些服務器組成一個服務器集群,然后,當用戶訪問我們網站的時候,先訪問一個中間服務器,再讓這個中間服務器在服務器集群中選擇一個壓力較小的服務器,然后將該訪問請求引入該選擇的服務器。這樣,用戶的每次訪問,都會保證服務器集群中的每個服務器的壓力趨於平衡,分擔了服務器壓力,避免了服務器崩潰的情況。負載均衡就是采用反向代理的思想。

三、Nginx中負載均衡的實現

Nginx是一款可以通過反向代理實現負載均衡的服務器,使用Nginx服務實現負載均衡的時候,用戶的訪問首先會訪問到Nginx服務器,然后Nginx服務器再從服務器集群表中選擇壓力較小的服務器,然后將該訪問請求引向該服務器。若服務器集群中的某個服務器崩潰,那么從待選服務器列表中將該服務器刪除,也就是說一個服務器假如崩潰了,那么Nginx就肯定不會將訪問請求引入該服務器了。

1、創建fzjh.conf配置文件

  在/usr/local/nginx/conf下創建fzjh.conf文件,文件內容如下:

user  nobody;
worker_processes  2;
events {
    worker_connections  1024;
}
http{
   #=upstream設置負載均衡的待選服務器列表,在運行中如果有服務器崩潰那該服務器就會在該列表中移除
    upstream mypro{
        server 219.133.55.36;#中國萬維網
        server 115.239.210.27;#百度的ip
    }
    server{
        listen 8080;
        #====== 對ngnix更目錄做負載均衡===
        location / {
           #==選擇要代理的服務器要與upstream對應==========
            proxy_pass http://mypro;
} } }

2、加載fzjh.conf配置文件

 執行命令: /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/fzjh.conf

3、測試是否成功  

  在這里我們的負載均衡待選服務器列表是百度和中國萬維網,也就說我們訪問我的主機名+8080 就可以進行測試,如果頁面在百度與中國萬維網中切換,就表示成功。

  我的主機是我的阿里元服務器大家可以試試:http://www.jalja.org:8080

四、Upstream模塊詳解

 
Upstream模塊:該模塊是Nginx服務器的一個重要模塊。Upstream模塊實現在輪詢和客戶端ip之間實現后端的負載均衡。常用的指令有ip_hash指令、server指令和upstream指令等。該模塊主要進行輪詢算法。
upstream指令主要是用於設置一組可以在proxy_pass和fastcgi_pass指令中使用額代理服務器,默認負載均衡方式為輪詢。

 ip_hash指令:在負載均衡系統中,假如用戶在某台服務器上登錄,那么如果該用戶第二次請求的時候,因為我們是負載均衡系統,每次請求都會重新定位到服務器集群中的一個服務器,那么此時如果將已經登錄服務器A的用戶再定位到其他服務器,顯然不妥。故而,我們可以采用ip_hash指令解決這個問題,如果客戶端請求已經訪問了服務器A並登錄,那么第二次請求的時候,會將該請求通過哈希算法自動定位到該后端服務器中。簡單說ip_hash指令可以實現當用戶使用同一瀏覽器在A服務器登錄后,那他后續的所有請求都在同一服務器中進行,Nginx代理服務器不會將他的請求分配到其他服務器上,以此規避用戶登錄信息在不同服務器間流轉的問題,從而保證用戶只需登錄一次。

ip_hash的使用:在fzjh.conf配置文件中開啟該功能

server指令: 主要用於指定服務器的名稱和參數。

使用:在fzjh.conf配置文件中開啟該功能

 注意:在實際開發中weight不要與ip_hash同時使用

 

 

 

負載均衡不同實現方式的優缺點:假如使用硬件的方式實現負載均衡,那么中間的轉發機構就是硬件,這個時候運行的效率非常高,但是對應的成本也非常高。如果我們采用軟件的方式來實現負載均衡,那么中間的轉發機構就是軟件,這個時候,運行效率不如硬件,但是成本相對來說低得多。而使用Nginx服務器實現負載均衡,那么就是通過軟件的方式來實現負載均衡,並且Nginx本身支持高並發等。故而使用Nginx服務器實現負載均衡,能大大節約企業的成本,並且由於Nginx是服務器軟件,其執行效率也是非常高。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM