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機器。所以這臺機器壓力會最輕。-