在同一个域名下部署多个Vue项目是常见的需求,比如将管理后台和用户端部署在同一域名的不同路径下。以下是详细的配置方法:
这是最常用的方法,通过URL路径来区分不同的Vue项目。
在每个Vue项目中,修改vue.config.js
(Vue CLI)或vite.config.js
(Vite):
// 项目A (假设部署在 /admin)
module.exports = {
publicPath: process.env.NODE_ENV === 'production' ? '/admin/' : '/',
// 其他配置...
}
// 项目B (假设部署在 /app)
module.exports = {
publicPath: process.env.NODE_ENV === 'production' ? '/app/' : '/',
// 其他配置...
}
server {
listen 80;
server_name yourdomain.com;
# 项目A - 管理后台
location /admin {
alias /path/to/project-a/dist;
try_files $uri $uri/ /admin/index.html;
# 如果使用Vite可能需要添加这些头
add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
expires off;
}
# 项目B - 用户端
location /app {
alias /path/to/project-b/dist;
try_files $uri $uri/ /app/index.html;
# 同上
add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
expires off;
}
# 默认重定向
location / {
return 301 /app;
}
# 处理静态资源
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public";
}
}
alias
而不是root
,因为root
会将location路径包含在内try_files
确保Vue的路由能正常工作如果需要使用子域名区分项目,配置如下:
# 管理后台 - admin.yourdomain.com
server {
listen 80;
server_name admin.yourdomain.com;
root /path/to/project-a/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
# 用户端 - app.yourdomain.com
server {
listen 80;
server_name app.yourdomain.com;
root /path/to/project-b/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
如果项目后端API也在同一域名下,可以使用反向代理:
server {
listen 80;
server_name yourdomain.com;
# 项目A
location /admin {
alias /path/to/project-a/dist;
try_files $uri $uri/ /admin/index.html;
}
# 项目B
location /app {
alias /path/to/project-b/dist;
try_files $uri $uri/ /app/index.html;
}
# API代理
location /api/admin {
proxy_pass http://admin-backend;
# 其他代理配置...
}
location /api/app {
proxy_pass http://app-backend;
# 其他代理配置...
}
}
路由404问题:
try_files $uri $uri/ /path/to/index.html
静态资源加载失败:
CSS/JS路径错误:
跨域问题:
通过以上配置,你可以在同一Nginx服务器上高效地托管多个Vue项目,同时保持良好的性能和可维护性。