環境: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 ; }