题目
如何配置Nginx作为反向代理服务器?
信息
- 类型:问答
- 难度:⭐
考点
反向代理概念,Nginx配置基础,location指令
快速回答
配置Nginx作为反向代理的核心步骤:
- 在
http块中定义upstream组指向后端服务器 - 在
server块的location中使用proxy_pass指令 - 常用配置示例:
location / { proxy_pass http://backend_server; proxy_set_header Host $host; }
1. 核心原理
反向代理是Nginx的核心功能之一,客户端请求首先到达Nginx服务器,Nginx再将请求转发到后端应用服务器(如Tomcat、Node.js等),最后将响应返回给客户端。这实现了:
- 负载均衡:分散请求到多个后端服务器
- 安全隔离:隐藏后端服务器真实IP
- SSL终止:在Nginx层处理HTTPS加解密
2. 基础配置示例
http {
upstream backend_server {
server 192.168.1.10:8080; # 后端服务器1
server 192.168.1.11:8080; # 后端服务器2
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server; # 关键指令
proxy_set_header Host $host; # 传递原始域名
proxy_set_header X-Real-IP $remote_addr; # 传递客户端IP
}
}
}3. 关键指令说明
- proxy_pass:定义后端服务器地址(支持upstream组或具体URL)
- proxy_set_header:修改转发给后端的请求头,通常必须设置:
Host $host:保持原始请求的域名X-Real-IP $remote_addr:让后端获取真实客户端IP
- location:匹配请求路径(如
location /api/只代理API请求)
4. 最佳实践
- 连接优化:
启用HTTP长连接proxy_http_version 1.1; proxy_set_header Connection ""; - 超时设置:
避免僵死连接proxy_connect_timeout 5s; proxy_read_timeout 60s; - 缓冲优化:
平衡内存与延迟proxy_buffering on; proxy_buffer_size 4k;
5. 常见错误
- ❌ 忘记设置
Host头:导致后端服务器无法识别虚拟主机 - ❌ 路径截断问题:
location /app/配合proxy_pass http://backend/会移除/app前缀 - ❌ 未传递真实IP:后端日志记录的IP全是Nginx服务器IP
6. 扩展知识
- 负载均衡策略:在
upstream中可配置:least_conn(最少连接)ip_hash(IP哈希会话保持)
- 健康检查:通过
max_fails和fail_timeout自动标记故障节点 - 动静分离:结合
location匹配,静态文件由Nginx直接处理:location ~* \.(jpg|css|js)$ { root /var/www/static; }