前后端分离部署到一台 ECS:Nginx 反向代理这么配

举报
柠檬-夏日清爽 发表于 2026/10/16 21:39:41 2026/10/16
【摘要】 用 Nginx 反向代理把前后端分离项目部署到一台云服务器,说明为什么需要反向代理、location 分流与 try_files 兜底配置,以及 proxy_pass 末尾斜杠的语义差异。云服务器以华为云 ECS 为例、以官网为准。

前后端分离的项目,开发时前端跑在 5173、后端跑在 3000,各管各的。一上线就不能这么干了:用户只认一个域名,总不能让他自己拼端口。Nginx 在这时当“前台”,把根路径的请求发给前端静态文件、把 /api 开头的请求转发给后端服务,对外只暴露一个地址。这篇文章用一个部署到单台云服务器的例子,把这套反向代理配置讲清楚(云服务器以华为云 ECS 为例,具体购买以官网为准)。

一、为什么需要反向代理而不是让用户记两个端口

让用户访问 example.com:3000 拿数据、example.com:5173 看页面,既难记又别扭,还暴露后端端口、不利于做统一的安全策略(HTTPS、限流都在 Nginx 一层做)。反向代理的思路是:Nginx 对外只开 80/443,根据路径把流量分给后面的不同服务。用户无感,运维也能在入口统一管控。

“反向”是说代理在服务器端、对用户透明;用户以为全程在跟 Nginx 通信,实际后端是谁、在哪台机器,他不用关心。

二、整体拓扑

一台 ECS 上同时跑着:Nginx(监听 80)、前端静态文件(构建产物)、后端服务(监听 3000)。请求进来先到 Nginx,它按规则分流:

用户浏览器
   │  http://域名/
   ▼
【Nginx :80】
   ├── /           → 前端静态文件 (dist/)
   └── /api/*      → 后端服务 http://127.0.0.1:3000

前端构建出来的 dist/ 目录直接由 Nginx 读文件返回,不走后端;只有带 /api 的请求才转发给后端进程。

三、Nginx 配置怎么写

核心是一个 server 块:用 root 指向前端产物目录、location / 兜底返首页(支持前端路由刷新不 404),location /api 用 proxy_pass 转发到后端。

server {
    listen 80;
    server_name example.com;

    location / {
        root /var/www/dist;
        try_files $uri $uri/ /index.html;
    }

    location /api/ {
        proxy_pass http://127.0.0.1:3000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

try_files $uri $uri/ /index.html 很关键:用户直接访问 /about 这种前端路由地址时,Nginx 先找对应文件,找不到就返 index.html 交给前端路由处理,避免刷新子页 404。proxy_pass 末尾的 / 表示把 /api/ 这个前缀去掉再转发,后端收到的是干净路径。

四、部署到一台 ECS 的步骤

把前端产物和后端程序传到云服务器(ECS,弹性云服务器,提供可按需使用的计算实例),安装 Nginx,把上面的配置放到 sites-enabled 并重启 Nginx 生效。后端服务用进程管理器(如 systemd)拉起,保证退出能自动重启。涉及具体规格、镜像、计费以华为云官方文档为准,本文不展开购买细节。

前端构建产物是纯静态文件,Nginx 直接读盘返回,性能很好;后端只处理 /api,压力也集中可观测。

五、几个容易踩的坑

第一,proxy_pass 末尾有没有 / 语义不同:有 / 会剥离匹配到的前缀,没有则把完整路径转发,配错后端就 404。第二,前端路由刷新 404 几乎都是忘了 try_files 兜底。第三,跨域问题在反向代理下通常不用前端处理——因为浏览器看来前后端同源(都走 Nginx 的域名),/api 由 Nginx 代转,不存在跨域。第四,上生产记得在 Nginx 配 HTTPS,别明文跑 80。

六、总结

Nginx 反向代理把“一个域名、两种服务”这件事做成标准动作:静态文件直接返、动态请求代转。和之前用 Docker Compose 一把拉起前后端不同,这一篇是“裸机 + Nginx”的部署路线,更贴近真实上云。理解了 location 分流和 try_files 兜底,单台服务器托管前后端分离项目就只是写一份配置的事。ECS 等云资源的规格与购买以官网文档为准。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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