1正向代理
正向代理,也就是傳說中的代理,他的工作原理就像一個跳板, 簡單的說, 我是一個用戶,我訪問不了某網站,但是我能訪問一個代理伺服器 這個代理伺服器呢,他能訪問那個我不能訪問的網站 於是我先連上代理伺服器,告訴他我需要那個無法訪問網站的內容 代理伺服器去取回來,然後返回給我
從網站的角度,只在代理伺服器來取內容的時候有一次記錄 有時候並不知道是用戶的請求,也隱藏了用戶的資料,這取決於代理告不告訴網站
結論就是 正向代理 是一個位於客戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,客戶端向代理髮送一個請求並指定目標(原始伺服器),然後代理向原始伺服器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設置才能使用正向代理。
使用正向代理伺服器作用主要有以下幾點:
1、訪問本無法訪問的伺服器B,如下圖1.2
(圖1.2) 我們拋除複雜的網路路由情節來看圖1.2,假設圖中路由器從左到右命名為R1,R2假設最初用戶A要訪問伺服器B需要經過R1和R2路由器這樣一個路由節點,如果路由器R1或者路由器R2發生故障,那麼就無法訪問伺服器B了。但是如果用戶A讓代理伺服器Z去代替自己訪問伺服器B,由於代理伺服器Z沒有在路由器R1或R2節點中,而是通過其它的路由節點訪問伺服器B,那麼用戶A就可以得到伺服器B的數據了。現實中的例子就是”FQ”。不過自從VPN技術被廣泛應用外,”FQ”不但使用了傳統的正向代理技術,有的還使用了VPN技術。
2、加速訪問伺服器B
這種說法目前不像以前那麼流行了,主要是帶寬流量的飛速發展。早期的正向代理中,很多人使用正向代理就是提速。還是如圖1.2 假設用戶A到伺服器B,經過R1路由器和R2路由器,而R1到R2路由器的鏈路是一個低帶寬鏈路。而用戶A到代理伺服器Z,從代理伺服器Z到伺服器B都是高帶寬鏈路。那麼很顯然就可以加速訪問伺服器B了。
3、Cache作用
Cache(緩存)技術和代理服務技術是緊密聯繫的(不光是正向代理,反向代理也使用了Cache(緩存)技術。還如上圖所示,如果在用戶A訪問伺服器B某數據J之前,已經有人通過代理伺服器Z訪問過伺服器B上得數據J,那麼代理伺服器Z會把數據J保存一段時間,如果有人正好取該數據J,那麼代理伺服器Z不再訪問伺服器B,而把緩存的數據J直接發給用戶A。這一技術在Cache中術語就叫Cache命中。如果有更多的像用戶A的用戶來訪問代理伺服器Z,那麼這些用戶都可以直接從代理伺服器Z中取得數據J,而不用千里迢迢的去伺服器B下載數據了。
4、客戶端訪問授權
這方面的內容現今使用的還是比較多的,例如一些公司採用ISA SERVER做為正向代理伺服器來授權用戶是否有許可權訪問互聯網,挼下圖1.3
(圖1.3)圖1.3防火牆作為網關,用來過濾外網對其的訪問。假設用戶A和用戶B都設置了代理伺服器,用戶A允許訪問互聯網,而用戶B不允許訪問互聯網(這個在代理伺服器Z上做限制)這樣用戶A因為授權,可以通過代理伺服器訪問到伺服器B,而用戶B因為沒有被代理伺服器Z授權,所以訪問伺服器B時,數據包會被直接丟棄。
5、隱藏訪問者的行蹤
如下圖1.4 我們可以看出伺服器B並不知道訪問自己的實際是用戶A,因為代理伺服器Z代替用戶A去直接與伺服器B進行交互。如果代理伺服器Z被用戶A完全控制(或不完全控制),會慣以”肉雞”術語稱呼。
(圖1.4) 我們總結一下 正向代理是一個位於客戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,客戶端向代理髮送一個請求並指定目標(原始伺服器),然後代理向原始伺服器轉交請求並將獲得的內容返回給客戶端。客戶端必須設置正向代理伺服器,當然前提是要知道正向代理伺服器的IP地址,還有代理程序的埠。
正向代理具體配置如下(可以是通用配置):
1 server{
2 resolver 8.8.8.8; #DNS配置
3 access_log /data/logs/nginx/access_proxy.log main;
4 listen 80;
5 location / {
6 root html;
7 index index.html index.htm;
8 proxy_pass $scheme://$host$request_uri;
9 proxy_set_header HOST $http_host;
10 proxy_buffers 256 4k;
11 proxy_max_temp_file_size 0k;
12 proxy_connect_timeout 30;
13 proxy_send_timeout 60;
14 proxy_read_timeout 60;16 proxy_cache_valid 200
302 10m;
17 proxy_cache_valid 301 1h;
18 proxy_cache_valid any 1m;
19 }
6,Nginx 正向代理配置說明:
1,配置 DNS 解析 IP 地址,比如 Google Public DNS,以及超時時間(5秒)。
resolver 8.8.8.8;
resolver_timeout 5s;
2,配置正向代理參數,均是由 Nginx 變數組成。其中 proxy_set_header 部分的配置,是為了解決如果 URL 中帶 “.”(點)後 Nginx 503 錯誤。
proxy_pass $scheme://$host$request_uri; #nginx固定語法
proxy_set_header Host $http_host;
3,配置緩存大小,關閉磁碟緩存讀寫減少I/O,以及代理連接超時時間。
proxy_buffers 256 4k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
4,配置代理伺服器 Http 狀態緩存時間。
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
反向代理:
反向代理的概念
繼續舉例: 例用戶訪問 http://ooxx.me/readme 但ooxx.me上並不存在readme頁面 他是偷偷從另外一台伺服器上取回來,然後作為自己的內容吐給用戶
但用戶並不知情 這很正常,用戶一般都很笨
這裡所提到的 ooxx.me 這個域名對應的伺服器就設置了反向代理功能
結論就是 反向代理正好相反,對於客戶端而言它就像是原始伺服器,並且客戶端不需要進行任何特別的設置。客戶端向反向代理 的命名空間(name-space)中的內容發送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端,就像這些內容 原本就是它自己的一樣。
二、反向代理(reverse proxy)
反向代理正好與正向代理相反,對於客戶端而言代理伺服器就像是原始伺服器,並且客戶端不需要進行任何特別的設置。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端。 使用反向代理伺服器的作用如下:
1、保護和隱藏原始資源伺服器如下圖2.1
(圖2.1)
用戶A始終認為它訪問的是原始伺服器B而不是代理伺服器Z,但實用際上反向代理伺服器接受用戶A的應答,從原始資源伺服器B中取得用戶A的需求資源,然後發送給用戶A。由於防火牆的作用,只允許代理伺服器Z訪問原始資源伺服器B。儘管在這個虛擬的環境下,防火牆和反向代理的共同作用保護了原始資源伺服器B,但用戶A並不知情。
2、負載均衡如下圖2.2
(圖2.2)
當反向代理伺服器不止一個的時候,我們甚至可以把它們做成集群,當更多的用戶訪問資源伺服器B的時候,讓不同的代理伺服器Z(x)去應答不同的用戶,然後發送不同用戶需要的資源。
當然反向代理伺服器像正向代理伺服器一樣擁有CACHE的作用,它可以緩存原始資源伺服器B的資源,而不是每次都要向原始資源伺服器B請求數據,特別是一些靜態的數據,比如圖片和文件,如果這些反向代理伺服器能夠做到和用戶X來自同一個網路,那麼用戶X訪問反向代理伺服器X,就會得到很高質量的速度。這正是CDN技術的核心。如下圖2.3
(圖2.3)
我們並不是講解CDN,所以去掉了CDN最關鍵的核心技術智能DNS。只是展示CDN技術實際上利用的正是反向代理原理這塊。
反向代理結論與正向代理正好相反,對於客戶端而言它就像是原始伺服器,並且客戶端不需要進行任何特別的設置。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端,就像這些內容原本就是它自己的一樣。
基本上,網上做正反向代理的程序很多,能做正向代理的軟體大部分也可以做反向代理。開源軟體中最流行的就是squid,既可以做正向代理,也有很多人用來做反向代理的前端伺服器。另外MS ISA也可以用來在WINDOWS平台下做正向代理。反向代理中最主要的實踐就是WEB服務,近些年來最火的就是Nginx了。網上有人說NGINX不能做正向代理,其實是不對的。NGINX也可以做正向代理,不過用的人比較少了。
3通過配置緩存功能加速Web請求:可以緩存真實Web伺服器上的某些靜態資源,減輕真實Web伺服器的負載壓力;
反向代理具體配置如下:(一般通用寫法沒有加負載均衡)
1 server {
2 listen 80;
3 server_name localhost; #實際情況可以寫域名
4 #server_name ~^(?<subdub>.*);
5 charset koi8-r;
6 access_log var/logs/nginx.access.log main;
7
8 location / {
9 root html;
10 index index.html index.htm;
#這樣配置可以通過x-forwarded-for獲取用戶真實ip
11 proxy_set_header X-Real-IP $remote_addr;
12 proxy_set_header Host $host;
13 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
14 proxy_pass http://x.x.x.x:port #代理的後端ip
15 proxy_redirect off;
16 }
17 }
可以在後邊附加一些,但是上邊是配置反向代理必不可少的
1 client_max_body_size 10m; #允許客戶端請求的最大單文件位元組數
2 client_body_buffer_size 128k; #緩衝區代理緩衝用戶端請求的最大位元組數
3 proxy_connect_timeout 300; #nginx跟後端伺服器連接超時時間(代理連接超時)
4 proxy_send_timeout 300; #後端伺服器數據回傳時間(代理髮送超時)
5 proxy_read_timeout 300; #連接成功後,後端伺服器響應時間(代理接收超時)
6 proxy_buffer_size 4k; #設置代理伺服器(nginx)保存用戶頭信息的緩衝區大小
7 proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k以下的話,這樣設置
8 proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2)
9 proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream伺服器傳
三、透明代理
如果把正向代理、反向代理和透明代理按照人類血緣關係來劃分的話。那麼正向代理和透明代理是很明顯堂親關係,而正向代理和反向代理就是表親關係了 。
透明代理的意思是客戶端根本不需要知道有代理伺服器的存在,它改編你的request fields(報文),並會傳送真實IP。注意,加密的透明代理則是屬於匿名代理,意思是不用設置使用代理了。
透明代理實踐的例子就是時下很多公司使用的行為管理軟體。
用戶A和用戶B並不知道行為管理設備充當透明代理行為,當用戶A或用戶B向伺服器A或伺服器B提交請求的時候,透明代理設備根據自身策略攔截並修改用戶A或B的報文,並作為實際的請求方,向伺服器A或B發送請求,當接收信息回傳,透明代理再根據自身的設置把允許的報文發回至用戶A或B,如上圖,如果透明代理設置不允許訪問伺服器B,那麼用戶A或者用戶B就不會得到伺服器B的數據。
說明下:nginx配置透明代理,不是太好,建議最好用squid
對於squid的代理配置以及緩存,後面會詳細分析。
以下文章點擊率最高
Loading…





