Nginx反向代理配置全指南:从入门到排错实战
前言
最近在折腾服务器的时候,不少小伙伴都在问关于Nginx反向代理的配置问题。确实,反向代理在我们的日常开发、建站中太常见了,但配置一不对就容易出现各种奇怪的问题。今天我就把常见的配置方法和排坑经验整理一下,希望能帮到大家。
图示:用户请求经过Nginx反向代理转发至后端服务器的流程
什么是反向代理?
简单来说,反向代理就是服务器端的“中介”。用户访问你的服务器,实际上是由Nginx接收请求,然后根据规则转发给后端的应用(比如Node.js、Python、PHP等),最后再把结果返回给用户。这样做的好处很多:
- 隐藏后端真实IP,提高安全性
- 负载均衡,分发流量
- 统一处理SSL证书
- 缓存加速
基础配置实战
1. 最简单的HTTP转发
假设你的后端应用运行在 127.0.0.1:3000,现在想通过域名 example.com 访问,可以这样配置:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
这样访问 example.com 就会自动转发到本地的3000端口。
2. 处理 WebSocket
如果你的应用是WebSocket,需要添加额外的头部支持,否则连接会断开:
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
图示:常见的 Nginx 502 Bad Gateway 错误
3. 传递真实IP
后端应用经常需要获取用户的真实IP,但默认情况下Nginx会替换成127.0.0.1。我们需要加上这些头部:
location / {
proxy_pass http://127.0.0.1:3000;
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;
}
常见问题排查
问题1:502 Bad Gateway
可能原因:
- 后端服务没启动
- 端口不对
- 防火墙拦截
解决方法:
- 检查后端服务是否运行:
systemctl status your-service - 确认端口是否正确:
netstat -tlnp | grep 3000 - 查看Nginx错误日志:
tail -f /var/log/nginx/error.log
问题2:404 Not Found
可能原因:
proxy_pass后的路径配置错误- 后端路由问题
解决方法:
如果 proxy_pass 后面有路径(如 /api),注意末尾斜杠的区别:
proxy_pass http://backend/;会去掉匹配的 location 路径proxy_pass http://backend;会保留完整路径
问题3:SSL证书配置后无法访问
可能原因:
- 证书路径错误
- 端口没开放443
解决方法:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
记得开放防火墙端口:ufw allow 443/tcp
进阶技巧
1. 负载均衡
如果有多个后端服务,可以实现负载均衡:
upstream backend {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
}
server {
location / {
proxy_pass http://backend;
}
}
2. 缓存配置
对静态资源缓存可以减少服务器压力:
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m;
server {
location / {
proxy_cache my_cache;
proxy_pass http://127.0.0.1:3000;
}
}
总结
Nginx反向代理虽然看起来简单,但细节很多。遇到问题时,首先要看错误日志,80%的问题都能在日志里找到线索。如果能把自己的配置环境描述清楚,别人也更容易帮你定位问题。
希望这份指南能帮大家少踩一些坑。如果有其他问题,欢迎在评论区交流!

评论已关闭