自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

圖解「正向代理」的原理 + 實(shí)踐應(yīng)用

開發(fā) 前端
每一種設(shè)計(jì)模式都會(huì)配套合適的真實(shí)場(chǎng)景案例,加上“老王”耐心的講解,小菜下班后自己不斷總結(jié)和思考,隨后,將其使用到真實(shí)場(chǎng)景中。整個(gè)過程,實(shí)際上就是需求在驅(qū)動(dòng)。

你好,我是悟空。

本文主要內(nèi)容如下:

圖片圖片

在工作中經(jīng)常和正向代理和反向代理打交道,有必要總結(jié)下正向代理的原理和實(shí)踐應(yīng)用了。(反向代理安排在下篇吧)

如何理解正向代理

代理(Proxy)服務(wù)通常被我們稱為正向代理服務(wù),如下圖所示:

圖片圖片

  • 客戶端:圖中的客戶端我用電腦和手機(jī)作為示意,客戶端指在計(jì)算機(jī)網(wǎng)絡(luò)中與服務(wù)器進(jìn)行通信的一種計(jì)算機(jī)程序或設(shè)備??蛻舳送ǔU?qǐng)求服務(wù)器提供某種服務(wù),如獲取網(wǎng)頁(yè)、發(fā)送電子郵件、下載文件等??蛻舳伺c服務(wù)器之間的通信通常遵循客戶端-服務(wù)器模型,其中客戶端發(fā)出請(qǐng)求,而服務(wù)器響應(yīng)這些請(qǐng)求。
  • 站點(diǎn):可以理解為網(wǎng)絡(luò)中的目標(biāo)服務(wù)器,當(dāng)客戶端想要訪問目標(biāo)服務(wù)器的資源時(shí),需要通過網(wǎng)絡(luò)通信才能獲取到資源。
  • 正向代理服務(wù)器:在客戶端和站點(diǎn)之間,起到了一個(gè)轉(zhuǎn)發(fā)請(qǐng)求的作用。正向代理服務(wù)器不支持外部對(duì)內(nèi)部網(wǎng)絡(luò)的訪問請(qǐng)求。正向代理服務(wù)器和客戶端是緊密聯(lián)系的,我們工作中用到的 VPN(虛擬專用網(wǎng)絡(luò)) 就是一種正向代理的方式。
  • 箭頭:箭頭的方向代表訪問的方向。

大白話聊聊正向代理

一位企業(yè)老總,他有一位助理小李,當(dāng)老總想要訂火車票時(shí),就會(huì)委托小李幫忙訂票,當(dāng)老總想要訂酒店時(shí),小李就會(huì)負(fù)責(zé)查找合適的酒店并安排老總?cè)胱?。助理小李幫老總辦了很多事情,也就是代理了一些事情,而助理小李就充當(dāng)了一個(gè)代理服務(wù)器的角色。如下圖所示:

圖片圖片

正向代理的作用

企業(yè)可以使用正向代理來增強(qiáng)網(wǎng)絡(luò)安全、訪問控制、性能優(yōu)化和隱私保護(hù)等方面的功能。以下是企業(yè)中如何使用正向代理的一些常見場(chǎng)景和方法:

  • 遠(yuǎn)程辦公: 在遠(yuǎn)程辦公環(huán)境中,企業(yè)可以使用正向代理來幫助員工安全地連接到公司內(nèi)部網(wǎng)絡(luò),訪問內(nèi)部資源,而不必暴露公司的內(nèi)部網(wǎng)絡(luò)直接在互聯(lián)網(wǎng)上。
  • 訪問控制和安全性: 企業(yè)可以在其網(wǎng)絡(luò)中部署正向代理服務(wù)器,以實(shí)施訪問控制策略。通過正向代理,可以限制員工訪問特定網(wǎng)站或互聯(lián)網(wǎng)資源,從而減少潛在的網(wǎng)絡(luò)威脅。這有助于保護(hù)企業(yè)免受惡意軟件、惡意網(wǎng)站和網(wǎng)絡(luò)攻擊的影響。
  • 內(nèi)容過濾和緩存: 正向代理可以用于過濾和緩存網(wǎng)絡(luò)內(nèi)容,以提高性能并減少帶寬消耗。代理服務(wù)器可以緩存常用的資源,例如網(wǎng)頁(yè)、圖像和視頻,從而減少對(duì)外部服務(wù)器的請(qǐng)求,提高用戶體驗(yàn)。
  • 安全審計(jì)和監(jiān)控: 企業(yè)可以使用正向代理來監(jiān)視員工的網(wǎng)絡(luò)活動(dòng),以確保合規(guī)性和安全性。代理服務(wù)器可以記錄訪問日志,以便后續(xù)的安全審計(jì)和監(jiān)控。
  • 反病毒和惡意軟件保護(hù): 正向代理可以用于檢測(cè)和攔截網(wǎng)絡(luò)流量中的惡意軟件、病毒和惡意鏈接。這有助于保護(hù)企業(yè)內(nèi)部網(wǎng)絡(luò)免受惡意軟件的傳播和感染。
  • 隱私保護(hù): 企業(yè)可以使用正向代理來保護(hù)員工的隱私。代理服務(wù)器可以隱藏員工的真實(shí)IP地址,從而提高員工的在線隱私。
  • 訪問受限資源: 有些企業(yè)需要訪問特定地理位置或IP受限的互聯(lián)網(wǎng)資源。正向代理可以用于繞過這些限制,以訪問需要的資源。
  • 負(fù)載均衡: 企業(yè)可以使用正向代理來實(shí)現(xiàn)負(fù)載均衡,將客戶端請(qǐng)求分發(fā)到多個(gè)服務(wù)器,以提高性能和可用性。這對(duì)于高流量的企業(yè)應(yīng)用程序和網(wǎng)站非常有用。

