flnxi-Wu/docs/guides/HTTPS_SETUP.md
WuYongJie f646b71813
Some checks failed
CI Check / check (push) Has been cancelled
chore: 初始化本地仓库并同步最近改动
2025-11-18 17:50:16 +08:00

430 lines
8.9 KiB
Markdown
Raw 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 配置指南 - 3D.YYDD.AI
## 概述
为域名 `3D.YYDD.AI` 配置免费的 HTTPS 证书(Let's Encrypt)
**服务器信息:**
- 公网IP:180.97.221.140
- 域名:3D.YYDD.AI
- 当前端口:2320 (HTTP)
- 目标:配置 443 端口 (HTTPS)
- 架构:云服务器 → FRP穿透 → NAS服务器
## 方案选择
### 方案一:Nginx + Certbot(推荐)
适用于云服务器上直接配置反向代理
### 方案二:Cloudflare SSL(最简单)
适用于使用 Cloudflare 作为 DNS 解析
## 方案一:Nginx + Let's Encrypt(免费证书)
### 1. 在云服务器上安装 Nginx 和 Certbot
```bash
# SSH 登录到云服务器 180.97.221.140
ssh root@180.97.221.140
# CentOS/RHEL
sudo yum install -y nginx certbot python3-certbot-nginx
# Ubuntu/Debian
sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx
```
### 2. 配置 Nginx 反向代理
创建配置文件:`/etc/nginx/conf.d/3d-yydd-ai.conf`
```nginx
# HTTP 配置(用于 Let's Encrypt 验证和重定向)
server {
listen 80;
server_name 3d.yydd.ai www.3d.yydd.ai;
# Let's Encrypt 验证目录
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
# 其他请求重定向到 HTTPS
location / {
return 301 https://$server_name$request_uri;
}
}
# HTTPS 配置
server {
listen 443 ssl http2;
server_name 3d.yydd.ai www.3d.yydd.ai;
# SSL 证书路径(稍后由 certbot 自动填充)
ssl_certificate /etc/letsencrypt/live/3d.yydd.ai/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/3d.yydd.ai/privkey.pem;
# SSL 优化配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 安全头部
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
# 反向代理到 NAS 服务器(通过 FRP 穿透)
location / {
# 代理到 FRP 映射的本地端口
proxy_pass http://127.0.0.1:2320;
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;
# 大文件上传支持
client_max_body_size 10240M;
proxy_request_buffering off;
# 超时设置
proxy_connect_timeout 3600s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
}
}
```
### 3. 创建证书验证目录
```bash
sudo mkdir -p /var/www/certbot
sudo chown -R nginx:nginx /var/www/certbot
```
### 4. 测试 Nginx 配置
```bash
sudo nginx -t
```
### 5. 启动 Nginx
```bash
sudo systemctl start nginx
sudo systemctl enable nginx
```
### 6. 获取 Let's Encrypt 证书
```bash
# 确保域名已经解析到 180.97.221.140
# 可以用 ping 或 nslookup 验证
ping 3d.yydd.ai
# 获取证书
sudo certbot --nginx -d 3d.yydd.ai -d www.3d.yydd.ai
# 按照提示操作:
# 1. 输入邮箱(用于证书过期提醒)
# 2. 同意服务条款
# 3. 选择是否重定向 HTTP 到 HTTPS(选择 2 - 强制 HTTPS)
```
### 7. 验证证书
```bash
# 查看证书信息
sudo certbot certificates
# 测试自动续期
sudo certbot renew --dry-run
```
### 8. 设置自动续期
Let's Encrypt 证书有效期为 90 天,需要定期续期:
```bash
# Certbot 会自动创建 cron 任务
# 查看续期任务
sudo systemctl status certbot-renew.timer
# 手动续期(测试)
sudo certbot renew
```
## 方案二:Cloudflare SSL(零配置)
如果域名使用 Cloudflare 作为 DNS:
### 1. 登录 Cloudflare
访问:https://dash.cloudflare.com
### 2. 添加域名(如果还没有)
- 添加站点:YYDD.AI
- 按照提示修改域名服务器
### 3. 配置 DNS 记录
```
类型 名称 内容 代理状态
A 3d 180.97.221.140 已代理(橙色云朵)
```
### 4. 配置 SSL/TLS
在 Cloudflare 面板:
1. **SSL/TLS** → **概述**
- 选择:**灵活(Flexible)** 或 **完全(Full)**
- 灵活:Cloudflare到用户HTTPS,Cloudflare到服务器HTTP
- 完全:两端都使用HTTPS(推荐,但需要服务器有证书)
2. **SSL/TLS** → **边缘证书**
- 启用:始终使用 HTTPS
- 自动 HTTPS 重写:开启
- 最低 TLS 版本:TLS 1.2
### 5. 修改 Nginx 配置(使用 Cloudflare)
```nginx
server {
listen 80;
server_name 3d.yydd.ai;
location / {
proxy_pass http://127.0.0.1:2320;
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;
client_max_body_size 10240M;
proxy_request_buffering off;
}
}
```
优势:
- ✓ 零配置,Cloudflare 自动提供 SSL
- ✓ 免费 CDN 加速
- ✓ DDoS 防护
- ✓ 自动续期
## 方案三:acme.sh(轻量级)
### 1. 安装 acme.sh
```bash
curl https://get.acme.sh | sh
source ~/.bashrc
```
### 2. 获取证书(DNS验证)
```bash
# 使用 DNS API(推荐)
export CF_Token="你的Cloudflare_API_Token"
export CF_Account_ID="你的Cloudflare_Account_ID"
acme.sh --issue --dns dns_cf -d 3d.yydd.ai -d www.3d.yydd.ai
```
### 3. 安装证书到 Nginx
```bash
acme.sh --install-cert -d 3d.yydd.ai \
--key-file /etc/nginx/ssl/3d.yydd.ai.key \
--fullchain-file /etc/nginx/ssl/3d.yydd.ai.crt \
--reloadcmd "systemctl reload nginx"
```
## FRP 配置调整
如果需要在 NAS 服务器上配置 HTTPS,需要修改 FRP 配置:
### 在云服务器(frps.toml)
```toml
bindPort = 7000
vhostHTTPPort = 2320 # HTTP
vhostHTTPSPort = 2443 # HTTPS(新增)
```
### 在 NAS 服务器(frpc.toml)
```toml
serverAddr = "180.97.221.140"
serverPort = 7000
[[proxies]]
name = "youyidian-3d-http"
type = "http"
localIP = "127.0.0.1"
localPort = 4320
customDomains = ["3d.yydd.ai"]
[[proxies]]
name = "youyidian-3d-https"
type = "https"
localIP = "127.0.0.1"
localPort = 4320
customDomains = ["3d.yydd.ai"]
```
## 验证 HTTPS
### 1. 浏览器访问
```
https://3d.yydd.ai
```
### 2. 命令行测试
```bash
# 测试 SSL 证书
curl -I https://3d.yydd.ai
# 详细 SSL 信息
openssl s_client -connect 3d.yydd.ai:443 -servername 3d.yydd.ai
```
### 3. 在线工具
- SSL Labs测试:https://www.ssllabs.com/ssltest/
- 输入:3d.yydd.ai
- 目标评分:A 或 A+
## 常见问题
### 1. 证书获取失败
```bash
# 检查域名解析
nslookup 3d.yydd.ai
dig 3d.yydd.ai
# 检查80端口是否开放
sudo firewall-cmd --list-all
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
```
### 2. Nginx 启动失败
```bash
# 查看错误日志
sudo journalctl -u nginx -f
# 检查配置语法
sudo nginx -t
# 查看端口占用
sudo netstat -tlnp | grep :80
sudo netstat -tlnp | grep :443
```
### 3. 证书过期
```bash
# 手动续期
sudo certbot renew --force-renewal
# 查看证书有效期
sudo certbot certificates
```
### 4. 混合内容警告
如果页面有 HTTP 资源:
```nginx
# 在 Nginx 配置中添加
add_header Content-Security-Policy "upgrade-insecure-requests";
```
## 推荐方案对比
| 方案 | 难度 | 成本 | 性能 | 维护 |
|-----|------|------|------|------|
| Nginx + Certbot | ⭐⭐⭐ | 免费 | 高 | 自动续期 |
| Cloudflare | ⭐ | 免费 | 高(CDN) | 零维护 |
| acme.sh | ⭐⭐ | 免费 | 高 | 自动续期 |
## 建议
**如果域名已在 Cloudflare:**
→ 使用 **方案二(Cloudflare SSL)**
- 最简单,零配置
- 免费 CDN 加速
- 自动 HTTPS
**如果需要完全控制:**
→ 使用 **方案一(Nginx + Certbot)**
- 完全掌控
- 性能最佳
- 适合企业环境
## 部署步骤总结
### 快速部署(Cloudflare)
```bash
1. Cloudflare 添加 DNS 记录
A 3d 180.97.221.140 代理(橙色)
2. 启用 SSL/TLS(灵活模式)
3. 完成!访问 https://3d.yydd.ai
```
### 完整部署(Nginx + Let's Encrypt)
```bash
1. 安装 Nginx 和 Certbot
sudo yum install -y nginx certbot python3-certbot-nginx
2. 配置 Nginx
sudo vi /etc/nginx/conf.d/3d-yydd-ai.conf
3. 启动 Nginx
sudo systemctl start nginx
4. 获取证书
sudo certbot --nginx -d 3d.yydd.ai
5. 完成!访问 https://3d.yydd.ai
```
## 下一步
1. ✅ 修复 TypeScript 编译错误
2. ✅ 重新部署到 Docker
3. ⏳ 配置域名 DNS 解析
4. ⏳ 选择并实施 HTTPS 方案
5. ⏳ 测试 HTTPS 访问
---
**配置时间:** 2025-10-26
**域名:** 3D.YYDD.AI
**服务器:** 180.97.221.140
**状态:** 待配置