欢迎光临本地信息咨询网
详情描述

1. 项目结构规划

/var/www/
├── vue-app1/          # 第一个Vue项目
│   ├── dist/
│   └── ...
├── vue-app2/          # 第二个Vue项目
│   ├── dist/
│   └── ...
└── backend/          # 后端API
    └── ...

2. Vue项目配置

每个Vue项目的配置(vue.config.js)

// vue-app1/vue.config.js
module.exports = {
  publicPath: process.env.NODE_ENV === 'production' ? '/app1/' : '/',
  outputDir: 'dist',
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:3000', // 后端地址
        changeOrigin: true
      }
    }
  }
}

// vue-app2/vue.config.js
module.exports = {
  publicPath: process.env.NODE_ENV === 'production' ? '/app2/' : '/',
  outputDir: 'dist',
  // ... 其他配置
}

3. Nginx配置(核心部分)

主配置文件:/etc/nginx/nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
}

http {
    # 基础配置
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    # 日志格式
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # 启用gzip压缩
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_types text/plain text/css text/xml application/javascript application/json;

    # 包含站点配置
    include /etc/nginx/sites-enabled/*;
}

站点配置文件:/etc/nginx/sites-available/multi-vue-apps

server {
    listen 80;
    server_name your-domain.com;  # 替换为你的域名
    root /var/www;
    index index.html;

    # 第一个Vue应用 - app1
    location /app1/ {
        alias /var/www/vue-app1/dist/;
        try_files $uri $uri/ /app1/index.html;

        # 缓存静态资源
        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
            expires 1y;
            add_header Cache-Control "public, immutable";
        }
    }

    # 第二个Vue应用 - app2
    location /app2/ {
        alias /var/www/vue-app2/dist/;
        try_files $uri $uri/ /app2/index.html;

        # 缓存静态资源
        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
            expires 1y;
            add_header Cache-Control "public, immutable";
        }
    }

    # 统一的API后端(共用配置)
    location /api/ {
        proxy_pass http://localhost:3000;  # 后端服务器地址
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;

        # CORS配置(如果需要)
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization';

        # 处理预检请求
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain; charset=utf-8';
            add_header 'Content-Length' 0;
            return 204;
        }
    }

    # WebSocket支持(如果需要)
    location /ws/ {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # 静态资源缓存
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg|eot)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        access_log off;
    }

    # 错误页面
    error_page 404 /404.html;
    location = /404.html {
        internal;
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        internal;
    }
}

4. 启用和测试配置

# 创建符号链接
sudo ln -s /etc/nginx/sites-available/multi-vue-apps /etc/nginx/sites-enabled/

# 测试配置语法
sudo nginx -t

# 重新加载Nginx
sudo systemctl reload nginx
# 或
sudo nginx -s reload

5. HTTPS配置(可选)

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    # SSL配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 其余配置与上面相同...
}

# HTTP重定向到HTTPS
server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$server_name$request_uri;
}

6. 部署脚本示例

#!/bin/bash
# deploy.sh

# 构建Vue应用
echo "构建vue-app1..."
cd /var/www/vue-app1
npm run build

echo "构建vue-app2..."
cd /var/www/vue-app2
npm run build

# 重启后端服务
echo "重启后端服务..."
cd /var/www/backend
pm2 restart all

# 重新加载Nginx
echo "重新加载Nginx配置..."
sudo nginx -s reload

echo "部署完成!"

7. 注意事项

跨域问题:如果前端应用和后端不在同一域名下,需要正确配置CORS 路径问题:确保Vue项目中的路由使用history模式时,Nginx配置正确处理 静态资源缓存:合理配置缓存策略 负载均衡:如果后端有多个实例,可以配置upstream:
upstream backend_servers {
    least_conn;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
    server 127.0.0.1:3003;
}

location /api/ {
    proxy_pass http://backend_servers;
    # ... 其他配置
}

这样配置后,你就可以通过以下URL访问不同应用:

  • http://your-domain.com/app1/ - 第一个Vue应用
  • http://your-domain.com/app2/ - 第二个Vue应用
  • http://your-domain.com/api/ - 共用后端API

所有应用都使用同一套后端API服务,便于维护和管理。

相关帖子
如何建立一份简单有效的家庭储蓄进度可视化记录表?
如何建立一份简单有效的家庭储蓄进度可视化记录表?
如何为自己设定一个合理的“数字宵禁”,从而告别无意义的熬夜?
如何为自己设定一个合理的“数字宵禁”,从而告别无意义的熬夜?
当感受到来自网络环境的巨大压力时,有哪些可靠的方法和渠道可以帮助我们暂时脱离并寻求疏导?
当感受到来自网络环境的巨大压力时,有哪些可靠的方法和渠道可以帮助我们暂时脱离并寻求疏导?
频繁查询个人信用报告,是否真的会对自己的信用评分产生负面影响?
频繁查询个人信用报告,是否真的会对自己的信用评分产生负面影响?
2026年新农合个人缴费标准是多少?参保缴费的起止时间具体是哪几个月?
2026年新农合个人缴费标准是多少?参保缴费的起止时间具体是哪几个月?
马上消费金融利率,安逸花借款利息计算
马上消费金融利率,安逸花借款利息计算
在涉及遗产继承或抚养权纠纷时,出生医学证明能提供怎样的法律依据?
在涉及遗产继承或抚养权纠纷时,出生医学证明能提供怎样的法律依据?
智能玩具联网功能背后的数据安全与儿童隐私保护,家长应了解哪些知识?
智能玩具联网功能背后的数据安全与儿童隐私保护,家长应了解哪些知识?
个人债务优化重组申请流程有哪些步骤?从申请到落地全解析
个人债务优化重组申请流程有哪些步骤?从申请到落地全解析
更年期后,女性在职业生涯和个人兴趣发展上可能迎来哪些新机遇?
更年期后,女性在职业生涯和个人兴趣发展上可能迎来哪些新机遇?
汽车贷款期限包含宽限期吗?还款日与期限的计算
汽车贷款期限包含宽限期吗?还款日与期限的计算
除了便捷性,预制菜在执行的食品安全标准上与餐厅现做菜有何异同?
除了便捷性,预制菜在执行的食品安全标准上与餐厅现做菜有何异同?
写字楼门店抵押贷款负债率高怎么办?降低负债率提高批贷成功率
写字楼门店抵押贷款负债率高怎么办?降低负债率提高批贷成功率
商铺门面房抵押贷款保险必须买吗?财产保险与抵押贷款保险区别
商铺门面房抵押贷款保险必须买吗?财产保险与抵押贷款保险区别
面对2026年的市场环境,独立开发者应聚焦解决用户的哪些痛点?
面对2026年的市场环境,独立开发者应聚焦解决用户的哪些痛点?
别墅抵押贷款LPR怎么影响利率?LPR调整与月供变化关系解读
别墅抵押贷款LPR怎么影响利率?LPR调整与月供变化关系解读
如何通过角色扮演类玩具,有效培养孩子的同理心与情绪管理能力?
如何通过角色扮演类玩具,有效培养孩子的同理心与情绪管理能力?
过桥垫资让与担保效力?名为买卖实为借贷
过桥垫资让与担保效力?名为买卖实为借贷
别墅抵押贷款可以抵押给典当行吗?典当行别墅抵押贷款利弊
别墅抵押贷款可以抵押给典当行吗?典当行别墅抵押贷款利弊
公司经营贷款集团授信流程,企业集团统一授信
公司经营贷款集团授信流程,企业集团统一授信