企業(yè)中如何使用正向代理

在企業(yè)中,正向代理工具用于多種場(chǎng)景,以增強(qiáng)網(wǎng)絡(luò)安全性、訪問控制、性能優(yōu)化和隱私保護(hù)。以下是一些常見的正向代理工具和它們?cè)诓煌瑘?chǎng)景中的用途:

  • Nginx: Nginx 是一款高性能的反向代理服務(wù)器,但也可以配置為正向代理。它通常被用于負(fù)載均衡、訪問控制和內(nèi)容緩存。
  • 自建VPN: 一些企業(yè)和個(gè)人選擇自行搭建虛擬私人網(wǎng)絡(luò)(VPN)來實(shí)現(xiàn)正向代理功能。這可以通過使用開源VPN軟件如OpenVPN或商業(yè)VPN服務(wù)來實(shí)現(xiàn)。
  • CDN服務(wù): 一些CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))服務(wù)提供商也提供正向代理功能,以加速訪問、緩存內(nèi)容和提供安全性。
  • Squid: Squid 是一個(gè)開源的代理服務(wù)器軟件,被廣泛用于企業(yè)和學(xué)校網(wǎng)絡(luò)中。它提供了強(qiáng)大的訪問控制、緩存和性能優(yōu)化功能,常用于網(wǎng)絡(luò)管理和內(nèi)容過濾。
  • CCProxy(若快代理服務(wù)器): CCProxy 是一款商業(yè)代理服務(wù)器軟件,又稱為"若快",它提供了訪問控制、帶寬控制和網(wǎng)絡(luò)加速功能。
  • TinyProxy: TinyProxy 是一個(gè)輕量級(jí)的代理服務(wù)器軟件,適用于小型網(wǎng)絡(luò)環(huán)境。它的配置相對(duì)簡(jiǎn)單,適合快速搭建正向代理。
  • Glype: Glype 是一個(gè)基于Web的代理腳本,可以讓用戶通過瀏覽器訪問被封鎖的網(wǎng)站。它常被用于構(gòu)建Web代理服務(wù),以繞過互聯(lián)網(wǎng)審查。

項(xiàng)目中如何使用正向代理

以下是一個(gè) Nginx 的正向代理的配置,

http {
    server {
        listen       80;
        server_name  www.passjava.cn;

        location / {
            proxy_pass http://target_server;
            proxy_set_header Host $host;
        }
    }
}

上述配置表明當(dāng)客戶端通過瀏覽器或其他方式發(fā)送請(qǐng)求到 www.passjava.cn 這個(gè)域名時(shí),Nginx 將監(jiān)聽 HTTP 請(qǐng)求的端口 80,并將這些請(qǐng)求代理到 target_server 指定的目標(biāo)服務(wù)器。這是一個(gè)典型的正向代理配置,用于隱藏客戶端的真實(shí) IP 地址,同時(shí)將請(qǐng)求轉(zhuǎn)發(fā)到其他服務(wù)器上。這在一些網(wǎng)絡(luò)安全和訪問控制方面非常有用。

