Nginx 反向代理一次讲明白:转发、负载均衡与三个常见坑
很多新手第一次配 Nginx,都是为了一个需求:让域名指向跑在 3000 端口的 Node 服务,或者让一台服务器同时跑好几个网站。搜到的配置五花八门,复制粘贴能跑,但一出问题就抓瞎。本文把反向代理最核心的三个概念一次讲明白。
一、正向代理和反向代理,别再搞混
正向代理是替客户端出门的。公司内网不能直接上外网,员工浏览器配一个代理服务器,由它代发请求,目标服务器看到的是代理的 IP。反向代理是替服务端接客的。用户访问的是 Nginx,Nginx 再把请求转发给身后的应用服务器,应用服务器躲在内网,用户根本不知道它的存在。
一句话区分:正向代理藏客户端,反向代理藏服务端。日常说的「Nginx 做代理」,九成九是指反向代理。
二、最简配置:四行就能跑
假设你的应用跑在本地 3000 端口,想让 example.com 指向它:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
proxy_pass 是核心指令,意思是把匹配到的请求原样转发给后面的地址。改完配置先 nginx -t 测语法,再 nginx -s reload 热加载,不用停服务。
三、三个最容易踩的坑
坑一:丢了真实 IP,日志全是 127.0.0.1
反向代理之后,后端收到的请求源地址变成了 Nginx 自己的地址。应用日志里所有用户都显示 127.0.0.1,限流、风控全失效。解决办法是让 Nginx 把原始信息带过去:
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;
}
X-Forwarded-For 会把沿途的 IP 串起来,后端读这个头就能拿到真实客户端 IP。注意后端也要相应配置去信任这个头,否则等于白传。
坑二:WebSocket 一连就断
默认情况下 Nginx 会在 60 秒没有数据时断开连接,而且不会把 HTTP 升级成 WebSocket。聊天室、实时推送这类长连接一上线就反复掉线,往往是这个原因:
location /ws/ {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
关键是 proxy_http_version 1.1 加上两个 Upgrade 头,明确告诉 Nginx 这是一条要升级的连接,不要按普通 HTTP 请求处理。
坑三:大文件上传莫名失败
Nginx 默认允许的请求体只有 1MB。用户上传一张 5MB 的图片,后端还没收到请求,Nginx 就直接返回了 413 错误。改一行就好:
server {
client_max_body_size 20m;
}
这个值要根据业务定,图片站可以给 20m,视频上传要更大。但别无脑设成 0(不限制),等于把大文件攻击的大门打开了。
四、负载均衡:三行加一台后端
一台后端扛不住时,Nginx 可以把流量分给多台:
upstream backend {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
}
}
默认是轮询,一人一次,简单够用。如果应用在内存里存了登录状态,轮询会让用户这次登上、下次掉线,这时把 upstream 里的策略换成 ip_hash,同一个 IP 固定分到同一台后端,会话就稳了。
五、排错三板斧
出了问题别急着改配置,先看这三处:
- nginx -t:语法错了它会直接告诉你第几行。
- 错误日志 /var/log/nginx/error.log:502、504 的具体原因都在这里,502 多半是后端没起来或端口不对,504 是后端响应太慢。
- curl -v:从服务器本机直接 curl 后端地址,确认后端本身是好的,再怀疑 Nginx。
小结
反向代理的核心就一句话:Nginx 站在前面接客,后端躲在后面干活。配好 proxy_pass,补上真实 IP 的三个头,长连接记得升级协议,上传记得放开大小限制,单台不够就加 upstream。这套组合拳能覆盖九成日常场景,剩下的再去啃官方文档也不迟。
- 点赞
- 收藏
- 关注作者
评论(0)