目录

实战分享:我是如何为个人网站配置HTTPS证书的完整过程

一、为什么我要为网站配置HTTPS

作为一名技术博主,我深知网站安全的重要性。最近在运营我的个人博客五岁小孩时,我发现越来越多的浏览器开始标记HTTP网站为"不安全",这严重影响了用户体验和SEO排名。

经过一番研究,我决定为网站配置HTTPS。在这个过程中,我遇到了不少坑,也积累了一些实用经验。今天就把我的完整配置过程分享给大家,希望能帮助到有同样需求的朋友。

我的配置环境:

  • 服务器:腾讯云轻量应用服务器
  • 证书:腾讯云免费SSL证书(1年有效期)
  • 部署方式:Docker容器化部署Nginx
  • 网站:个人技术博客五岁小孩

二、申请SSL证书的完整过程

在选择证书服务商时,我对比了多家云服务商,最终选择了腾讯云的免费SSL证书。主要考虑是腾讯云的免费证书申请流程简单,而且审核速度很快。

申请步骤:

  1. 登录腾讯云控制台,进入SSL证书管理页面
  2. 选择免费证书,填写域名信息(我填写的是blog.fiveyoboy.com)
  3. 提交申请后,系统会自动进行域名验证

/img/start-config-https/1.png
image-20240408190824364

https://i-blog.csdnimg.cn/blog_migrate/dce35e39445a7689e5e127e6d071c07e.png)

我的经验分享:

  • 审核时间比我想象的要快,我只等了3分钟就通过了
  • 免费证书的有效期是1年,到期前需要重新申请
  • 如果域名解析有问题,审核会失败,需要检查DNS设置

提交申请后,我在【我的证书】列表等待审核通过:

https://i-blog.csdnimg.cn/blog_migrate/41538bd590b5cc75fa1a73288f8dec54.png

三、下载证书并准备配置

证书审核通过后,我立即下载了SSL证书。这里有个小技巧:下载时选择Nginx格式的证书包,这样解压后就能直接使用。

https://i-blog.csdnimg.cn/blog_migrate/1828e42c44f07a30fb0bcc4372535c72.png

下载后的文件结构:

  • 证书文件:以.pem.crt结尾
  • 私钥文件:以.key结尾
  • 通常还会包含证书链文件

我下载的证书包包含两个关键文件,后面配置Nginx时会用到。

四、Nginx配置实战:我踩过的坑和解决方案

由于我的Nginx是通过Docker部署的,配置前我首先检查了容器是否映射了443端口。这是我遇到的第一个坑:Docker容器默认不会映射443端口

检查端口映射:

docker ps | grep nginx

https://i-blog.csdnimg.cn/blog_migrate/57014dd695623fdbf9a761cbbc37206f.png

我的配置步骤:

1. 上传证书文件

我将下载的SSL证书压缩包上传到服务器,解压到Nginx配置目录。这里我选择在nginx.conf同级目录下创建cert文件夹存放证书文件。

https://i-blog.csdnimg.cn/blog_migrate/9ecbe8b7d800775e7dfff674fa4e2a6c.png

https://i-blog.csdnimg.cn/blog_migrate/f53cdbfefb61b1de6551eb650a8afb8b.png

重要提醒: 证书路径一定要正确,否则Nginx无法启动。我建议使用绝对路径,避免相对路径带来的问题。

2. 配置Nginx SSL

这是我实际使用的配置,经过多次调试才稳定运行:

server {
    # 监听443端口并启用SSL
    listen 443 ssl;
    # 配置你的域名
    server_name blog.fiveyoboy.com;

    # 证书文件路径 - 这是我实际使用的路径
    ssl_certificate /etc/nginx/cert/blog.fiveyoboy.com_bundle.pem;
    ssl_certificate_key /etc/nginx/cert/blog.fiveyoboy.com.key;

    # SSL会话缓存设置
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;

    # 加密套件配置
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # 代理到实际应用
    location / {
        # 我的博客应用运行在30891端口
        proxy_pass http://127.0.0.1:30891;
        proxy_set_header Host $host;
         }
        }

### 3. 重启Nginx并验证配置

重启前我强烈建议先检查配置文件语法,这是我踩过的第二个坑:**配置文件语法错误导致Nginx无法启动**。

**安全重启步骤:**
1. 检查配置语法:`nginx -t`
2. 如果语法正确,重新加载配置:`nginx -s reload`

由于我使用Docker部署,重启命令是:
```bash
docker restart nginx

我的经验: 第一次重启时,我遇到了证书路径错误的问题。通过查看错误日志/var/log/nginx/error.log,我发现了问题所在并修正了路径。

五、防火墙配置和最终测试

配置完Nginx后,我发现网站仍然无法通过HTTPS访问。经过排查,发现是服务器防火墙没有开放443端口

我的防火墙配置:

  • 检查防火墙状态:systemctl status firewalld
  • 开放443端口:firewall-cmd --add-port=443/tcp --permanent
  • 重新加载防火墙:firewall-cmd --reload

配置完成后,我激动地访问了https://blog.fiveyoboy.com,看到浏览器地址栏的小锁标志,终于成功了!

六、我遇到的实际问题及解决方案

问题一:HTTPS无法连接

这是我遇到的最常见问题,主要有两个原因:

1. 证书路径错误 第一次配置时,我遇到了这个错误:

cannot load certificate "/etc/nginx/cert/blog.fiveyoboy.com_bundle.pem": BIO_new_file() failed

解决方案: 检查证书文件路径,确保文件存在且权限正确。

2. Docker端口未映射 Docker容器默认不会映射443端口,需要手动配置。

问题二:HTTPS访问显示不安全

这个问题我帮朋友配置时遇到过,主要有两种情况:

1. 证书域名不匹配 如果出现错误:requested domain name does not match the server's certificate 说明证书绑定的域名和Nginx配置的域名不一致。

2. 证书过期 免费证书通常只有1年有效期,需要定期更新。

七、配置后的效果和我的感受

配置HTTPS后,我的网站发生了明显变化:

  • 安全性提升:数据传输加密,用户信息更安全
  • SEO优化:搜索引擎对HTTPS网站有更好的排名
  • 用户体验:浏览器不再显示"不安全"警告

我的建议:

  • 定期检查证书有效期,设置自动续期提醒
  • 配置HTTP到HTTPS的重定向
  • 考虑使用Let’s Encrypt免费证书实现自动化

总结

通过这次HTTPS配置实践,我深刻体会到:技术配置虽然看似简单,但细节决定成败。从申请证书到最终配置成功,我花了大约2小时,主要时间都花在排查问题上。

我的完整配置流程:

  1. 申请腾讯云免费SSL证书(3分钟审核)
  2. 下载证书并上传到服务器
  3. 配置Nginx SSL设置
  4. 检查并开放防火墙443端口
  5. 重启Nginx并测试访问

希望我的经验能帮助你少走弯路,顺利完成HTTPS配置!如果你在配置过程中遇到问题,欢迎在评论区留言讨论。

版权声明

未经授权,禁止转载本文章。
如需转载请保留原文链接并注明出处。即视为默认获得授权。
未保留原文链接未注明出处或删除链接将视为侵权,必追究法律责任!

本文原文链接: https://fiveyoboy.com/articles/start-config-https/

备用原文链接: https://blog.fiveyoboy.com/articles/start-config-https/