Nginx 反向代理从入门到实战:一次请求背后的转发逻辑
一、什么是反向代理
在浏览器里输入域名,请求不会直达业务服务器,而是先落到 Nginx 上,再由它转发给身后的应用服务器,拿到响应后原路返回。这台站在服务端一侧、替后端接请求的中转服务器,就是反向代理。
它和正向代理正好相反:正向代理替客户端出门,隐藏的是客户端;反向代理替服务端接待访客,隐藏的是后端真实地址。调用方只需要知道 Nginx 的地址,不用关心后面有几台服务。
二、反向代理解决了什么问题
首先是统一入口。多个业务共用 80 和 443 端口,Nginx 按域名或路径把请求分发到不同后端,外部只暴露一个入口。
其次是负载均衡。后端有多台实例时,Nginx 按轮询或权重分摊流量,某台挂掉还能自动剔除,单台故障不再等于服务不可用。
最后是安全隔离。后端不必直接暴露在公网,Nginx 还可以做 TLS 卸载、缓存和限流。
三、一个最小可用配置
下面是一份最小配置,把 8080 端口的请求转发给本机 3000 端口的应用:
server {
listen 8080;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
}
}
proxy_pass 是转发的核心;proxy_set_header 把原始 Host 透传给后端,否则后端看到的永远是 Nginx 自己的地址,日志和限流都会失真。
四、新手最容易踩的三个坑
一是 proxy_pass 末尾斜杠:写了会替换掉匹配到的 location 前缀,没写则原样拼接路径,改完配置一定要用真实路径验证。
二是超时用默认值。Nginx 默认的连接与读取超时偏短,后端稍慢就会返回 502,耗时接口要按业务单独设置 proxy_connect_timeout 和 proxy_read_timeout。
三是忘记处理 WebSocket。长连接要在 location 里加上 Upgrade 相关头,否则握手会被当成普通请求,连接刚建立就断开。
五、写在最后
先把最小配置跑通,再逐项加上负载均衡与限流,每一步都用真实请求验证。
- 点赞
- 收藏
- 关注作者
评论(0)