如何给自己的网站添加 https

如何给自己的网站添加 https

如何给自己的网站添加 https

目录

一、简介

二、 申请 ssl 证书

三、下载 ssl 证书

四、配置 nginx

五、开放 443 端口

一、简介

相信大家都知道 https 是更加安全的,特别是一些网站,有 https 的网站更能够让用户信任访问

接下来以我的个人网站 五岁小孩 (jxy.xj.cn) 为例子,带大家一起从 0 到 1 配置网站 https

本次配置的:

  • 证书是 腾讯云免费证书、
  • 服务器也是腾讯云的、
  • 使用 docker 部署的 nginx

二、申请 ssl 证书

推荐使用云服务的免费 ssl 证书,一般都会有免费额度,本次使用的是腾讯云的 ssl 证书:我的证书 - SSL 证书 - 控制台 (tencent.com)

image-20240408190824364

image-20240408190925296

提交申请后到 【我的证书】列表,等待审核通过,一般几分钟就审核通过了

image-20240408191031097

三、下载 ssl 证书

等待证书审核通过之后,就可以下载 ssl 证书到本地

image-20240408191211197

四、配置 nginx

如果你的 nginx 和我一样是通过 docker 部署的,那么在配置之前要先确认下容器有没有映射 443 端口,如果不是 docker 部署,则可以忽略这一步

使用 docker 命令查看

docker ps | grep nginx

image-20240408191443817

接下来就可以配置 nginx 了:

  1. 首先将刚才下载的 ssl 压缩包上传到服务器,解压到 nginx 的配置目录

    一般是上传在 nginx.conf 的同级目录下的 cert 目录,如下图

    image-20240408191816379

image-20240408191954488

注意:证书一定要放在 nginx.conf 的同级目录下,以免重启配置出现问题

  1. 修改 nginx 的配置

修改配置文件,添加 443 代理

例子如下:

    server {

        listen 443 ssl;              # 开启 443 代理监听
        server_name blog.jxy.xj.cn;  # 证书绑定的域名
        ssl_certificate cert/blog.jxy.xj.cn_bundle.pem;  # 证书 pem 位置
        ssl_certificate_key cert/blog.jxy.xj.cn.key;     # 证书 key 位置

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        # 代理映射的服务,我这里是代理了 443 到 本地的 30891,按自己的配置 
        location / {
            proxy_pass http://127.0.0.1:30891;
            proxy_set_header Host $host;
         }
        }
  1. 重启 nginx

重启前推荐 执行 nginx -t 命令检查配置文件是否有语法错误。如果没有错误,执行 nginx -s reload 命令使配置生效。

我这里是使用 docker 部署,所以我直接使用 docker restart nginx 重启

如果启动后有问题无法正常访问,可以查看 nginx 的错误日志,一般是位于 /var/log/nginx/error.log 查看具体原因

五、开放 443 端口

先看自己的防火墙状态,如果是激活状态,那就需要开放 443 端口

这一步请自行百度

基本上到这里之后,直接访问就可以了:五岁小孩 (jxy.xj.cn)

image-20240408192828702

六、常见问题解决

(一)、配置后,访问 https 无法连接成功

这种情况的排查思路:

  • 确认下自己的 nginx 的状态是否正常启动,如果是 docker,则使用 docker ps| grep nginx , 一般可能是因为配置写错了,如证书的路径配错了,导致 nginx 无法正常启动,那么在查看 error.log 时就会出现错误:

    cannot load certificate "/etc/nginx/cert/jxxxx": BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/nginx/cert/jxxxx','r') error:2006D080:BIO routines:BIO_new_file:no such file)
    

    此时就需要先确认配置是否正确,可以使用 nginx -t 检查

  • 还有一种可能是,docker 部署,但是没有映射 443 端口

image-20240408191443817

(二) 证书配置成功,但是访问 https 还是报不安全

这种一般只有两种情况:

  1. 证书和域名没对上,比如证书绑定的 A 域名,但是你在 nginx 配置的是 B 域名

  2. 证书过期

可以使用 curl -vvv https://域名 访问返回的证书是过期,是否配置错误

如果出现:Unable to communicate securely with peer: requested domain name does not match the server's certificate

那就说明你的证书和域名没对上

总结

配置 ssl 证书还是很简单的:

申请证书 -> 下载证书 -> 配置 nginx -> 重启 ngix