10分钟免费开启全站HTTPS

持续了1个多月的备案,今天收到短信终于下来了。css

上篇水文,大概的记录了做为前端利用gitlab.com利用gitlab-ci开启CI自动部署。前端的gitlab的ci初尝试。这篇文章就要开始记录下我如何开启https。html

https是什么?

https 是什么,不是本文的重点,直接跳过,https 的好处在这里也不仔细讲。前端

什么是 Let’s Encrypt?

部署 https 网站的时候须要证书,证书由 CA 机构签发,大部分传统 CA 机构签发证书是须要收费的,这不利于推进 https 协议的使用。Let’s Encrypt 也是一个 CA 机构,但这个 CA 机构是免费的!!!也就是说签发证书不须要任何费用。python

什么是全站https,也就是通配符证书?

域名通配符证书相似 DNS 解析的泛域名概念,通配符证书就是证书中能够包含一个通配符。主域名签发的通配符证书能够在全部子域名中使用,好比 .example.com、bbs.example.com、bbs.example.com。
2018 年 3 月 14 日,Let’s Encrypt 对外宣布 ACME v2 已正式支持通配符证书。这就意外味着用户能够在 Let’s Encrypt 上免费申请支持通配符的 SSL 证书。之前配置子域名也是须要每一个域名单独的申请证书的,意思是如今能够直接用*.example.com这个证书,让全站实现https。nginx

下面本文就简单的记录了我开启全站https的步骤,10分钟就能搞定,首先从blog子域名开始。git

准备工做

1. 一个顶级域名:peiqixin.com  # 我这里用的是
2. 一台本身的云服务器 # 我这里用的是个人那个小水管,以前在腾讯云撸的羊毛,6年360块钱的服务器,我这里服务器的系统用的是ubuntu

下面的全部操做都是在你的服务器上面,(个人服务器系统是ubuntu 16.04),其余的系统的操做也差很少。web

添加一个blog域名解析

下载Nginx

安装 nginx 。若是你已经安装能够跳过这步。ubuntu

sudo apt-get update
sudo apt-get install nginx

若是不会nginx的基本操做和基本配置,建议仍是先去了解一下 nginx 的基本配置,好比如何的开启一个web服务器,nginx的基本操做和编写配置(不是必须)。api

下载certbot客户端

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx

安装的时候一路 enter 就完事儿了。服务器

获取 Let’s Encrypt certificate

cerbot 提供 nginx 配置以帮助咱们从新配置咱们之前的 nginx 配置,以便咱们可使用咱们即将得到的 SSL 证书。

## 个人域名是peiqixin.com。这里要换成你要配置的域名
sudo certbot --server https://acme-v02.api.letsencrypt.org/directory --manual --preferred-challenges dns  --installer nginx -d *.peiqixin.com -d peiqixin.com

而后又是一路的肯定选择肯定就能够了。

可是请注意这一步,就暂时不要继续enter了

请把这段token复制下来。
打开你的域名提供商,就是你以前买域名的地方。添加一个域名解析。

记录选择 选择 TXT
主机记录填入 _acme-challenge
记录值就填入刚才你保存下来的token

点击保存以后,certbot客户端会去肯定你是否在正确的添加了解析。

若是正确的添加了解析。
接下来

Which server blocks would you like to modify?
-------------------------------------------------------------------------------
1: File: /etc/nginx/sites-enabled/default
Addresses: [::]:80 default_server, 80 default_server
Names: _
HTTPS: No

...
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

将呈现nginx配置中的服务器块列表,供您选择要将证书部署到的服务器块。
反正我用不上,这里选择cancel,输入c,enter继续。

接下来

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.

这一步就是让你选择是否将http流量重定向到建议的https。既然是全站https,全部的访问都应该走https,选择2,enter。提供与前一阶段相同的列表,输入c,按enter继续。

接下来,当你看到下面的一段就代表你已经配置好了。

请把

/etc/letsencrypt/live/peiqixin.com/fullchain.pem
/etc/letsencrypt/live/peiqixin.com/privkey.pem

这2个地址记下来

配置nginx

sudo nginx -t

找到你的nginx配置文件的地址

sudo mkdir conf.d #建立一个配置nginx的目录,不可能把全部的配置写在一个文件里面,之后也很差维护

再在nginx的默认配置文件nginx.conf的http模块里面添加

include /etc/nginx/conf.d/*.conf;  #引入全部的配置文件

在conf.d文件夹里面建立一个index.conf,建立主配置文件负责监听80端口并转发请求。

server {
    listen 80;
    server_name peiqixin.com www.peiqixin.com blog.peiqixin.com;
    rewrite ^(.*) https://$host permanent;
}

建立https配置文件。建立各域名配置文件监听443端口(能够按域名分开,也能够写一个文件里,我为了方便写在一个文件里)

server {
        listen       443;
        server_name  peiqixin.com  www.peiqixin.com;

        ssl on;
        ssl_certificate      /etc/letsencrypt/live/peiqixin.com/fullchain.pem; ## 这个就是你配置certbot最后一步要你记录下来的地址
        ssl_certificate_key  /etc/letsencrypt/live/peiqixin.com/privkey.pem;
        
        ssl_session_cache    shared:SSL:10m;
        ssl_session_timeout  5m;

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

        location / {
            root /home/ubuntu/blog;  ##这里我用hexo博客生成器生成的静态html,js,css都放在了这个文件
            index index.html index.htm;
        }
    }
 server {
        listen       443;
        server_name  blog.peiqixin.com;

        ssl on;
        ssl_certificate      /etc/letsencrypt/live/peiqixin.com/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/peiqixin.com/privkey.pem;
        
        ssl_session_cache    shared:SSL:10m;
        ssl_session_timeout  5m;

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

        location / {
            root /home/ubuntu/blog;
            index index.html index.htm;
        }
    }

退出保存。检测一下nginx的配置是否有语法错误

sudo nginx -t

重启nginx

访问blog.peiqixin.com,就会看见


再访问peiqixin.com


都是自动的从http跳转到https。

接下来想要添加一个api.peiqixin.com域名为https。重复上面的第一步和最后一步,而后就能够在api.peiqixin.com域名旁边看到小绿锁。

参考资料

  1. certbot官网
  2. how-to-deploy-wildcard-ssl-certificates-using-lets-encrypt
  3. Nginx 配置多域名 http转https
相关文章
相关标签/搜索