Nginx代理與反向代理、負載均衡實踐

經過 Nginx 提供的反向代理和負載均衡功能,能夠合理的完成業務的分配,提升網站的處理能力;同時利用緩存功能,還能夠將不須要實時更新的動態頁面輸出結果,轉化爲靜態網頁造成緩存,從而提升網站的響應速度。nginx

代理和反向代理web

代理(正向代理,目標服務器不知道誰在訪問)算法

位於客戶端和目標服務器之間,起到一箇中轉的做用。其實就是客戶端想訪問目標服務器,可是由於某些緣由不可以直接訪問,則把請求和目標服務器發給代理服務器,代理服務器再去請求目標服務器,把返回的響應結果返回給客戶端。後端

反向代理(用戶實際並不知道最終服務器,只是訪問一個反向代理服務器而已)緩存

客戶端會把反向代理服務器當成目標服務器,向反向代理服務器發送請求後,反向代理服務器再請求內部的後端服務器,把獲得的響應結果返回給客戶端。安全

特性:服務器

  • 安全性。反向代理具備安全性。能隱藏真實的內部服務器。
  • 功能性。正向代理主要用途是爲防火牆內的局域網用戶提供訪問外網的途徑。反向代理主要用途是將防火牆內的服務器提供給外邊的用戶訪問,同時也能夠爲多個後端服務器提供負載均衡功能、緩存功能等。

反向代理服務配置架構

在 Nginx 配置文件中的 location 塊中,這是 proxy_pass 指令。負載均衡

  1. server{ 
  2. listen 80; 
  3.   server_name test.test; 
  4.   #將本機接收到的test.test的請求所有轉發到另一臺服務器192.168.78.128 
  5.   location /{ 
  6.     proxy_pass http://192.168.78.128;  
  7.     #下面是其餘輔助指令 
  8.     proxy_set_header Host $host; #更改來自客戶端的請求頭信息 
  9.     proxy_set_header X-Real_IP $remote_addr;    #用戶真實訪問ip 
  10.     proxy_connect_timeout 2; #配置nginx與後端服務器創建鏈接的超時時間 
  11.     proxy_read_timeout 2; #配置nginx向後端發出read請求的等待響應超時時間 
  12.     proxy_send_timeout 2; #配置nginx向後端服務器發出write請求的等待響應超時時間 
  13.     proxy_redirect http://www.baidu.com; #用於修改後端服務器返回的響應頭中的Location和Refresh 
  14.   } 

負載均衡網站

負載均衡(load balance):就是將負載分攤到多個操做單元上執行,從而提升服務的可用性和響應速度。

1.一個沒有負載均衡的 web 架構以下圖:

用戶直接鏈接服務器,這個時候若是這臺服務器掛了,那麼就整個網站掛了。

2.有負載均衡的 web 架構

用戶不直接訪問後端服務器,而是訪問負載均衡服務器,由負載均衡服務器再次轉發到後端服務器。若是這個時候有一臺後端服務器掛掉了,那麼負載均衡服務器會剔除掉它,將後續請求都轉發到好的那臺,這樣就不影響網站的正常運行。這個時候咱們也須要考慮負載均衡服務器會不會掛掉,那就引入第二個負載均衡服務器來緩解一下。

負載均衡的配置

經過配置負載均衡服務器的 Nginx 中的 upstream 指令能夠實現。

不一樣負載均衡配置的特色以下圖所示:

通常輪詢配置

  1. server{ 
  2.     listen 80; 
  3.   server_name test.test; 
  4.   location / { 
  5.     proxy_pass http://web_server; #反向代理 
  6.   } 
  7. #配置負載均衡服務器組 
  8. upstream web_server { 
  9.     server 192.168.78.128; 
  10.   server 192.168.78.129; 

加權輪詢配置

  1. #配置負載均衡服務器組 
  2. upstream web_server { 
  3.     server 192.168.78.128 weight=1; 
  4.   server 192.168.78.129 weight=3; 

這裏面的權值總和爲一個循環,這裏以 4 次爲一個循環,那麼就是每四次請求中,三次會被分派到 129 這個服務器,一次分配到 128,可是具體三次並不會順序執行,而是按照算法分散執行。 咱們也能夠設置每臺 web 服務器在負載均衡調度中的狀態。

  1. upstream web_server{ 
  2.     server 192.168.78.128 weight=1 max_fails=1 fail_timeout=2; #容許請求失敗次數,在請求max_fail次數失敗後,暫停服務的時間 
  3.   server 192.168.78.200 backup; #預留的備份服務器 
  4.   server 192.168.78.33 down; #當前服務器不參與負載均衡 

ip_hash 配置

  1. upstream web_server{ 
  2.     ip_hash; 
  3.   server 192.168.78.120; 
  4.   server 192.168.78.123; 
  5.   server 192.168.78.33 down; #若是這臺服務器宕機,則用down表示當前服務器暫不參與負載均衡 

使用 ip_hash 的時候,不能使用 weight 和 backup。

第三方模塊(fair)

安裝fair模塊的步驟略過...

配置 fair 的負載均衡

  1. server{ 
  2.     listen 80; 
  3.   server_name test.test; 
  4.   location / { 
  5.     proxy_pass http://web_server 
  6.   } 
  7.  
  8. upstream web_server{ 
  9.     server 192.168.78.128; 
  10.   server 192.168.78.132; 
  11.   fair;     #使用fair 
相關文章
相關標籤/搜索