真實(shí)場(chǎng)景的一個(gè)應(yīng)用

我們項(xiàng)目中大量使用 Nginx 作為正向代理和反向代理,這里舉一個(gè)我用 Nginx 作為正向代理的真實(shí)案例。

背景

公司生產(chǎn)一些硬件設(shè)備,而這些設(shè)備在生產(chǎn)的過程中,需要調(diào)用我們后臺(tái)系統(tǒng)的接口,我們后臺(tái)系統(tǒng)所在的網(wǎng)絡(luò)和設(shè)備的網(wǎng)絡(luò)并不在同一個(gè)網(wǎng)段內(nèi),想要實(shí)現(xiàn)網(wǎng)絡(luò)互通,我們?cè)谠O(shè)備和系統(tǒng)之間加了一層正向代理服務(wù)器,設(shè)備先將請(qǐng)求發(fā)送給代理服務(wù)器,由代理服務(wù)器將請(qǐng)求轉(zhuǎn)發(fā)給后臺(tái)系統(tǒng)。

解決方案

如下圖所示:

圖片圖片

設(shè)備 1 和設(shè)備 2 的 IP 在 192.168.1.0/24 IP 地址段內(nèi),HTTP 請(qǐng)求先發(fā)到代理服務(wù)器,然后轉(zhuǎn)發(fā)到后臺(tái)服務(wù)器集群的網(wǎng)關(guān)地址(192.168.52.123)。

代理服務(wù)器上有兩個(gè)網(wǎng)卡,和設(shè)備之間的網(wǎng)絡(luò)是通的,和服務(wù)器集群之間的網(wǎng)絡(luò)也是通的。這樣就能保證設(shè)備的請(qǐng)求能夠正常發(fā)送到系統(tǒng)了。

疑問:為啥不把后臺(tái)系統(tǒng)的服務(wù)器 IP 改成和設(shè)備同一網(wǎng)段?

答:?jiǎn)栴}出在不能保證設(shè)備和后臺(tái)系統(tǒng)在同一局域網(wǎng)內(nèi)。有的設(shè)備是在其他局域網(wǎng)內(nèi)生產(chǎn)的,即使在同一個(gè)網(wǎng)段內(nèi),但是是跨局域網(wǎng)的,設(shè)備和后臺(tái)系統(tǒng)也是無法連通的。

完整的 NGINX 配置如下:

圖片圖片

正向代理后如何獲取真實(shí) IP

另外我們的系統(tǒng)還需要獲取設(shè)備的真實(shí) IP,這就需要在 Nginx 加上配置:

# location 模塊中加入以下配置:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

上述配置可以暴露客戶端的真實(shí) IP 地址給目標(biāo)服務(wù)器,特別是 proxy_set_header X-Real-IP $remote_addr; 和 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 這兩行配置。

讓我解釋一下這三行配置的含義:

  1. proxy_set_header Host $host;:這一行配置將客戶端請(qǐng)求中的 Host 頭部信息傳遞給目標(biāo)服務(wù)器。這是正常的 HTTP 頭部信息傳遞,不涉及客戶端 IP 地址。
  2. proxy_set_header X-Real-IP $remote_addr;:這一行配置將客戶端的真實(shí) IP 地址作為 X-Real-IP 頭部信息傳遞給目標(biāo)服務(wù)器。這意味著目標(biāo)服務(wù)器可以訪問到客戶端的真實(shí) IP 地址。
  3. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:這一行配置將客戶端的 IP 地址添加到 X-Forwarded-For 頭部信息中,并傳遞給目標(biāo)服務(wù)器。這是為了記錄代理請(qǐng)求的前幾個(gè)客戶端的 IP 地址,通常包括客戶端的真實(shí) IP 地址。

當(dāng)目標(biāo)服務(wù)器收到這些頭部信息時(shí),它可以通過 X-Real-IP 或 X-Forwarded-For 頭部來獲取客戶端的真實(shí) IP 地址。

容易誤以為的正向代理

比如我的網(wǎng)站項(xiàng)目 passjava.cn,項(xiàng)目是純靜態(tài)頁(yè)面,部署在了一臺(tái)服務(wù)器上。如下圖所示,當(dāng)我在瀏覽器訪問這個(gè)域名時(shí),請(qǐng)求會(huì)先經(jīng)過 DNS 域名解析,拿到域名綁定的 IP 地址,而這個(gè) IP 地址又是我購(gòu)買的云服務(wù)器地址,在這個(gè)服務(wù)器上有網(wǎng)站的靜態(tài)頁(yè)面。

