一、反向代理
正向代理:
客戶端要獲取的資源就在服務器上,客戶端請求的資源路徑就是最終響應資源的服務器路徑,這就是正向代理。正向代理的特點:就是我們明確知道要訪問哪個網站地址。
反向代理:
客戶端想獲取服務器集群中(服務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是服務器軟件,其執行效率也是非常高。