官方概念
?正向代理( Forward Proxy ):是指是一個(gè)位于客戶端和原始服務(wù)器之間的服務(wù)器帜消,為了從原始服務(wù)器取得內(nèi)容, 客戶端向代理發(fā)送一個(gè)請(qǐng)求并指定目標(biāo)(原始服務(wù)器)胖笛,然后代理向原始服務(wù)器轉(zhuǎn)交請(qǐng)求并將獲得的內(nèi)容返回給客戶端。客戶端才能使用正向代理谁尸。(客戶端必須設(shè)置正向代理服務(wù)器晰赞,當(dāng)然前提是要知道正向代理服務(wù)器的IP地址稼病,還有代理程序的端口。)
反向代理( Reverse Proxy ):是指以代理服務(wù)器來接受 Internet 上的連接請(qǐng)求宾肺,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器溯饵,并將從服務(wù)器上得到的結(jié)果返回給 Internet 上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)反向代理服務(wù)器锨用。(初次接觸方向代理的感覺是丰刊,客戶端是無感知代理的存在的,反向代理對(duì)外都是透明的增拥,訪問者者并不知道自己訪問的是一個(gè)代理啄巧。因?yàn)榭蛻舳瞬恍枰魏闻渲镁涂梢栽L問。)
特點(diǎn)
正向代理
1.代理客戶;
2.隱藏真實(shí)的客戶掌栅,為客戶端收發(fā)請(qǐng)求秩仆,使真實(shí)客戶端對(duì)服務(wù)器不可見;
3.一個(gè)局域網(wǎng)內(nèi)的所有用戶可能被一臺(tái)服務(wù)器做了正向代理,由該臺(tái)服務(wù)器負(fù)責(zé) HTTP 請(qǐng)求;
4.意味著同服務(wù)器做通信的是正向代理服務(wù)器;
反向代理
1.代理服務(wù)器;
2.隱藏了真實(shí)的服務(wù)器猾封,為服務(wù)器收發(fā)請(qǐng)求澄耍,使真實(shí)服務(wù)器對(duì)客戶端不可見;
3.負(fù)載均衡服務(wù)器,將用戶的請(qǐng)求分發(fā)到空閑的服務(wù)器上;
4.意味著用戶和負(fù)載均衡服務(wù)器直接通信,即用戶解析服務(wù)器域名時(shí)得到的是負(fù)載均衡服務(wù)器的 IP ;
共同點(diǎn)
1.都是做為服務(wù)器和客戶端的中間層
2.都可以加強(qiáng)內(nèi)網(wǎng)的安全性齐莲,阻止 web 攻擊
3.都可以做緩存機(jī)制
實(shí)際應(yīng)用
Nginx 服務(wù)器
Nginx 服務(wù)器的功能有很多痢站,諸如反向代理、負(fù)載均衡选酗、靜態(tài)資源服務(wù)器等阵难。
客戶端本來可以直接通過 HTTP 協(xié)議訪問服務(wù)器,不過我們可以在中間加上一個(gè) Nginx 服務(wù)器芒填,客戶端請(qǐng)求 Nginx 服務(wù)器呜叫,Nginx 服務(wù)器請(qǐng)求應(yīng)用服務(wù)器,然后將結(jié)果返回給客戶端殿衰,此時(shí) Nginx 服務(wù)器就是反向代理服務(wù)器朱庆。
# 虛擬主機(jī)的配置
server {
? ? listen 8080;? ? ? ? ? ? ? ? ? ? ? ? # 監(jiān)聽的端口
? ? server_name? 192.168.1.1;? ? ? ? ? ? # 配置訪問域名
? ? root? /data/toor;? ? ? ? ? ? ? ? ? ? # 站點(diǎn)根目錄
? ? error_page 502 404 /page/404.html;? # 錯(cuò)誤頁面
? ? location ^~ /api/? {? ? ? ? ? ? ? ? ? ? ? ? # 使用 /api/ 代理 proxy_pass 的值
? ? ? ? proxy_pass http://192.168.20.1:8080;? ? # 被代理的應(yīng)用服務(wù)器 HTTP 地址
? ? }
}
以上簡單的配置就可以實(shí)現(xiàn)反向代理的功能。
當(dāng)然反向代理也可以處理跨域問題播玖,在 Vue 中就可以使用?proxyTable?這個(gè)屬性進(jìn)行相關(guān)的配置來解決跨域問題帶來的煩惱椎工。配置如下:
proxyTable: {
? ? '/weixin': {
? ? ? ? target: 'http://192.168.48.11:8100/', // 接口的域名
? ? ? ? secure: false,? ? ? // 如果是 https 接口,需要配置這個(gè)參數(shù)
? ? ? ? changeOrigin: true, // 如果接口跨域蜀踏,需要進(jìn)行這個(gè)參數(shù)配置
? ? ? ? pathRewrite: {
? ? ? ? ? ? '^/weixin': ''
? ? ? ? }
? ? },
},
負(fù)載均衡的配置
# upstream 表示負(fù)載服務(wù)器池维蒙,定義名字為 my
upstream my {
? ? server 192.168.2.1:8080 weight=1 max_fails=2 fail_timeout=30s;
? ? server 192.168.2.2:8080 weight=1 max_fails=2 fail_timeout=30s;
? ? server 192.168.2.3:8080 weight=1 max_fails=2 fail_timeout=30s;
? ? server 192.168.2.4:8080 weight=1 max_fails=2 fail_timeout=30s;
? # 即在 30s 內(nèi)嘗試 2 次失敗即認(rèn)為主機(jī)不可用
? }
負(fù)載均衡即將請(qǐng)求/數(shù)據(jù)輪詢分?jǐn)偟蕉鄠€(gè)服務(wù)器上執(zhí)行,負(fù)載均衡的關(guān)鍵在于均勻果覆。
也可以通過ip-hash的方式颅痊,根據(jù)客戶端 ip 地址的 hash 值將請(qǐng)求分配給固定的某一個(gè)服務(wù)器處理。
另外局待,服務(wù)器的硬件配置可能不同斑响,配置好的服務(wù)器可以處理更多的請(qǐng)求,這時(shí)可以通過weight參數(shù)來控制钳榨。
以上舰罚。