什么是反向代理?作用、原理和實(shí)例詳解
??什么是反向代理?作用、原理和實(shí)例詳解
在現(xiàn)代的網(wǎng)絡(luò)架構(gòu)中,反向代理(Reverse Proxy)無(wú)處不在。無(wú)論是負(fù)載均衡、加速緩存,還是WebSocket 支持,反向代理都是必不可少的工具。
這篇文章將帶您全面了解反向代理的概念、作用和實(shí)際使用場(chǎng)景,并通過(guò)Nginx 的配置示例幫助您快速上手!
??一、什么是反向代理?
反向代理(Reverse Proxy)是一種架設(shè)在客戶端和服務(wù)器之間的中間服務(wù)器。
- ?客戶端:用戶的瀏覽器或移動(dòng)設(shè)備。
- ?反向代理:如 Nginx、Apache、Caddy 等。
- ?后端服務(wù)器:實(shí)際處理請(qǐng)求的服務(wù)器,通常是 Web 服務(wù)器或應(yīng)用服務(wù)器。
??反向代理與正向代理的區(qū)別
| | |
正向代理 | | 客戶端訪問(wèn)外網(wǎng)的中介(如翻墻) |
反向代理 | | 保護(hù)、負(fù)載均衡、緩存、路徑重寫(xiě) |
在正向代理中,客戶端隱藏自己;而在反向代理中,服務(wù)器隱藏自己。
??二、反向代理的 7 大作用
1??隱藏后端服務(wù)器的 IP 和端口(安全防護(hù))
作用:
- ? 反向代理將后端服務(wù)器的 IP 地址和端口隱藏,外部用戶無(wú)法直接與后端通信。
- ? 避免黑客通過(guò) IP 掃描攻擊后端服務(wù)器,提升安全性。
場(chǎng)景:
- ? 當(dāng)后端使用私有 IP(如
127.0.0.1:1337
)時(shí),外部用戶只能看到反向代理的 IP 地址。
示例配置(Nginx):
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:1337;
}
}
效果:
- ? 用戶請(qǐng)求
http://example.com
,Nginx 將請(qǐng)求轉(zhuǎn)發(fā)到http://127.0.0.1:1337
。 - ? 只有 Nginx 公開(kāi)的 IP 和端口暴露在外,后端 IP完全隱藏。
2??負(fù)載均衡(Load Balancing)
作用:
- ? 將用戶請(qǐng)求分發(fā)到多臺(tái)后端服務(wù)器上,避免單臺(tái)服務(wù)器負(fù)載過(guò)高。
- ? 通過(guò)輪詢、權(quán)重、最少連接等策略分發(fā)請(qǐng)求,確保高可用性。
場(chǎng)景:
- ? 電商大促期間,用戶請(qǐng)求激增,單臺(tái)服務(wù)器可能會(huì)崩潰。通過(guò)反向代理,Nginx 將請(qǐng)求分發(fā)到 3 臺(tái)服務(wù)器,減少單點(diǎn)故障。
示例配置(Nginx):
upstream backend {
server192.168.0.101:1337;
server192.168.0.102:1337;
server192.168.0.103:1337;
}
server {
listen80;
location / {
proxy_pass http://backend;
}
}
效果:
- ? Nginx 將請(qǐng)求分發(fā)到
192.168.0.101:1337
、192.168.0.102:1337
和192.168.0.103:1337
,支持高并發(fā)流量。
3??緩存加速(Cache)
作用:
- ? 將靜態(tài)資源(如圖片、CSS、JS 文件)緩存在代理服務(wù)器上,減少后端請(qǐng)求。
- ? 緩存可減少帶寬使用,提升頁(yè)面加載速度,降低后端負(fù)載。
場(chǎng)景:
- ? 當(dāng)用戶多次訪問(wèn)相同的圖片、視頻時(shí),反向代理從緩存中提供資源,而不向后端服務(wù)器請(qǐng)求。
示例配置(Nginx):
server {
location /static/ {
root /var/www;
expires 30d; # 緩存 30 天
}
}
效果:
- ? 用戶請(qǐng)求
/static/logo.png
,Nginx 從緩存中加載,減少后端服務(wù)器的壓力。
4??SSL 終止(HTTPS 加密)
作用:
- ? 反向代理處理 SSL 加密,將 HTTPS 請(qǐng)求解密為 HTTP 請(qǐng)求轉(zhuǎn)發(fā)給后端。
- ? 減輕后端服務(wù)器的加解密壓力,提升性能。
場(chǎng)景:
- ? 讓 Nginx 處理 HTTPS 證書(shū),后端只處理普通的 HTTP 請(qǐng)求。
示例配置(Nginx):
server {
listen443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.crt;
ssl_certificate_key /etc/nginx/ssl/example.key;
location / {
proxy_pass http://localhost:1337;
}
}
效果:
- ? Nginx 負(fù)責(zé) HTTPS 證書(shū)的加解密,后端只需處理普通的 HTTP 請(qǐng)求,性能更高。
5??路徑重寫(xiě)(URL 重寫(xiě))
作用:
- ? 當(dāng)前端的 URL 與后端的路徑不一致時(shí),通過(guò)路徑重寫(xiě)進(jìn)行適配。
場(chǎng)景:
- ? 前端請(qǐng)求
/api/v1/users
,后端路徑為/users
,Nginx 通過(guò)路徑重寫(xiě)將其轉(zhuǎn)換為/users
。
示例配置(Nginx):
server {
location /api/v1/ {
proxy_pass http://localhost:1337/;
rewrite ^/api/v1/(.*)$ /$1 break;
}
}
效果:
- ?
/api/v1/users
請(qǐng)求被轉(zhuǎn)發(fā)到http://localhost:1337/users
,無(wú)縫對(duì)接前后端路徑差異。
6??限流和防 DDoS 攻擊
作用:
- ? 通過(guò)限制每秒的請(qǐng)求數(shù)量,保護(hù)后端服務(wù)器,防止 DDoS 攻擊。
場(chǎng)景:
- ? 只允許每個(gè) IP 每秒 10 個(gè)請(qǐng)求,超過(guò)則返回
429 Too Many Requests
。
示例配置(Nginx):
http {
limit_req_zone$binary_remote_addr zone=api_limit:10m rate=10r/s;
server {
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://localhost:1337;
}
}
}
效果:
- ? 每個(gè) IP 每秒最多 10 個(gè)請(qǐng)求,額外的 20 個(gè)請(qǐng)求將排隊(duì),超出部分將返回
429 Too Many Requests
。
7??WebSocket 支持
作用:
- ? 支持 WebSocket 長(zhǎng)連接,常用于實(shí)時(shí)通信、投票系統(tǒng)和在線聊天。
場(chǎng)景:
- ? WebSocket 連接需要保持長(zhǎng)連接,反向代理要確保不關(guān)閉 TCP 連接。
示例配置(Nginx):
server {
location /socket/ {
proxy_pass http://localhost:8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
效果:
- ? 用戶連接
wss://example.com/socket
,Nginx 保持與后端的 WebSocket 連接。
??總結(jié)
| | |
隱藏 IP | | |
負(fù)載均衡 | 請(qǐng)求分發(fā)到多臺(tái)服務(wù)器 | |
緩存 | | |
限流 | | |
SSL 終止 | | |
如果您對(duì)Nginx 配置的實(shí)現(xiàn)細(xì)節(jié)感興趣,或者有其他具體的使用場(chǎng)景,歡迎留言討論! ??
鏈接:https://blog.csdn.net/u012446963/article/details/144320009
該文章在 2025/7/21 10:49:43 編輯過(guò)