想要实现 HTTPS 访问, 首先就要给域名申请 SSL 证书

这里拿 jonny.website 这个域名在 腾讯云 域名服务中申请 SSL 证书

对于一般站长来说, 没有必要使用付费的 SSL 证书, 所以这里演示免费的 SSL 证书的申请

首先登录 腾讯云

在云产品中定位到 域名服务, 然后点击 SSL 证书管理

Nginx 下实现 HTTPS-Jonny'Blog

进入 SSL 证书管理界面之后, 点击申请证书

Nginx 下实现 HTTPS-Jonny'Blog

这里选择 免费版 DVSSL 的证书申请, 点击确定后会让你填写你的个人信息和你的域名信息

Nginx 下实现 HTTPS-Jonny'Blog

密码可以自行设置或者不设置, 建议设置

填写好之后点下一步来到域名验证

Nginx 下实现 HTTPS-Jonny'Blog

这里以 手动 DNS 验证为演示, 确认申请

Nginx 下实现 HTTPS-Jonny'Blog

然后需要点击 查看证书详情

Nginx 下实现 HTTPS-Jonny'Blog

来到域名控制台, 这里以阿里云的域名控制台作为演示

选择添加解析, 并且输入 DNS 验证的相关信息

Nginx 下实现 HTTPS-Jonny'Blog

完成之后保存
Nginx 下实现 HTTPS-Jonny'Blog

之后回到 腾讯云 的 SSL 证书管理

点击查询按钮可以看到 DNS 验证是否成功

Nginx 下实现 HTTPS-Jonny'Blog

可以看到正常解析

到这里为止已经完成了对 jonny.website 域名的 SSL 证书申请

申请成功之后会有手机短信提示

Nginx 下实现 HTTPS-Jonny'Blog

接下来需要回到域名控制台下载证书

Nginx 下实现 HTTPS-Jonny'Blog

会得到一个以域名为名称的 .zip 压缩包, 里面有 Apache、Nginx、IIS 和 Tomcat 的证书文件

这里只需要 Nginx 的证书文件

将证书文件上传到服务器

接下来修改 Nginx 相关配置文件

在 server 中添加

rewrite ^(.*) https://$host$1 permanent;

来强制开启 HTTPS 访问

在 server 443 端口中添加

server_name 你的域名;

ssl on;

ssl_certificate 你证书的 .crt 文件的位置;

ssl_certificate_key 你证书的 .key 文件的位置;

ssl_session_timeout 5m;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

ssl_prefer_server_ciphers on;

下面给出一段完整的配置实例

server {

    listen 80;

    server_name demo.jonny.website;

    rewrite ^(.*) https://$host$1 permanent;

}

server {

    listen 443;

    root /www/demo;

    server_name demo.jonny.website;

    ssl on;

    ssl_certificate /home/Jonny/ssl/Nginx/1_jonny.website_bundle.crt;

    ssl_certificate_key /home/Jonny/ssl/Nginx/2_jonny.website.key;

    ssl_session_timeout 5m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

    ssl_prefer_server_ciphers on;

    location / {

        index index.php index.html index.htm;

        auth_basic "http auth for Jonny";

        auth_basic_user_file /etc/nginx/htpasswd/Jonny;

        autoindex on;

    }

    location ~ \.php$ {

        fastcgi_pass 127.0.0.1:9000;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        include fastcgi_params;

    }

}

完成之后重启 Nginx

systemctl reload nginx

之后可以通过

Nginx -t

命令查看配置文件中是否存在错误

之后访问网站

Nginx 下实现 HTTPS-Jonny'Blog

会看到域名旁边多了一个锁

Nginx 下实现 HTTPS-Jonny'Blog

至此, 已经完成了对 HTTPS 的配置

另外这里有个提醒:

配置完成之后, 第一次访问网站的时候 Safari 会提示不信任这个证书, 但是不影响网站的访问, 点击继续即可

其他的浏览器没有试过, 可能也会出现相应的问题, 这个是不影响的