nginx反向代理和負載均衡

1.反向代理概念

(1).正向代理的概念
正向代理,也就是傳說中的代理,他的工作原理就像一個跳板,簡單的說,我是一個用戶,我訪問不了某網站,但是我能訪問一個代理服務器,這個代理服務器呢,他能訪問那個我不能訪問的網站,於是我先連上代理服務器,告訴他我需要那個無法訪問網站的內容,代理服務器去取回來,然後返回給我。從網站的角度,只在代理服務器來取內容的時候有一次記錄,有時候並不知道是用戶的請求,也隱藏了用戶的資料,這取決於代理告不告訴網站。
結論就是,正向代理 是一個位於客戶端和原始服務器(origin server)之間的服務器,爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定目標(原始服務器),然後代理向原始服務器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設置才能使用正向代理。

(2).反向代理的概念
繼續舉例:
例用戶訪問 http://www.test.com/readme,但www.test.com上並不存在readme頁面,他是偷偷從另外一臺服務器上取回來,然後作爲自己的內容返回用戶,但用戶並不知情。這裏所提到的 www.test.com 這個域名對應的服務器就設置了反向代理功能。

 結論就是,反向代理正好相反,對於客戶端而言它就像是原始服務器,並且客戶端不需要進行任何特別的設置。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接着反向代理將判斷向何處(原始服務器)轉交請求,並將獲得的內容返回給客戶端,就像這些內容原本就是它自己的一樣。1

(3).兩者區別
從用途上來講:

正向代理的典型用途是爲在防火牆內的局域網客戶端提供訪問Internet的途徑。正向代理還可以使用緩衝特性減少網絡使用率。反向代理的典型用途是將防火牆後面的服務器提供給Internet用戶訪問。反向代理還可以爲後端的多臺服務器提供負載平衡,或爲後端較慢的服務器提供緩衝服務。另外,反向代理還可以啓用高級URL策略和管理技術,從而使處於不同web服務器系統的web頁面同時存在於同一個URL空間下。1

從安全性來講:

正向代理允許客戶端通過它訪問任意網站並且隱藏客戶端自身,因此你必須採取安全措施以確保僅爲經過授權的客戶端提供服務。反向代理對外都是透明的,訪問者並不知道自己訪問的是一個代理。12

2.配置反向代理

反向代理配置示例:

location / {        #設置主機頭和客戶端真實地址,以便服務器獲取客戶端真實IP

             proxy_set_header Host $host;

             proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;             #禁用緩存

             proxy_buffering off;             #設置反向代理的地址

             proxy_pass http://192.168.1.1;       

      }1234567891011121314151617181920212223

代理地址根據實際情況修改。
3.負載均衡
配置負載均衡

nginx 的 upstream默認是以輪詢的方式實現負載均衡,這種方式中,每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。

另外一種方式是ip_hash:每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session的問題。

負載均衡配置示例:
upstream backend {

         #ip_hash;



         server 192.168.1.251;

         server 192.168.1.252;

         server 192.168.1.247;

     }123456789101112

server {

    listen       80;

    server_name  trffweb;



    location / {



         #反向代理的地址

         proxy_pass http://backend;     

    }12345678910111213141516

}

Upstream命名和服務器地址根據實際情況修改。
nginx中upstream的幾種方式:

1、輪詢(weight=1)
默認選項,當weight不指定時,各服務器weight相同,
每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。

upstream bakend {
server 192.168.1.10;
server 192.168.1.11;
}
2、weight
指定輪詢機率,weight和訪問比率成正比,用於後端服務器性能不均的情況。
如果後端服務器down掉,能自動剔除。
比如以下配置,則1.11服務器的訪問量爲1.10服務器的兩倍。

upstream bakend {
server 192.168.1.10 weight=1;
server 192.168.1.11 weight=2;
}
3、ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session不能跨服務器的問題。
如果後端服務器down掉,要手工down掉。(www.jbxue.com 整理)

upstream resinserver{
ip_hash;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
4、fair(第三方插件)
按後端服務器的響應時間來分配請求,響應時間短的優先分配。

upstream resinserver{
server 192.168.1.10:8080;
server 192.168.1.11:8080;
fair;
}
5、url_hash(第三方插件)
按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器,後端服務器爲緩存服務器時比較有效。
在upstream中加入hash語句,hash_method是使用的hash算法。

upstream resinserver{
server 192.168.1.10:8080;
server 192.168.1.11:8080;
hash $request_uri;
hash_method crc32;
}

設備的狀態有:
1、down 表示單前的server暫時不參與負載
2、weight 權重,默認爲1。 weight越大,負載的權重就越大。
3、max_fails 允許請求失敗的次數默認爲1。當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤
4、fail_timeout max_fails次失敗後,暫停的時間。
5backup 備用服務器, 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。-


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章