一、什么是代理服务器?
类型 | 说明 |
---|---|
正向代理 | 客户端通过代理访问目标服务器(隐藏客户端身份) |
反向代理 | 客户端访问代理服务器,由代理服务器请求后端服务器(隐藏后端服务器) |
二、Nginx 反向代理配置方法(最常用)
场景:将 http://example.com
请求代理到 http://192.168.1.100:8080
📄 配置示例:
server {listen 80;server_name example.com;location / {proxy_pass http://192.168.1.100:8080;# 设置请求头,传递主机名和真实 IPproxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}
参数说明:
指令 | 说明 |
---|---|
proxy_pass | 代理的目标地址(可以是 IP:PORT、域名、upstream 名称) |
proxy_set_header | 设置请求头,让后端服务器知道原始信息 |
proxy_connect_timeout | 连接超时时间 |
proxy_read_timeout | 读取响应超时时间 |
可选优化配置:
proxy_connect_timeout 60s;proxy_read_timeout 120s;proxy_send_timeout 120s;proxy_buffering off; # 关闭缓冲(适合流媒体)
三、带负载均衡的反向代理配置
如果你有多个后端服务,可以使用 upstream
块定义服务器组:
upstream backend_servers {least_conn;server 192.168.1.100:8080 weight=3;server 192.168.1.101:8080;server 192.168.1.102:8080 backup;
}server {listen 80;server_name example.com;location / {proxy_pass http://backend_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}
负载均衡策略:
策略 | 说明 |
---|---|
round-robin | 默认,轮询 |
least_conn | 最少连接优先 |
ip_hash | 根据客户端 IP 哈希分配 |
weight | 权重分配(值越大,请求越多) |
backup | 备用服务器(只有其他都宕机时才启用) |
四、正向代理配置(可选)
正向代理常用于内网访问外网,需要使用
ngx_http_proxy_connect_module
模块(Nginx 默认不包含该模块)。
示例(需模块支持):
server {listen 8080;# 正向代理配置resolver 8.8.8.8;location / {proxy_pass https://$host$request_uri;proxy_ssl_server_name on;proxy_ssl_verify on;}
}
📌 使用方法:
curl -x http://your-nginx-ip:8080 http://example.com
五、测试与重启
完成配置后:
sudo nginx -t # 检查配置是否正确
sudo systemctl reload nginx # 重新加载配置
六、应用场景举例
应用场景 | 配置要点 |
---|---|
前后端分离项目 | 代理前端到静态资源,后端 API 到后端服务 |
微服务架构 | 用 Nginx 做统一入口,代理到不同服务 |
HTTPS 代理 | 加上 ssl_certificate 和 ssl_certificate_key |
流媒体代理 | 设置 proxy_buffering off |
跨域代理 | 用代理解决浏览器跨域问题 |
📎 七、完整 HTTPS 代理配置示例
server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;location / {proxy_pass http://192.168.1.100:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}server {listen 80;server_name example.com;return 301 https://$host$request_uri;
}
附加建议
- 使用云服务器搭建Nginx 反向代理
- 使用
upstream
模块实现负载均衡。 - 使用
proxy_cache
缓存后端响应,提高性能。 - 使用
access.log
和error.log
分析代理请求。