天天看點

Nginx反向代理and負載均衡執行個體詳解

環境:Centos6.6   Nginx1.8.0

#反向代理配置,Nginx代理子產品的指令有很多這裡隻講解重要的proxy_pass,想了解更多代理指令請參考官方文檔。

location  /  {    proxy_pass         http : //192.168.18.201:8000;    proxy_set_header   X - Real - IP   $remote_addr ; } proxy_pass 指定被代理伺服器的位址和被映射的URI,位址可以是主機名或IP位址加端口号。

proxy_set_header 設定由後端的伺服器擷取使用者的主機名或真實IP位址,以及代理者的真實IP位址。

說到反向代理不得不說下正向代理

正向代理的概念:

       正向代理,也就是傳說中的代理,他的工作原理就像一個跳闆,簡單的說,我是一個使用者,我通路不了某網站,但是我能通路一個代理伺服器,這個代理伺服器呢,他能通路那個我不能通路的網站,于是我先連上代理伺服器,告訴他我需要那個無法通路網站的内容,代理伺服器去取回來,然後傳回給我。從網站的角度,隻在代理伺服器來取内容的時候有一次記錄,有時候并不知道是使用者的請求,也隐藏了使用者的資料,這取決于代理告不告訴網站。

       結論就是,正向代理 是一個位于用戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得内容,用戶端向代理發送一個請求并指定目标(原始伺服器),然後代理向原始伺服器轉交請求并将獲得的内容傳回給用戶端。用戶端必須要進行一些特别的設定才能使用正向代理。

反向代理的概念:

繼續舉例:  

        例使用者通路  http://www.test.com/readme,但www.test.com上并不存在readme頁面,他是偷偷從另外一台伺服器上取回來,然後作為自己的内容傳回使用者,但使用者并不知情。這裡所提到的 www.test.com 這個域名對應的伺服器就設定了反向代理功能。

        結論就是,反向代理正好相反,對于用戶端而言它就像是原始伺服器,并且用戶端不需要進行任何特别的設定。用戶端向反向代理的命名空間(name-space)中的内容發送普通請求,接着反向代理将判斷向何處(原始伺服器)轉交請求,并将獲得的内容傳回給用戶端,就像這些内容原本就是它自己的一樣。

兩者差別

從用途上來講:

       正向代理的典型用途是為在防火牆内的區域網路用戶端提供通路Internet的途徑。正向代理還可以使用緩沖特性減少網絡使用率。反向代理的典型用途是将防火牆後面的伺服器提供給Internet使用者通路。反向代理還可以為後端的多台伺服器提供負載平衡,或為後端較慢的伺服器提供緩沖服務。另外,反向代理還可以啟用進階URL政策和管理技術,進而使處于不同web伺服器系統的web頁面同時存在于同一個URL空間下。

從安全性來講:

       正向代理允許用戶端通過它通路任意網站并且隐藏用戶端自身,是以你必須采取安全措施以確定僅為經過授權的用戶端提供服務。反向代理對外都是透明的,通路者并不知道自己通路的是一個代理。

#負載均衡配置 upstream  server  {        ip_hash ;        server  127.0 . 0.1 : 7878 ;        server  192.168 . 10.121 : 80  down ;        server  192.168 . 10.122 : 8009  max_fails = 3  fail_timeout =20 s ;        server  192.168 . 10.123 : 8080 ;      } upstream 是Nginx的HTTP Upstream子產品,這個子產品通過一個簡單的排程算法來實作用戶端IP到後端伺服器的負載均衡。server是負載均衡組的名稱,可以任意指定,友善用的地方直接調用。

server 指令指定後端伺服器的IP位址和端口,同時還可以設定每個後端伺服器在負載均衡排程中的狀态。常用的狀态有:

        down ,表示目前的server暫時不參與負載均衡。

        backup ,預留的備份機器。當所有的非backup機器出現故障或者忙的時候,才會請求backup機器,因些這台機器的壓力最輕。

        max_fails ,允許請求失敗的次數,預設為1。當超過最大次數時,傳回proxy_next_upstream子產品定義的錯誤。

        fail_timeout ,在經曆了max_fails次失敗後,暫停服務的時間。max_fails可以和fail_timeout一起使用。

Nginx 的負載均衡子產品目前支援4種排程算法,下面進行分别介紹,後兩種屬于第三方排程算法。

輪詢(預設)。每個請求按時間順序逐一配置設定到不同的後端伺服器,如果後端某台伺服器當機,故障系統被自動剔除,使使用者通路不受影響。

Weight。指定輪詢權值,Weight值越大,配置設定到的通路機率越高,主要用于後端每個伺服器性能不均的情況下。

ip_hash。每個請求按通路IP的hash結果配置設定,這樣來自同一個IP的訪客固定通路一個後端伺服器,有效解決了動态網頁存在的session共享問題。

fair。這是比上面兩個更加智能的負載均衡算法。這種算法可以依據頁面大小和加載時間長短智能地進行負載均衡,也就是根據後端伺服器的響應時間來配置設定請求,響應時間短的優先配置設定。Nginx本身是不支援fair的,如果需要使用這種排程算法,必須下載下傳Nginx的upstream_fair子產品。

url_hash。此方法按通路url的hash結果來配置設定請求,使每個url定向到同一個後端伺服器,可以進一步提高後端緩存伺服器的效率。Nginx本身是不支援url_hash的,如果需要使用這種排程算法,必須安裝Nginx的hash軟體包。

  注意:當負載均衡算法為ip_hash時,後端伺服器在負載均衡排程中的狀态不能是weight和backup。

         location  /  {               proxy_pass       http : //server;                                 #請求轉向server定義的伺服器群              #請求轉向server定義的伺服器群          } 然後在location中使用proxy_pass指令,調用負載均衡組的名稱server,即可實作負載排程功能。

下面介紹幾種常用的upstream配置方法

1、熱備:如果你有2台伺服器,當一台伺服器發生事故時,才啟用第二台伺服器給提供服務。伺服器處理請求的順序:AAA突然A挂啦,BBB..... upstream  server  {         server  127.0 . 0.1 : 7878  backup ;                                     # 熱 備        server  192.168 . 10.121 : 3333 ;      }   2、輪詢:nginx預設就是輪詢其權重都預設為1,伺服器處理請求的順序:ABABAB.... upstream  server  {         server  127.0 . 0.1 : 7878 ;        server  192.168 . 10.121 : 3333 ;             }   3、權重輪詢:跟據配置的權重的大小而分發給伺服器不同數量的請求。如果不設定則預設為1。伺服器的請求順序為:ABBABBABB.... upstream  server  {         server  127.0 . 0.1 : 7878  weight = 1 ;        server  192.168 . 10.121 : 3333  weight = 2 ;      }

4、ip_hash:nginx會讓相同的用戶端ip請求相同的伺服器。 upstream  server  {        server  127.0 . 0.1 : 7878 ;         server  192.168 . 10.121 : 3333 ;        ip_hash ;      }

繼續閱讀