缘起
想做个微信小程序,把娃们的网站,在微信里展现给老人看,而做微信小程序,要求网站是 https 的,我也舍不得买证书,于是就打算使用 Let’s Encrypt 提供的免费证书。
环境
- Ubuntu 16.04.1 LTS
- NGINX 1.10
- kernel 4.9.4-040904-generic
步骤
安装软件
1 | apt-get -y install letsencrypt; |
获取证书
1 | letsencrypt certonly \ |
Generate Strong Diffie-Hellman Group(optional)
1 | openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048; |
配置 NGINX 的 ssl 参数(optional)
1 | cat <<EOF >/etc/nginx/snippets/ssl-params.conf |
NGINX 的虚拟机配置
1 | vim /etc/nginx/sites-enabled/blog.xiaoyuer.cn; |
在 server {} 配置块中添加如下内容:
1 | listen 443 ssl http2 default_server; |
同样的,
1 | vim /etc/nginx/sites-enabled/blog.lukeyang.us; |
在 server {} 配置块中添加如下内容:
1 | listen 443 ssl http2; |
注意:
这个配置里的 listen 443 ssl httpd2 一行并没有 default_server 字样,那是一个端口因为只能有一个 default_server,前面那个虚机已经在 443 端口上指定了 default_server,所以这里不能重复指定了
重启 NGINX 服务
1 | systemctl restart nginx.service; |
配置自动更新证书
由于 Let’s Encrypt 的证书会在三个月后过期,但是官方工具提供了自动更新的功能,我们只需要用 cron 定时调用即可。
1 | cat <<EOF >/etc/cron.d/renew_ssl |
这里的逻辑是每周(三)检查一次是否需要更新证书,如果需要,则自动更新证书。检查完,再做一次 nginx 的 reload 操作,重新载入新证书(如果有的话)。