Files
ai_dianshang/web/HTTPS_SOLUTIONS.md
2025-11-28 15:18:10 +08:00

169 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# HTTPS 跨域问题解决方案
## 问题说明
你的 Web 前端部署在 `https://gvizee.com/`HTTPS而后端 API 在 `http://104.244.91.212:8060`HTTP
这会导致两个问题:
1. **混合内容错误**HTTPS 页面无法访问 HTTP 接口(浏览器安全策略)
2. **CORS 跨域**:需要正确配置 Origin
## ✅ 推荐解决方案:使用 Nginx HTTPS 反向代理
### 步骤 1在服务器上生成 SSL 证书
```bash
# SSH 连接到你的服务器 104.244.91.212
ssh user@104.244.91.212
# 创建证书目录
sudo mkdir -p /etc/nginx/ssl
# 生成自签名证书(有效期 365 天)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/server.key \
-out /etc/nginx/ssl/server.crt \
-subj "/C=US/ST=State/L=City/O=Organization/CN=104.244.91.212"
```
### 步骤 2配置 Nginx
```bash
# 将项目根目录的 nginx-https-proxy.conf 上传到服务器
# 然后执行:
# 复制配置文件
sudo cp nginx-https-proxy.conf /etc/nginx/sites-available/api-https
# 创建软链接
sudo ln -s /etc/nginx/sites-available/api-https /etc/nginx/sites-enabled/
# 测试配置
sudo nginx -t
# 如果测试通过,重启 Nginx
sudo systemctl restart nginx
```
### 步骤 3配置防火墙
```bash
# 允许 HTTPS 端口
sudo ufw allow 443/tcp
# 检查防火墙状态
sudo ufw status
```
### 步骤 4验证 HTTPS 访问
```bash
# 测试 HTTPS 健康检查
curl -k https://104.244.91.212:8060/health
# 测试 API
curl -k https://104.244.91.212:8060/api/v1/banners
```
### 步骤 5前端配置已更新
前端代码已经更新,`gvizee.com` 域名会自动使用 HTTPS
```javascript
// web/assets/js/api.js 已更新为:
if (hostname.includes('gvizee.com')) {
return 'https://104.244.91.212:8060/api/v1';
}
```
后端 CORS 也已添加 HTTPS 支持。
---
## 🔧 方案二:临时使用 HTTP仅测试
如果暂时无法配置 HTTPS可以
### 选项 1使用 HTTP 访问前端
访问 `http://gvizee.com/`HTTP而不是 `https://gvizee.com/`HTTPS
### 选项 2临时修改前端配置
在浏览器控制台执行:
```javascript
// 临时使用 HTTP
API_DEBUG.setBaseURL('http://104.244.91.212:8060/api/v1')
location.reload()
```
**注意**:这只是临时方案,刷新页面后会失效。
---
## 📋 生产环境推荐:使用 Let's Encrypt 免费证书
对于生产环境,建议使用 Let's Encrypt 的免费 SSL 证书:
```bash
# 安装 Certbot
sudo apt update
sudo apt install certbot python3-certbot-nginx
# 自动配置 HTTPS需要域名
sudo certbot --nginx -d gvizee.com -d www.gvizee.com
# 证书会自动续期
sudo certbot renew --dry-run
```
---
## 🔍 常见问题
### Q1: 浏览器显示"不安全"警告?
**A**: 这是因为使用了自签名证书。在浏览器中点击"高级" → "继续访问"即可。生产环境请使用 Let's Encrypt 证书。
### Q2: CORS 错误还是存在?
**A**:
1. 确认后端服务已重启
2. 检查 Nginx 日志:`sudo tail -f /var/log/nginx/api_error.log`
3. 在浏览器开发者工具中检查请求头的 Origin
### Q3: 端口 8060 还需要监听吗?
**A**: 是的。架构是:
- 浏览器 → Nginx (443端口HTTPS) → 后端服务 (8060端口HTTP)
- Nginx 作为反向代理处理 HTTPS后端继续使用 HTTP
---
## 📊 架构示意图
```
浏览器 (https://gvizee.com)
↓ HTTPS
Nginx (443 端口)
↓ HTTP (内网)
Go 后端服务 (8060 端口)
```
---
## ✅ 检查清单
完成配置后,请检查:
- [ ] SSL 证书已生成
- [ ] Nginx 配置已更新并重启
- [ ] 防火墙 443 端口已开放
- [ ] 后端服务运行在 8060 端口
- [ ] 后端 CORS 配置包含 `https://gvizee.com`
- [ ] 前端代码已更新使用 HTTPS
- [ ] 浏览器能访问 `https://104.244.91.212:8060/health`
---
需要帮助?检查以下日志:
- Nginx 错误日志:`/var/log/nginx/api_error.log`
- Nginx 访问日志:`/var/log/nginx/api_access.log`
- 后端日志:查看 Go 服务的控制台输出