代理概述

来源:https://www.cnblogs.com/wanghui1234/archive/2018/08/17/9495333.html
-Advertisement-
Play Games

一、正向代理(Forward Proxy) 二、 反向代理(reverse proxy) 三、透明代理 四、nginx中的代理 ...


一、正向代理(Forward Proxy)

一般情況下,如果沒有特別說明,代理技術預設說的是正向代理技術。關於正向代理的概念如下: 正 向代理(forward)是一個位於客戶端【用戶A】和原始伺服器(origin server)【伺服器B】之間的伺服器【代理伺服器Z】,為了從原始伺服器取得內容,用戶A向代理伺服器Z發送一個請求並指定目標(伺服器B),然後代 理伺服器Z向伺服器B轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設置才能使用正向代理

如下圖1.1

從上面的概念中,我們看出,文中所謂的
正向代理就是代理伺服器替代訪問方【用戶A】去訪問目標伺服器【伺服器B】

這就是正向代理的意義所在。而為什麼要用代理伺服器去代替訪問方【用戶A】去訪問伺服器B呢?這就要從代理伺服器使用的意義說起

使用正向代理伺服器作用主要有以下幾點:

1、訪問本無法訪問的伺服器B
如下圖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防火牆作為網關,用來過濾外網對其的訪問。假設用戶A和用戶B都設置了代理伺服器,用戶A允許訪問互聯網,而用戶B不允許訪問互聯網(這個在代理服 務器Z上做限制)這樣用戶A因為授權,可以通過代理伺服器訪問到伺服器B,而用戶B因為沒有被代理伺服器Z授權,所以訪問伺服器B時,數據包會被直接丟棄.

5、隱藏訪問者的行蹤

如下圖1.4 我們可以看出伺服器B並不知道訪問自己的實際是用戶A,因為代理伺服器Z代替用戶A去直接與伺服器B進行交互。如果代理伺服器Z被用戶A完全控制(或不完全控制),會慣以“肉雞”術語稱呼。

我們總結一下 正向代理是一個位於客戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,客戶端向代理髮送一個請求並指定目標(原始伺服器),然後代理向原始伺服器轉交請求並將獲得的內 容返回給客戶端。客戶端必須設置正向代理伺服器,當然前提是要知道正向代理伺服器的IP地址,還有代理程式的埠。

二、反向代理(reverse proxy)

反向代理正好與正向代理相反,對於客戶端而言代理伺服器就像是原始伺服器,並且客戶端不需要進行任何特別的設置。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端。 使用反向代理伺服器的作用如下:

1、保護和隱藏原始資源伺服器

如下圖2.1


用戶A始終認為它訪問的是原始伺服器B而不是代理伺服器Z,但實用際上反向代理伺服器接受用戶A的應答,從原始資源伺服器B中取得用戶A的需求資源,然後發送給用戶A。由於防火牆的作用,只允許代理伺服器Z訪問原始資源伺服器B。儘管在這個虛擬的環境下,防火牆和反向代理的共同作用保護了原始資源伺服器B,但用戶A並不知情。

2、負載均衡

如下圖2.2

當反向代理伺服器不止一個的時候,我們甚至可以把它們做成集群,當更多的用戶訪問資源伺服器B的時候,讓不同的代理伺服器Z(x)去應答不同的用戶,然後發送不同用戶需要的資源。

當然反向代理伺服器像正向代理伺服器一樣擁有CACHE的作用,它可以緩存原始資源伺服器B的資源,而不是每次都要向原始資源伺服器B請求數據,特別是一些靜態的數據,比如圖片和文件,如果這些反向代理伺服器能夠做到和用戶X來自同一個網路,那麼用戶X訪問反向代理伺服器X,就會得到很高質量的速度。這正是CDN技術的核心。如下圖2.3

我們並不是講解CDN,所以去掉了CDN最關鍵的核心技術智能DNS。只是展示CDN技術實際上利用的正是反向代理原理這塊。

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

