努力
加油

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

这个问题其实可以拆成两个核心部分:怎么传上去 和 怎么访问。

很多刚入行的前端同学容易陷入一个误区:觉得只要把 dist 文件夹里的文件丢到服务器里,浏览器就能直接打开 HTML。这是不对的。静态资源部署的核心在于Web 服务器(Nginx/Apache)的配置,而不是简单的文件传输。

下面我按最主流、最稳妥的方案——Linux 云服务器 + Nginx 来拆解流程。如果你用的是 Windows Server 或者宝塔面板,逻辑是一样的,只是操作界面不同。

第一步:本地打包

确保你的构建工具(Webpack/Vite/CRA)已经正确配置了 publicPath 或 base。

  • Vite: 检查 vite.config.js 中的 base: '/' (相对路径) 或 base: '/your-app/' (绝对路径)。
  • Webpack: 检查 output.publicPath。
  • CRA: 默认通常是 /,如果需要子目录部署,需要修改 package.json 中的 homepage 字段。

执行 npm run build,生成 dist 文件夹。里面的结构通常长这样:

dist/
├── index.html
├── assets/
│   ├── js/
│   └── css/
└── ...

第二步:上传到服务器

你有几种方式可以把文件弄到服务器上,推荐前两种:

  1. SFTP/SCP 客户端(推荐新手):

    • 使用 WinSCP (Windows) 或 FileZilla / Cyberduck。
    • 连接你的云服务器 IP,用 SSH 密钥或密码登录。
    • 找到 /var/www/html 或者你自己创建的目录(比如 /opt/myapp),把 dist 文件夹里的内容拖进去。
    • 注意:不要直接把整个 dist 文件夹作为一个子目录扔进去,最好解压后把里面的文件放到目标目录下。
  2. 命令行 SCP/SFTP:

    # 在本地终端执行
    scp -r dist/* root@你的服务器IP:/opt/myapp/
  3. CI/CD 自动化(进阶):

    • 如果团队规模大了,建议用 GitHub Actions、GitLab CI 或者 Jenkins。代码 push 后自动触发构建并部署到服务器,避免手动上传出错。

第三步:安装并配置 Nginx(关键步骤)

这是大多数人卡住的地方。你直接把文件丢进 Apache 的 htdocs 也能跑,但生产环境几乎都用 Nginx,因为它性能好且配置灵活。

1. 安装 Nginx

以 CentOS/Alibaba Cloud Linux 为例:

yum install nginx -y
systemctl start nginx
systemctl enable nginx

2. 配置 Nginx

编辑配置文件,通常在 /etc/nginx/conf.d/default.conf 或者 /etc/nginx/nginx.conf。

场景 A:单页应用(SPA,如 Vue/React Router)
如果你的路由是 history 模式,必须配置 try_files,否则刷新页面会 404。

server {
    listen       80;
    server_name  your_domain.com; # 或者填你的服务器IP

    root /opt/myapp; # 指向你上传文件的目录
    index index.html;

    location / {
        try_files $uri $uri/ /index.html; # 核心配置:所有找不到的文件都重定向到 index.html
    }

    # 可选:开启 gzip 压缩,提升加载速度
    gzip on;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/json image/png image/jpeg;
}

场景 B:多页应用或多资源服务
如果只是纯静态展示,没有复杂的路由跳转:

server {
    listen       80;
    server_name  your_domain.com;

    root /opt/myapp;
    index index.html;

    location / {
        autoindex on; # 可选:如果没写 index.html,会显示目录列表(生产环境建议关掉)
    }
}

3. 重载配置

nginx -t # 检查配置是否有语法错误
nginx -s reload # 平滑重启

第四步:防火墙与安全组设置

这一步经常被忽略,导致你明明配好了,外面还是访问不了。

  1. 云厂商控制台:去阿里云/腾讯云/华为云的后台,找到“安全组”规则。确保 TCP 80 端口(HTTP)和 443 端口(HTTPS)是放行的。
  2. 系统防火墙:如果在服务器上自己开了 firewalld 或 ufw,也要放行 80 端口。
    # firewalld 示例
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    firewall-cmd --reload

第五步:访问测试

打开浏览器,输入 http://你的服务器IP 或者绑定的域名。

  • 如果看到你的网页,恭喜你,成功了。
  • 如果出现 403 Forbidden:检查文件权限。Nginx 用户(通常是 nginx 或 www-data)需要有读取权限。
    chmod -R 755 /opt/myapp
    chown -R nginx:nginx /opt/myapp # CentOS 下可能是 www-data
  • 如果出现 空白页或 JS 报错:回到第一步,检查 publicPath 是否正确。如果图片不显示,检查路径是否带了多余的斜杠。

常见问题排查 Tips

  1. CSS/JS 加载失败(404):

    • 90% 是因为打包时的 publicPath 配置问题。如果是根路径部署,确保不是 /./assets/... 这种奇怪的路径。
    • 检查 Nginx 的 root 路径是否真的指向了你上传文件的父级目录。
  2. 刷新页面 404:

    • 确认你是否加了 try_files $uri $uri/ /index.html;。这是 SPA 应用的标配。
  3. HTTPS 证书:

    • 现在浏览器对 HTTP 有标记,建议申请免费 SSL 证书(Let’s Encrypt 或云厂商提供的)。
    • 在 Nginx 中配置 listen 443 ssl; 并指向证书文件即可。
  4. 缓存问题:

    • 上线后更新代码,用户可能看不到新版本。建议在 Vite/Webpack 配置中开启文件名哈希(hash),这样每次构建生成的文件名都会变,浏览器会自动拉取新文件。

总结

流程就是:本地 Build -> SFTP 上传 -> Nginx 配置 root 和 try_files -> 开防火墙 -> 访问。

别把问题想得太复杂,核心就两点:文件得放对地方,Nginx 得告诉它怎么解析请求。尤其是 Vue/React 这类单页应用,try_files 那行配置是灵魂。