Nginx 反向代理从入门到实战:一次请求背后的转发逻辑

举报
yd_299495290 发表于 2026/11/13 06:31:46 2026/11/13
【摘要】 一、什么是反向代理在浏览器里输入域名,请求不会直达业务服务器,而是先落到 Nginx 上,再由它转发给身后的应用服务器,拿到响应后原路返回。这台站在服务端一侧、替后端接请求的中转服务器,就是反向代理。它和正向代理正好相反:正向代理替客户端出门,隐藏的是客户端;反向代理替服务端接待访客,隐藏的是后端真实地址。调用方只需要知道 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 相关头,否则握手会被当成普通请求,连接刚建立就断开。

五、写在最后

先把最小配置跑通,再逐项加上负载均衡与限流,每一步都用真实请求验证。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。