# HTTPS部署配置说明

## 问题说明

在HTTPS访问情况下，**不能直接使用 `http://127.0.0.1:30313` 请求后端接口**，因为会出现**混合内容（Mixed Content）**问题：
- 浏览器会阻止从HTTPS页面请求HTTP资源
- 控制台会报错：`Mixed Content: The page at 'https://...' was loaded over HTTPS, but requested an insecure resource 'http://...'`

## 解决方案

### 方案一：通过Nginx代理（推荐）

#### 1. 修改前端环境变量配置

在生产环境打包时，需要创建 `.env.production` 文件，设置API路径为相对路径：

```bash
# .env.production
VUE_APP_BASE_API=/dev-api
```

这样前端打包后，所有API请求都会使用 `/dev-api` 作为前缀，例如：
- 原请求：`http://127.0.0.1:30313/system/user/list`
- 打包后：`/dev-api/system/user/list`
- 实际请求：`https://jarvis.van333.cn/dev-api/system/user/list`

#### 2. 使用提供的nginx配置

已创建 `nginx-https.conf` 配置文件，包含以下关键配置：

```nginx
# API代理配置
location /dev-api/ {
    proxy_pass http://127.0.0.1:30313/;  # 后端服务地址
    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;
}
```

**工作原理：**
- 用户访问：`https://jarvis.van333.cn/dev-api/system/user/list`
- Nginx代理转发到：`http://127.0.0.1:30313/system/user/list`
- 后端处理请求，返回结果
- Nginx将结果返回给用户（通过HTTPS）

#### 3. 部署步骤

1. **创建生产环境配置文件**（如果不存在）：
   ```bash
   # 在项目根目录创建 .env.production
   echo "VUE_APP_BASE_API=/dev-api" > .env.production
   ```

2. **打包前端项目**：
   ```bash
   npm run build:prod
   ```

3. **部署到服务器**：
   ```bash
   # 将 dist 目录内容复制到 /www/sites/jarvis.van333.cn/index/
   ```

4. **更新nginx配置**：
   ```bash
   # 将 nginx-https.conf 内容替换到你的nginx配置
   # 或直接使用：sudo cp nginx-https.conf /etc/nginx/sites-available/jarvis.van333.cn
   ```

5. **重启nginx**：
   ```bash
   sudo nginx -t  # 测试配置
   sudo nginx -s reload  # 重新加载配置
   ```

### 方案二：后端也配置HTTPS（不推荐）

如果后端也配置HTTPS，可以直接使用 `https://127.0.0.1:30313`，但这样会增加配置复杂度。

## 注意事项

### 1. API路径匹配

确保nginx的 `location` 路径与前端 `VUE_APP_BASE_API` 配置一致：
- 如果 `VUE_APP_BASE_API=/dev-api`，则nginx配置 `location /dev-api/`
- 如果 `VUE_APP_BASE_API=/api`，则nginx配置 `location /api/`

### 2. 路径重写

当前配置中，nginx会将 `/dev-api/xxx` 转发到 `http://127.0.0.1:30313/xxx`（去掉 `/dev-api` 前缀）。

如果后端需要保留前缀，可以修改为：
```nginx
location /dev-api/ {
    proxy_pass http://127.0.0.1:30313/dev-api/;  # 保留前缀
    # ... 其他配置
}
```

### 3. WebSocket支持

如果后端使用了WebSocket，nginx配置中已包含相关设置：
```nginx
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
```

### 4. 超时设置

已配置600秒超时，适合长时间运行的接口。可根据实际需求调整。

## 验证配置

部署后，可以通过以下方式验证：

1. **浏览器开发者工具**：
   - 打开 `https://jarvis.van333.cn`
   - F12 打开开发者工具
   - Network 标签查看API请求
   - 确认请求URL为 `https://jarvis.van333.cn/dev-api/...`
   - 确认没有混合内容错误

2. **测试API请求**：
   ```bash
   curl -k https://jarvis.van333.cn/dev-api/system/user/list
   ```

3. **检查nginx日志**：
   ```bash
   tail -f /www/sites/jarvis.van333.cn/log/access.log
   tail -f /www/sites/jarvis.van333.cn/log/error.log
   ```

## 常见问题

### Q: 为什么前端请求还是显示 `http://127.0.0.1:30313`？

A: 检查是否创建了 `.env.production` 文件，并且重新打包了项目。

### Q: 出现 502 Bad Gateway 错误？

A: 
1. 检查后端服务是否运行在 `127.0.0.1:30313`
2. 检查nginx配置中的 `proxy_pass` 地址是否正确
3. 检查防火墙是否允许nginx访问后端端口

### Q: 出现 404 Not Found 错误？

A:
1. 检查nginx的 `location /dev-api/` 配置是否正确
2. 检查后端接口路径是否正确
3. 查看nginx错误日志：`tail -f /www/sites/jarvis.van333.cn/log/error.log`

