Appearance
Proxy模块
Proxy模块用于反向代理,将请求转发到后端服务器。
基本配置
基本代理
nginx
location / {
proxy_pass http://backend;
}完整代理
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;
}完整配置
生产环境配置
nginx
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
server {
listen 80;
server_name proxy.example.com;
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_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
proxy_busy_buffers_size 8k;
}
}常用指令
proxy_pass
nginx
proxy_pass http://backend;说明:
- 后端服务器地址
- 可以是IP、域名或upstream
proxy_set_header
nginx
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;说明:
- 设置代理请求头
- Host:主机名
- X-Real-IP:真实IP
- X-Forwarded-For:代理链
proxy_connect_timeout
nginx
proxy_connect_timeout 60;说明:
- 连接后端服务器超时时间
- 默认值:60
- 推荐值:60-120
proxy_send_timeout
nginx
proxy_send_timeout 60;说明:
- 发送请求到后端服务器超时时间
- 默认值:60
- 推荐值:60-120
proxy_read_timeout
nginx
proxy_read_timeout 60;说明:
- 读取后端服务器响应超时时间
- 默认值:60
- 推荐值:60-120
完整示例
生产环境配置
nginx
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
server {
listen 80;
server_name proxy.example.com;
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_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
proxy_busy_buffers_size 8k;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}缓存配置
启用缓存
nginx
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=proxy_cache:10m max_size=1g inactive=60m;
location / {
proxy_cache proxy_cache;
proxy_cache_valid 200 60m;
proxy_pass http://backend;
}常见问题
代理超时
原因: proxy_read_timeout设置过小
解决: 增加proxy_read_timeout
nginx
proxy_read_timeout 120;后端服务器不可达
原因: 后端服务器地址错误
解决: 检查后端服务器地址
nginx
proxy_pass http://backend;总结
Proxy模块的关键点:
- proxy_pass:设置后端服务器地址
- proxy_set_header:设置代理请求头
- proxy_connect_timeout:设置连接超时
- proxy_send_timeout:设置发送超时
- proxy_read_timeout:设置读取超时
- proxy_buffering:启用代理缓冲
合理配置Proxy模块,实现反向代理功能。