前端打包后的dist文件怎么上传到云服务器并访问?

前端打包后的 dist 目录本质上就是一堆静态资源(HTML、CSS、JS、图片等)。要让这些文件在云服务器上被用户通过浏览器访问,核心逻辑只有一个:部署一个 Web 服务器,将 dist 目录作为其根目录或特定路径提供服务。

在国内主流云环境(如阿里云 ECS、腾讯云 CVM、华为云 ECS)中,最稳妥、成本最低且无需额外购买 CDN 的方案是使用 Nginx。以下是基于 Linux 操作系统(CentOS 7/8, Ubuntu 20.04+)的标准操作流程。

第一步:准备工作

  1. 本地打包:
    确保你在本地执行了构建命令(如 npm run build 或 yarn build),生成了包含 index.html 和其他文件的 dist 文件夹。
  2. 连接服务器:
    使用 SSH 工具(如 PuTTY、Xshell、Terminal)登录到你的云服务器。
  3. 创建目标目录:
    在服务器上创建一个专门存放前端项目的目录,例如 /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 却访问不了,原因通常是端口没开。

  1. 服务器内部防火墙 (Firewalld/UFW):

    • CentOS:
      sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
      sudo firewall-cmd --reload
    • Ubuntu:
      sudo ufw allow 80/tcp
  2. 云平台安全组 (Security Group):
    登录你的云厂商控制台(阿里云/腾讯云等),找到你的 ECS/CVM 实例,点击“安全组”规则。

    • 确保有一条 入方向 (Inbound) 规则允许 TCP 协议 的 80 端口 来自 0.0.0.0/0(即所有 IP)。
    • 如果有 HTTPS 需求,还需放行 443 端口。

第五步:验证访问

打开浏览器,输入 http://你的服务器公网IP。

  • 如果看到你的前端首页,说明部署成功。
  • 如果看到 Nginx 欢迎页,说明 root 路径配置错误或文件未上传成功。
  • 如果白屏或 404,检查浏览器 Console 是否有资源加载失败,通常是因为路径问题或 try_files 配置缺失。

进阶与最佳实践建议

  1. 关于 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;
    }
  2. 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;
    }
  3. 自动化部署 (CI/CD):
    每次手动 scp 上传效率低下且容易出错。建议结合 Jenkins、GitLab CI 或 GitHub Actions。

    • 流程:代码推送 -> 触发流水线 -> 服务器拉取代码 -> 执行 npm run build -> 自动覆盖 /var/www/my-app 下的文件 -> nginx -s reload。
  4. 替代方案:对象存储 + CDN:
    如果纯粹是静态资源,且没有后端接口交互,可以考虑将 dist 上传至阿里云 OSS 或腾讯云 COS,并开启静态网站托管功能,再配合 CDN 提速。这种方式比 ECS+Nginx 更便宜、速度更快,但配置动态路由和 API X_X稍显复杂。对于初学者或中小项目,ECS + Nginx 是最通用且易于维护的方案。

未经允许不得转载:CLOUD云枢 » 前端打包后的dist文件怎么上传到云服务器并访问?