Hexo从零搭建到自定义Https域名绑定全攻略

一、准备工作:域名与证书的获取

1.1 域名注册与选择

在绑定自定义域名前,需选择一个可用的顶级域名(如.com/.cn)或二级域名(如blog.example.com)。推荐通过阿里云、腾讯云等正规域名注册商购买,确保域名所有权归属清晰。购买时需注意:

  • 域名需支持DNS解析功能(主流注册商默认支持)
  • 避免使用特殊字符或过长域名(影响用户体验)
  • 提前查询域名WHOIS信息,确保无注册限制

1.2 SSL证书类型选择

实现Https访问的核心是SSL/TLS证书,根据需求可选择:

  • DV证书(域名验证):适合个人博客,验证流程简单(10分钟内颁发)
  • OV证书(组织验证):需验证企业信息,适合商业网站
  • 通配符证书:覆盖主域名下所有子域名(如*.example.com)
  • 免费证书推荐:Let’s Encrypt(90天有效期,可自动续期)、Cloudflare SSL(免费版功能完整)

以Let’s Encrypt为例,获取证书的命令流程:

  1. # 安装Certbot工具
  2. sudo apt install certbot python3-certbot-nginx
  3. # 获取证书(需替换yourdomain.com为实际域名)
  4. sudo certbot certonly --manual -d yourdomain.com -d www.yourdomain.com

系统会提示创建DNS TXT记录验证域名所有权,验证通过后证书将保存在/etc/letsencrypt/live/yourdomain.com/目录。

二、DNS解析配置

2.1 添加CNAME记录

登录域名注册商控制台,进入DNS解析管理界面,添加两条记录:

  1. A记录:指向服务器IP(若使用CDN或反向代理可省略)
    1. 类型:A
    2. 主机记录:@
    3. 记录值:服务器IP(如123.123.123.123
    4. TTL600
  2. CNAME记录:指向GitHub Pages/Vercel等托管平台(若直接部署到服务器可省略)
    1. 类型:CNAME
    2. 主机记录:www
    3. 记录值:username.github.ioGitHub示例)
    4. TTL600

2.2 验证解析生效

通过nslookupdig命令检查解析是否正确:

  1. nslookup yourdomain.com
  2. # 预期输出应包含配置的IP地址或CNAME指向

三、Hexo配置文件修改

3.1 修改站点配置文件

打开Hexo根目录下的_config.yml,找到urlroot字段:

  1. url: https://yourdomain.com # 必须以https开头
  2. root: / # 若部署在子目录需修改(如/blog/)

3.2 部署到GitHub Pages的特殊配置

若使用GitHub Pages托管,需额外配置:

  1. 在项目仓库的Settings > Pages中设置自定义域名
  2. 启用Enforce HTTPS选项(GitHub会自动处理证书)
  3. 修改Hexo的_config.yml
    1. deploy:
    2. type: git
    3. repo: https://github.com/username/username.github.io.git
    4. branch: main

四、服务器环境配置(Nginx示例)

4.1 安装Nginx与SSL模块

  1. sudo apt install nginx
  2. sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

4.2 配置SSL虚拟主机

编辑Nginx配置文件(通常位于/etc/nginx/sites-available/yourdomain.com):

  1. server {
  2. listen 443 ssl;
  3. server_name yourdomain.com www.yourdomain.com;
  4. ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
  5. ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
  6. ssl_dhparam /etc/ssl/certs/dhparam.pem;
  7. ssl_protocols TLSv1.2 TLSv1.3;
  8. ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256...';
  9. ssl_prefer_server_ciphers on;
  10. root /var/www/hexo/public;
  11. index index.html;
  12. location / {
  13. try_files $uri $uri/ =404;
  14. }
  15. }
  16. # HTTP强制跳转HTTPS
  17. server {
  18. listen 80;
  19. server_name yourdomain.com www.yourdomain.com;
  20. return 301 https://$host$request_uri;
  21. }

4.3 测试并重启Nginx

  1. sudo nginx -t # 测试配置语法
  2. sudo systemctl restart nginx

五、常见问题解决方案

5.1 证书过期处理

Let’s Encrypt证书有效期为90天,需设置自动续期:

  1. # 编辑crontab任务
  2. sudo crontab -e
  3. # 添加以下行(每天检查续期)
  4. 0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx"

5.2 混合内容警告

若页面出现”不安全内容”提示,需:

  1. 检查所有资源链接是否为Https
  2. 使用相对路径或完整Https路径
  3. 在Hexo主题配置中启用https_replace选项(部分主题支持)

5.3 CDN加速配置

使用Cloudflare等CDN时:

  1. 在DNS解析中启用CDN代理(橙色云图标)
  2. 在SSL/TLS设置中选择”完全(严格)”模式
  3. 配置Page Rules强制Https:
    1. *yourdomain.com/*
    2. Always Use HTTPS: ON
    3. Automatic HTTPS Rewrites: ON

六、性能优化建议

  1. 启用HTTP/2:在Nginx配置中添加listen 443 ssl http2;
  2. OCSP Stapling:减少SSL握手时间
    1. ssl_stapling on;
    2. ssl_stapling_verify on;
    3. resolver 8.8.8.8 8.8.4.4 valid=300s;
    4. resolver_timeout 5s;
  3. HSTS预加载:在Nginx中添加:
    1. add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

    并提交域名到hstspreload.org

七、验证与监控

  1. SSL测试工具
    • SSL Labs测试
    • Why No Padlock
  2. 证书监控
    • 使用certbot renew --dry-run定期测试
    • 设置监控告警(如Zabbix/Prometheus)
  3. 性能测试
    1. curl -I https://yourdomain.com # 检查HTTP头
    2. ab -n 1000 -c 100 https://yourdomain.com/ # 压力测试

通过以上步骤,您的Hexo博客将实现:

  • 完整的Https加密传输
  • 自动证书续期
  • 强制Https跳转
  • 性能优化配置
  • 专业的安全头设置

建议定期检查域名解析状态和证书有效期,确保博客持续稳定运行。对于高流量站点,可考虑使用CDN加速和负载均衡方案进一步提升访问体验。