在现代的网络架构中,反向代理(Reverse Proxy)无处不在。无论是负载均衡、加速缓存,还是WebSocket 支持,反向代理都是必不可少的工具。
这篇文章将带您全面了解反向代理的概念、作用和实际使用场景,并通过Nginx 的配置示例帮助您快速上手!
反向代理(Reverse Proxy)是一种架设在客户端和服务器之间的中间服务器。
代理类型 | 位置 | 主要用途 |
---|---|---|
正向代理 | 客户端一侧 | 客户端访问外网的中介(如翻墙) |
反向代理 | 服务器一侧 | 保护、负载均衡、缓存、路径重写 |
在正向代理中,客户端隐藏自己;而在反向代理中,服务器隐藏自己。
作用:
场景:
127.0.0.1:1337
)时,外部用户只能看到反向代理的 IP 地址。示例配置(Nginx):
server {
listen ;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:1337;
}
}
效果:
http://example.com
,Nginx 将请求转发到http://127.0.0.1:1337
。作用:
场景:
示例配置(Nginx):
upstream backend {
server192.168.0.101:1337;
server192.168.0.102:1337;
server192.168.0.103:1337;
}
server {
listen;
location / {
proxy_pass http://backend;
}
}
效果:
192.168.0.101:1337
、192.168.0.102:1337
和192.168.0.103:1337
,支持高并发流量。作用:
场景:
示例配置(Nginx):
server {
location /static/ {
root /var/www;
expires 30d; # 缓存 30 天
}
}
效果:
/static/logo.png
,Nginx 从缓存中加载,减少后端服务器的压力。作用:
场景:
示例配置(Nginx):
server {
listen 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;
}
}
效果:
作用:
场景:
/api/v1/users
,后端路径为/users
,Nginx 通过路径重写将其转换为/users
。示例配置(Nginx):
server {
location /api/v1/ {
proxy_pass http://localhost:1337/;
rewrite ^/api/v1/(.*)$ /$1 break;
}
}
效果:
/api/v1/users
请求被转发到http://localhost:1337/users
,无缝对接前后端路径差异。作用:
场景:
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= nodelay;
proxy_pass http://localhost:1337;
}
}
}
效果:
429 Too Many Requests
。作用:
场景:
示例配置(Nginx):
server {
location /socket/ {
proxy_pass http://localhost:8080/;
proxy_http_version .;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
效果:
wss://example.com/socket
,Nginx 保持与后端的 WebSocket 连接。作用 | 解释 | 使用场景 |
---|---|---|
隐藏 IP | 隐藏后端 IP 和端口 | 提高安全性,防止攻击 |
负载均衡 | 请求分发到多台服务器 | 提升性能,处理高并发 |
缓存 | 缓存静态资源 | 加速加载,减少带宽 |
限流 | 限制每秒请求数量 | 防 DDoS 攻击,防滥用 |
SSL 终止 | 处理 HTTPS 加解密 | 减轻后端负载,提高性能 |