子域名的申请和反向代理配置

之前不是在腾讯云中购买了一个域名和服务器嘛,然后我自己的网站是 baikelwang.github.io,现在我想给自己的网站申请一个子域名,这样国内也能解析到,就不会被墙了。

创建子域名

找到腾讯云的云解析 DNS,然后点击你的域名。

然后点击添加域名解析,创建一条如是的解析记录

请注意,一定要 CNAME 类型,然后填你的 github 网站,不要用 ip 地址!

配置 caddy

关于 caddy 为什么要配置,请结合 _**在腾讯云轻量级服务器中部署hugoblox静态网站 **_一文。

步骤 1:配置 Caddyfile

1
sudo nano /etc/caddy/Caddyfile

添加以下配置(替换 xxx.cn 为您的实际域名):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 主域名配置
www.xxx.cn {
reverse_proxy 127.0.0.1:1313
}

# 子域名配置 - 反向代理到 GitHub Pages
baikel.xxx.cn {
reverse_proxy https://baikelwang.github.io {
# 重要:设置正确的 Host 头
header_up Host {upstream_hostport}
# 其他必要的头设置
header_up X-Forwarded-For {remote_host}
}

# 强制 HTTPS(可选但推荐)
redir https://{host}{uri} permanent
}

步骤 2:保存并应用配置

1
2
3
# 保存文件 (Nano: Ctrl+O → Enter → Ctrl+X)
sudo caddy validate --config /etc/caddy/Caddyfile # 验证配置
sudo systemctl reload caddy # 重新加载服务

步骤 3:DNS 配置(关键)

  1. 在域名控制台检查 CNAME 记录
1
2
3
4
类型: CNAME
名称: baikel
值: baikelwang.github.io
TTL: 自动
  1. 验证 DNS 解析
1
2
dig baikel.xxx.cn +short
# 应返回 baikelwang.github.io 的 IP 地址

步骤 4:GitHub Pages 设置

  1. 在 GitHub 仓库设置中添加自定义域名:
1
Settings → Pages → Custom domain → 输入 "baikel.xxx.cn"
  1. 勾选 “Enforce HTTPS” 选项

步骤 5:验证配置

1
2
3
4
5
6
# 检查 Caddy 日志
sudo journalctl -u caddy -f --since "5 minutes ago"

# 测试访问
curl -I https://baikel.xxx.cn
# 应返回 200 OK 和 GitHub 的服务器头

步骤 6:在 hexo 中配置 cname

1
2
3
4
# 进入项目目录
cd /path/to/your/hexo/project
# 创建 CNAME 文件
echo "baikel.iamlgao.cn" > source/CNAME

高级配置选项

1. 添加 HSTS 安全头

1
2
3
4
baikel.xxx.cn {
header Strict-Transport-Security "max-age=31536000;"
# ...其他配置...
}

2. 缓存优化(提升速度)

1
2
3
4
5
6
7
8
9
10
11
12
13
baikel.xxx.cn {
reverse_proxy https://baikelwang.github.io {
header_up Host {upstream_hostport}

# 缓存静态资源
@static {
path *.css *.js *.jpg *.png *.gif
}
reverse_proxy_cache @static {
duration 24h
}
}
}

3. 备用方案(如果反向代理有问题)

1
2
3
4
5
6
7
8
baikel.xxx.cn {
# 直接重定向(不保留URL路径)
redir https://baikelwang.github.io{uri} permanent

# 或保留完整路径的重定向
rewrite * /{path}?{query}
redir https://baikelwang.github.io{uri} permanent
}

常见问题解决

问题:访问显示 404 或 GitHub 404 页面

  • 检查 GitHub 仓库设置中是否添加了 baikel.xxx.cn
  • 在仓库根目录添加 CNAME 文件(内容为 baikel.xxx.cn

问题:SSL 证书错误

1
2
3
# 强制重新申请证书
sudo rm -rf /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/baikel.xxx.cn*
sudo systemctl restart caddy

问题:内容更新延迟

  • GitHub Pages 有 1-10 分钟的缓存延迟
  • 在 Caddy 配置中添加缓存清除机制:
1
header Cache-Control "public, max-age=300"  # 5分钟缓存

完成以上步骤后,baikel.xxx.cn 将作为子域名指向GitHub Pages 网站,并通过 Caddy 自动获得 SSL 证书。整个过程通常需要 5-30 分钟生效(主要取决于 DNS 传播时间)。


子域名的申请和反向代理配置
http://baikelwang.github.io/2025/07/11/子域名的申请和反向代理/
作者
北海
发布于
2025年7月11日
许可协议