Appearance
反向代理原理
反向代理是Nginx最重要的功能之一,理解其原理对于正确配置和使用至关重要。
什么是反向代理
正向代理 vs 反向代理
正向代理:
- 客户端使用代理访问互联网
- 服务器不知道真实客户端IP
- 典型应用:VPN、科学上网
反向代理:
- 客户端通过代理访问后端服务器
- 客户端不知道真实后端服务器
- 典型应用:负载均衡、缓存、安全
反向代理架构
客户端
↓
Nginx (反向代理)
↓
后端服务器集群反向代理的作用
1. 负载均衡
将请求分发到多个后端服务器,提高并发处理能力。
2. 缓存加速
缓存后端服务器的响应,减轻后端压力,提高响应速度。
3. 安全防护
隐藏后端服务器真实IP,提供安全防护。
4. SSL终端
处理SSL/TLS加密,减轻后端服务器负担。
5. 统一入口
为多个后端服务提供统一的访问入口。
工作原理
请求流程
1. 客户端发起请求
↓
2. Nginx接收请求
↓
3. Nginx根据配置转发到后端服务器
↓
4. 后端服务器处理请求
↓
5. 后端服务器返回响应
↓
6. Nginx接收响应
↓
7. Nginx返回响应给客户端关键组件
Proxy模块:
- ngx_http_proxy_module
- ngx_http_upstream_module
- ngx_stream_proxy_module
配置指令
proxy_pass指令
设置后端服务器地址。
nginx
location / {
proxy_pass http://backend;
}proxy_set_header指令
设置请求头。
nginx
location / {
proxy_pass http://backend;
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_connect_timeout指令
设置连接超时时间。
nginx
proxy_connect_timeout 60s;proxy_send_timeout指令
设置发送超时时间。
nginx
proxy_send_timeout 60s;proxy_read_timeout指令
设置读取超时时间。
nginx
proxy_read_timeout 60s;常用变量
请求相关变量
nginx
$host # 请求主机名
$remote_addr # 客户端IP
$request_uri # 完整请求URI
$scheme # 协议(http/https)
$request_method # 请求方法代理相关变量
nginx
$proxy_host # 代理主机名
$proxy_port # 代理端口
$proxy_add_x_forwarded_for # X-Forwarded-For头性能优化
缓冲设置
nginx
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
proxy_busy_buffers_size 8k;连接复用
nginx
upstream backend {
server 192.168.1.10:8080;
keepalive 32;
}
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
}安全配置
隐藏后端服务器信息
nginx
proxy_hide_header X-Powered-By;
proxy_hide_header Server;限制请求大小
nginx
client_max_body_size 10m;IP访问控制
nginx
location /admin/ {
allow 192.168.1.0/24;
deny all;
}总结
反向代理的关键点:
- 作用:负载均衡、缓存、安全、SSL终端
- 原理:客户端→Nginx→后端服务器
- 配置:proxy_pass、proxy_set_header、超时设置
- 优化:缓冲、连接复用
- 安全:隐藏信息、限制访问
掌握反向代理原理,是配置Nginx反向代理的基础。