前端打包后的 dist 目录本质上就是一堆静态资源(HTML、CSS、JS、图片等)。要让这些文件在云服务器上被用户通过浏览器访问,核心逻辑只有一个:部署一个 Web 服务器,将 dist 目录作为其根目录或特定路径提供服务。
在国内主流云环境(如阿里云 ECS、腾讯云 CVM、华为云 ECS)中,最稳妥、成本最低且无需额外购买 CDN 的方案是使用 Nginx。以下是基于 Linux 操作系统(CentOS 7/8, Ubuntu 20.04+)的标准操作流程。
第一步:准备工作
- 本地打包:
确保你在本地执行了构建命令(如npm run build或yarn build),生成了包含index.html和其他文件的dist文件夹。 - 连接服务器:
使用 SSH 工具(如 PuTTY、Xshell、Terminal)登录到你的云服务器。 - 创建目标目录:
在服务器上创建一个专门存放前端项目的目录,例如/var/www/my-app。sudo mkdir -p /var/www/my-app
第二步:上传文件到服务器
推荐使用 scp 命令从本地终端直接上传,或者使用 WinSCP/Filename 等图形化工具。
方法 A:命令行上传 (推荐)
在你的电脑本地终端(Mac/Linux)或 Git Bash (Windows) 中执行:
# 将本地的 dist 文件夹内容上传到服务器的指定目录
scp -r ./dist/* user@your_server_ip:/var/www/my-app/
注意:请将 user 替换为你的服务器用户名(通常是 root 或 ec2-user/ubuntu),your_server_ip 替换为公网 IP。
方法 B:图形化工具
打开 WinSCP 或 FileZilla,连接到服务器,进入 /var/www/my-app 目录,将本地 dist 文件夹内的所有文件拖拽进去。
第三步:安装并配置 Nginx
大多数云服务器镜像默认未安装 Nginx,需要手动安装。
1. 安装 Nginx
CentOS/RHEL:
sudo yum install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
Ubuntu/Debian:
sudo apt update
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
2. 配置 Nginx 指向 dist 目录
Nginx 的配置文件通常位于 /etc/nginx/conf.d/ 或 /etc/nginx/sites-available/。我们新建一个配置文件来管理你的项目。
创建配置文件:
sudo vi /etc/nginx/conf.d/default.conf
(如果该文件已存在其他配置,建议备份后清空,或新建一个文件名如 my-app.conf)
写入以下配置(关键部分):
server {
listen 80;
server_name localhost; # 如果有域名,这里填域名,如 www.example.com
# 根目录指向刚才上传 dist 文件的目录
root /var/www/my-app;
index index.html index.htm;
# 主要路由配置
location / {
try_files $uri $uri/ /index.html;
# 这一行非常重要!用于支持 Vue/React 等单页应用的 history 模式路由
# 如果没有这行,刷新页面会报 404
}
# 错误页面自定义(可选)
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
保存并退出 (:wq)。
3. 测试并重载 Nginx
# 测试配置文件语法是否正确
sudo nginx -t
# 如果显示 "syntax is ok" 和 "test is successful",则重载配置
sudo nginx -s reload
第四步:防火墙与安全组设置(极易踩坑点)
很多新手配好了 Nginx 却访问不了,原因通常是端口没开。
-
服务器内部防火墙 (Firewalld/UFW):
- CentOS:
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent sudo firewall-cmd --reload - Ubuntu:
sudo ufw allow 80/tcp
- CentOS:
-
云平台安全组 (Security Group):
登录你的云厂商控制台(阿里云/腾讯云等),找到你的 ECS/CVM 实例,点击“安全组”规则。- 确保有一条 入方向 (Inbound) 规则允许 TCP 协议 的 80 端口 来自
0.0.0.0/0(即所有 IP)。 - 如果有 HTTPS 需求,还需放行 443 端口。
- 确保有一条 入方向 (Inbound) 规则允许 TCP 协议 的 80 端口 来自
第五步:验证访问
打开浏览器,输入 http://你的服务器公网IP。
- 如果看到你的前端首页,说明部署成功。
- 如果看到 Nginx 欢迎页,说明
root路径配置错误或文件未上传成功。 - 如果白屏或 404,检查浏览器 Console 是否有资源加载失败,通常是因为路径问题或
try_files配置缺失。
进阶与最佳实践建议
-
关于 API 接口X_X:
如果前端代码中请求后端接口使用的是相对路径(如/api/login),在生产环境中,你需要在 Nginx 中配置反向X_X,否则会遇到跨域问题。在
location /块之后添加:location /api/ { proxy_pass http://127.0.0.1:8080; # 假设后端服务运行在本机 8080 端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } -
HTTPS 部署:
现在浏览器对 HTTP 有警告提示,强烈建议配置 SSL。可以使用 Certbot 自动申请 Let’s Encrypt 免费证书,或者在云厂商控制台购买/上传证书。
配置示例大致如下:server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.key; # ... 其他配置同上 } # 强制跳转 HTTPS server { listen 80; server_name yourdomain.com; return 301 https://$server_name$request_uri; } -
自动化部署 (CI/CD):
每次手动scp上传效率低下且容易出错。建议结合 Jenkins、GitLab CI 或 GitHub Actions。- 流程:代码推送 -> 触发流水线 -> 服务器拉取代码 -> 执行
npm run build-> 自动覆盖/var/www/my-app下的文件 ->nginx -s reload。
- 流程:代码推送 -> 触发流水线 -> 服务器拉取代码 -> 执行
-
替代方案:对象存储 + CDN:
如果纯粹是静态资源,且没有后端接口交互,可以考虑将dist上传至阿里云 OSS 或腾讯云 COS,并开启静态网站托管功能,再配合 CDN 提速。这种方式比 ECS+Nginx 更便宜、速度更快,但配置动态路由和 API X_X稍显复杂。对于初学者或中小项目,ECS + Nginx 是最通用且易于维护的方案。
CLOUD云枢