基本上,網上做正反向代理的程式很多,能做正向代理的軟體大部分也可以做反向代理。開源軟體中最流行的就是squid,既可以做正向代理,也有很多人用來做反向代理的前端伺服器。另外MS ISA也可以用來在WINDOWS平臺下做正向代理。反向代理中最主要的實踐就是WEB服務,近些年來最火的就是Nginx了。網上有人說NGINX不能做正向代理,其實是不對的。NGINX也可以做正向代理,不過用的人比較少了。

三、透明代理

如果把正向代理、反向代理和透明代理按照人類血緣關係來劃分的話。那麼正向代理和透明代理是很明顯堂親關係,而正向代理和反向代理就是表親關係了 。

透明代理的意思是客戶端根本不需要知道有代理伺服器的存在,它改變你的request fields(報文),並會傳送真實IP。註意,加密的透明代理則是屬於匿名代理,意思是不用設置使用代理了。 透明代理實踐的例子就是時下很多公司使用的行為管理軟體。

如下圖3.1

用戶A和用戶B並不知道行為管理設備充當透明代理行為,當用戶A或用戶B向伺服器A或伺服器B提交請求的時候,透明代理設備根據自身策略攔截並修改用戶A或B的報文,並作為實際的請求方,向伺服器A或B發送請求,當接收信息回傳,透明代理再根據自身的設置把允許的報文發回至用戶A或B,如上圖,如果透明代理設置不允許訪問伺服器B,那麼用戶A或者用戶B就不會得到伺服器B的數據。

nginx中的代理

反向代理

反向代理(Reverse Proxy)方式是指以代理伺服器來接受internet上的連接請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連接的客戶端,此時代理伺服器對外就表現為一個伺服器。

負載均衡

負載均衡,英文名稱為Load Balance,是指建立在現有網路結構之上,並提供了一種廉價有效透明的方法擴展網路設備和伺服器的帶寬、增加吞吐量、加強網路數據處理能力、提高網路的靈活性和可用性。其原理就是數據流量分攤到多個伺服器上執行,減輕每台伺服器的壓力,多台伺服器共同完成工作任務,從而提高了數據的吞吐量.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Jquery代碼 $(function () { $(":checkbox.parentfunc").click(function () { //如何獲取被點擊的那個覆選框 $(this).parent().parent().next().find(":checkbox").prop("checke ...
  • Jquery代碼 <script> $(function () { $("td").click(function () { var img = $(this).prop("id"); if (parseInt(img) + 3 < 10 && $("td[id=" + (parseInt(img) ...
  • jQuery拼圖小游戲 最後樣式 核心代碼部分 <script type="text/javascript" > $(function () { $("td").click(function () { //獲取點擊的圖片的id id = parseInt($(this).prop("id")); / ...
  • 本節課講解 打包 單頁應用 過程中的代碼分割和代碼懶載入。不同於多頁面應用的提取公共代碼,單頁面的代碼分割和懶載入不是通過 配置來實現的,而是通過 的寫法和內置函數實現的。 目前 針對此項功能提供 2 種函數: 1. : 引入並且自動執行相關 js 代碼 2. : 引入但需要手動執行相關 js 代碼 ...
  • 前端獲取到的數據為 2018-08-17 16:37:50使用正則表達式 var time = obj.replace(/\-/g, "/");將格式改成 2018/08/17 16:37:50,解決! ...
  • Media Queries: How to target desktop, tablet and mobile? ...
  • setInterval() 方法 定義和用法 setInterval() 方法可按照指定的周期(以毫秒計)來調用函數或計算表達式。 setInterval() 方法會不停地調用函數,直到 clearInterval() 被調用或視窗被關閉。由 setInterval() 返回的 ID 值可用作 cl ...
  • 開篇還是引用呂振宇老師的那篇經典的文章《設計模式隨筆-蠟筆與毛筆的故事》。這個真是太經典了,沒有比這個例子能更好的闡明橋接模式了,這裡我就直接盜來用了。 現在市面上賣的蠟筆很多,各種型號,各種顏色種類繁多, 假如一盒蠟筆有24種顏色,那麼它能塗抹出24種不同的顏色來,蠟筆型號是固定的,如果想畫出各種 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...