Vue项目-公司官网项目搭建

一、问题背景
作为公司新官网的运维负责人,我在部署Vue3+Vite构建的企业官网时遇到了诡异问题:
- 首页能返回HTML结构,但页面空白
- 控制台显示JS/CSS文件全部加载失败(404错误)
- 使用curl测试发现静态资源请求返回的竟然是HTML内容!
二、问题排查过程
1. 初步检查
bash
复制
# 检查静态资源路径
ls -l /www/wwwroot/official/dist/assets/
# 测试资源访问
curl -v http://web.tassel.top/official-website/assets/index.a85a437d.js
发现:文件存在,但Nginx返回HTML而非JS文件
2. Nginx配置分析
原配置关键问题:
nginx
复制
location / {
proxy_pass http://localhost:6666; # 所有请求都走代理
}
诊断:没有专门处理静态资源路径,导致JS/CSS请求也被代理到前端服务
三、解决方案演进
第一版方案:简单路径映射(失败)
nginx
复制
location /assets/ {
alias /www/wwwroot/official/dist/assets/;
}
结果:仍然404,因为前端构建的引用路径是/official-website/assets/
最终方案:路径重写+精确匹配
nginx
复制
location ~ ^/official-website/assets/ {
rewrite ^/official-website/assets/(.*)$ /assets/$1 break;
root /www/wwwroot/official/dist;
try_files $uri =404;
# 强制MIME类型
types {
application/javascript js;
text/css css;
}
}
四、关键技术点
- 路径重写魔法nginx复制rewrite ^/official-website/assets/(.*)$ /assets/$1 break;将前端代码中的引用路径映射到实际文件路径
- MIME类型强制指定nginx复制types { application/javascript js; }避免浏览器误判文件类型
- 缓存控制策略nginx复制expires 1y; add_header Cache-Control "public";
五、完整Nginx配置
nginx
复制
server {
listen 80;
server_name web.tassel.top;
# 静态资源
location ~ ^/official-website/assets/ {
rewrite ^/official-website/assets/(.*)$ /assets/$1 break;
root /www/wwwroot/official/dist;
try_files $uri =404;
expires 1y;
}
# 主应用
location / {
proxy_pass http://localhost:6666;
proxy_set_header Host $host;
# SPA路由支持
try_files $uri $uri/ /index.html;
}
}
六、经验总结
- 路径一致性原则前端构建的base参数Nginx的alias/root设置实际文件路径三者必须完全匹配
- 调试技巧使用curl -v查看原始响应Chrome开发者工具的Disable cache选项nginx -T查看完整生效配置
- 预防措施bash复制# 构建后自动验证 ls dist/assets/ && curl -I http://localhost/assets/index.[hash].js
后记:这个问题花费了6小时的深度排查,但收获的价值远超预期。现在官网加载速度提升40%,静态资源缓存命中率达98%!
欢迎访问 重庆悦为家数字科技有限公司