圖片圖片

以下是 Nginx 的配置:

server {
    listen       80;
    server_name  www.passjava.cn;

    location / {
        root   /home/ubuntu/docs;
        index  index.html;
    }
}

我開始以為這是一個(gè)正向代理的配置,其實(shí)并不是,這個(gè)配置只是一個(gè)簡(jiǎn)單的虛擬主機(jī)配置,用于托管靜態(tài)網(wǎng)站。這個(gè)配置定義了一個(gè) Nginx 虛擬主機(jī),用于處理來自 www.passjava.cn 域名的 HTTP 請(qǐng)求,并提供靜態(tài)網(wǎng)頁(yè)。

解釋下這些配置項(xiàng)含義:

  1. server { ... }:這是一個(gè) server 塊,用于定義一個(gè)虛擬主機(jī)。每個(gè) server 塊通常用于配置一個(gè)不同的虛擬主機(jī),以處理特定域名或 IP 地址的請(qǐng)求。
  2. listen 80;:這一行指定了監(jiān)聽的端口號(hào),這里是 80,表示該虛擬主機(jī)將處理來自客戶端的 HTTP 請(qǐng)求,這是 HTTP 的標(biāo)準(zhǔn)端口號(hào)。
  3. server_name www.passjava.cn;:這一行定義了虛擬主機(jī)所處理的域名。在這個(gè)例子中,虛擬主機(jī)將處理來自 www.passjava.cn 域名的請(qǐng)求。當(dāng)客戶端發(fā)送請(qǐng)求到這個(gè)域名時(shí),Nginx 將使用這個(gè) server 塊中的配置來響應(yīng)請(qǐng)求。
  4. location / { ... }:這是一個(gè) location 塊,它定義了如何處理特定 URI(統(tǒng)一資源標(biāo)識(shí)符)路徑的請(qǐng)求。在這里,location / 匹配所有請(qǐng)求的根路徑。
  5. root /home/ubuntu/docs;:這一行指定了 Nginx 服務(wù)器上要提供的文件的根目錄。當(dāng)客戶端請(qǐng)求根路徑時(shí),Nginx 將在 /home/ubuntu/docs 目錄中查找文件來提供給客戶端。
  6. index index.html;:這一行指定了默認(rèn)的索引文件,當(dāng)客戶端請(qǐng)求的路徑是一個(gè)目錄時(shí),Nginx 將嘗試提供 index.html 文件作為默認(rèn)文檔。如果 /home/ubuntu/docs 目錄中存在 index.html 文件,它將作為默認(rèn)文檔提供給客戶端。

注意:正向代理配置通常涉及將客戶端的請(qǐng)求代理到其他服務(wù)器,而不是提供自己的網(wǎng)頁(yè)內(nèi)容。正向代理的配置會(huì)包括一些額外的代理設(shè)置,用于將請(qǐng)求轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器,而不是提供本地靜態(tài)文件。

- END -

關(guān)于我

InfoQ 簽約作者、藍(lán)橋簽約作者、阿里云專家博主、51CTO 紅人。

責(zé)任編輯:武曉燕 來源: 悟空聊架構(gòu)
相關(guān)推薦

2023-09-08 00:07:41

2018-11-12 12:17:00

2024-07-22 15:34:25

2020-10-22 08:05:46

Nginx

2019-08-26 10:31:12

正向代理反向代理安全

2024-02-04 16:51:47

2021-03-16 21:42:37

反向代理正向代理

2018-04-17 12:10:40

2019-06-18 09:45:19

正向代理反向代理IT

2010-02-04 10:17:38

Android應(yīng)用程序

2009-07-15 09:21:56

MyEclipse代理MyEclipse下載

2021-07-29 11:15:25

Nginx網(wǎng)絡(luò)服務(wù)器

2024-03-26 07:38:16

正向代理反向代理代碼

2010-08-30 17:13:01

DHCP中繼代理

2021-02-05 15:01:41

GitLinux命令

2022-11-08 00:00:00

監(jiān)控系統(tǒng)Prometheus

2024-02-20 14:53:01

2019-07-09 14:57:09

代理服務(wù)器NginxHTTPS

2018-11-05 09:34:43

2019-06-19 15:34:39

Nginx反向代理負(fù)載均衡
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)