使用 Nginx 实现反向代理
反向代理是 Nginx 最常见的使用场景之一。客户端访问 Nginx,Nginx 再将请求转发到后端应用服务,例如 Java、Node.js、Go 或 Python 服务。这样可以统一入口、隐藏后端地址,并方便做 HTTPS、限流、缓存和负载均衡。
一、基础代理配置
假设后端应用运行在本机 127.0.0.1:8080,可以创建如下配置:
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1: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;
}
}
其中 proxy_pass 指定后端服务地址,proxy_set_header 用于向后端传递真实客户端信息。
二、路径代理注意事项
proxy_pass 后面是否带斜杠,会影响转发路径。下面示例会把 /api/users 转发为 /users:
location /api/ {
proxy_pass http://127.0.0.1:8080/;
}
如果希望后端仍然收到 /api/users,可以写成:
location /api/ {
proxy_pass http://127.0.0.1:8080;
}
三、超时配置
对于接口耗时较长的服务,需要合理设置连接和读取超时时间:
location / {
proxy_pass http://127.0.0.1:8080;
proxy_connect_timeout 5s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
四、常见排错方法
- 访问出现 502:检查后端服务是否启动、端口是否正确、防火墙是否放行。
- 访问出现 404:检查
location匹配规则和路径转发是否符合预期。 - 接口获取不到真实 IP:确认是否设置
X-Real-IP和X-Forwarded-For。 - 配置不生效:执行
nginx -t检查语法,并使用systemctl reload nginx重载。
五、小结
反向代理配置看似简单,但路径处理、请求头转发和超时设置都很关键。建议每个站点使用独立配置文件,并结合日志定位问题。