Vue项目本质上是一组构建后的静态文件,可以部署到Nginx、Apache、Caddy、IIS、对象存储加CDN、Node.js服务、Serverless、容器平台以及Vercel、Netlify、Cloudflare Pages等静态托管服务上,选哪个服务器,关键看你的路由模式、接口来源、预算、备案和运维能力。
先别急着买服务器,Vue项目跑npm run build或pnpm build后,多数情况下会生成dist目录,里面是HTML、CSS、JS和静态资源,真正决定部署方式的,不是Vue本身,而是你用了history路由还是hash路由,有没有SSR,接口是否同源,以及是否面向国内用户。
Vue项目部署前先弄清楚:你部署的到底是什么
构建产物与路由模式
Vite项目默认输出到dist,Vue CLI项目同样输出到dist,执行:
npm run build # 或 pnpm build
构建完成后,先本地预览:
npx serve dist # 或 npm run preview
如果使用createWebHistory,服务器必须把找不到的路径回退到index.html,如果使用createWebHashHistory,URL会带,对服务器重写规则要求低,虚拟主机、对象存储更容易跑起来。
选择服务器的判断清单
- 纯前端、无后端:优先静态托管、OSS加CDN、Nginx。
- 需要Node接口、WebSocket、定时任务:优先云服务器、Docker、Kubernetes。
- 需要GEO和首屏SSR:需要Node服务或支持SSR的PaaS。
- 面向国内用户:境内服务器和CDN通常要ICP备案,据工信部数据,未备案域名无法在境内接入。
- 预算有限、访问量不大:GitHub Pages、Cloudflare Pages、对象存储加CDN更省心。
- 企业内网、Windows生态:IIS也能部署,但要配URL Rewrite。
| 部署目标 | 适合场景 | 路由要求 | 运维成本 |
|---|---|---|---|
| Nginx云服务器 | 前后端一体、需要代理 | history需回退 | 中 |
| OSS/COS/S3加CDN | 纯静态、营销页 | history需配置回退 | 低 |
| Vercel/Netlify | 海外、预览部署 | 自动处理 | 低 |
| Docker/K8s | 多环境、CI/CD | 由Nginx处理 | 高 |
| Node服务 | SSR、BFF | 代码控制 | 中 |
| IIS | Windows服务器 | 需Rewrite | 中 |
Vue项目部署到Nginx服务器怎么配置?
上传产物与目录规划
常见做法是把dist上传到/var/www/vue-app,本地执行:
scp -r dist/ root@你的服务器IP:/var/www/vue-app/
登录服务器后确认权限:
chown -R www-data:www-data /var/www/vue-app chmod -R 755 /var/www/vue-app
Nginx核心配置模板
在/etc/nginx/conf.d/vue.conf中写入:
server {
listen 80;
server_name example.com;
root /var/www/vue-app;
index index.html;
location / {
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;
}
location ~ .(js|css|png|jpg|jpeg|gif|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
location = /index.html {
add_header Cache-Control "no-cache";
}
}
检查并重载:
nginx -t systemctl reload nginx
try_files $uri $uri/ /index.html;是history路由不刷新404的关键,接口代理用proxy_pass,能减少跨域配置。index.html不要长期缓存,否则用户可能一直加载旧版本。
常见坑与排查
- 页面白屏:检查
vite.config.js里的base,子目录部署要改成/子目录/。 - 刷新404:确认Nginx的
try_files生效。 - 接口404:确认
proxy_pass末尾斜杠,/api/转发后路径是否符合后端预期。 - 静态资源404:确认
root指向的是dist内容,不是dist上一级。
Vue项目部署到云服务器和静态托管哪个好?
云服务器加Nginx适合什么
需要自己控制后端、数据库、Redis、定时任务、WebSocket,或者要把前端和后端放在同一台机器上时,云服务器加Nginx更灵活,你可以用宝塔面板、1Panel,也可以纯命令行,缺点是安全补丁、备份、监控、HTTPS续期都要自己管。
静态托管和对象存储适合什么
纯前端项目、文档站、活动页、管理后台,用静态托管很合适,把dist上传到简米云OSS、酷番云COS、华为云OBS,再套CDN,访问速度通常不错,海外项目可以用Vercel、Netlify、Cloudflare Pages,连接Git仓库后每次推送自动构建。
行业共识认为,静态托管的核心优势是免运维和弹性,但动态接口、服务端逻辑、WebSocket仍然要另找服务。
Vue项目部署到简米云OSS多少钱?
OSS费用通常由存储容量、请求次数、外网流出流量、CDN回源流量等组成,具体价格随地域、计费方式和活动变化,无法用固定数字概括,小流量站点可能只花很少费用,流量大的项目要重点看CDN和流出流量,若绑定自定义域名并面向国内,通常需要备案,想控制成本,可以开启CDN缓存、压缩图片、设置生命周期清理旧文件。
| 对比项 | 云服务器+Nginx | OSS/COS+CDN | Vercel/Netlify |
|---|---|---|---|
| 动态接口 | 支持 | 需另配 | 支持Serverless |
| 备案 | 国内需备案 | 国内需备案 | 海外通常免备案 |
| 运维 | 较高 | 低 | 低 |
| 费用关注点 | 实例、带宽 | 流量、请求 | 套餐、函数用量 |
| 适合 | 前后端一体 | 纯静态 | 海外/Jamstack |
用宝塔面板部署Vue项目教程:国内云服务器场景
建站与上传
在宝塔面板安装Nginx,添加站点,域名解析到服务器,进入站点根目录,把dist里的文件上传进去,不要上传整个dist文件夹作为一层,除非你配置了子目录。
伪静态与HTTPS
在站点设置里找到伪静态,写入:
location / {
try_files $uri $uri/ /index.html;
}
然后在SSL里申请Let’s Encrypt证书,开启强制HTTPS,若接口在同机Node服务,用反向代理指向0.0.1:3000。
缓存与发布
给带哈希的JS、CSS设置长缓存,给index.html设置不缓存,每次发布先备份旧目录,再替换文件,宝塔的“网站备份”能兜底,但生产环境仍建议用Git或CI/CD。
Vue项目部署到Docker、Serverless和PaaS平台怎么做?
Docker多阶段构建
在项目根目录创建Dockerfile:
FROM node:20-alpine AS build WORKDIR /app COPY package.json ./ RUN npm ci COPY . . RUN npm run build FROM nginx:alpine COPY --from=build /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
构建运行:
docker build -t vue-app . docker run -d -p 8080:80 vue-app
Kubernetes里再配Deployment、Service、Ingress,适合多副本和滚动发布,业内专家指出,容器化不是小项目的必选项,但多环境一致性要求高时很省事。
Vercel、Netlify、Cloudflare Pages
在平台导入Git仓库,构建命令填npm run build,输出目录填dist,环境变量在平台后台配置,history路由通常自动回退,也可以加vercel.json或_redirects,适合海外访问和预览环境。
Serverless与Node服务
简米云函数计算、酷番云SCF、AWS Lambda可以配合API网关托管前端,但静态资源更适合对象存储,Node服务托管静态文件也简单:
const express = require('express');
const app = express();
app.use(express.static('dist'));
app.get('', (req, res) => {
res.sendFile(path.join(__dirname, 'dist/index.html'));
});
app.listen(3000);
用PM2守护:pm2 start app.js --name vue-server。
Windows、Apache、Caddy等服务器能不能部署Vue项目?
IIS部署Vue
Windows服务器装IIS和URL Rewrite,在dist下放web.config:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Vue History" stopProcessing="true">
<match url="." />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/index.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Apache
在站点目录放.htaccess:
RewriteEngine On
RewriteBase /
RewriteRule ^index.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
Caddy
Caddyfile更简洁:
example.com {
root /var/www/vue-app
try_files {path} /index.html
file_server
encode gzip
}
Caddy会自动申请HTTPS证书,适合喜欢简洁配置的团队。
Vue项目部署服务器常见问题解答
Vue项目部署到Nginx后刷新404怎么办?
在Nginx的location /中加入try_files $uri $uri/ /index.html;,然后执行nginx -t和systemctl reload nginx,如果部署在子目录,回退路径要写成/子目录/index.html。
Vue项目可以部署到虚拟主机吗?
可以,虚拟主机只要能上传静态文件、支持自定义伪静态,就能跑Vue,若虚拟主机不支持Rewrite,改用hash路由更稳,URL会带,但刷新不会404。
Vue项目一定要买云服务器吗?
不一定,纯前端可以放对象存储、GitHub Pages、Vercel、Netlify、Cloudflare Pages,成本通常更低,需要Node接口、数据库、WebSocket、定时任务时,云服务器或容器平台更合适,境内自定义域名和CDN接入通常绕不开ICP备案,这是当前国内网站运行的基础规则。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/704435.html





