在前两篇文章中,我们已经成功搭建起了 LEMP 环境,并成功安装了 Typecho,这篇文章里我们将利用 Let's Encrypt 为网站添加 HTTPS 访问支持。
安装 Let's Encrypt 客户端
Let's Encrypt 提供了一个官方客户端,最新版本的客户端名字为 certbot
,而 Ubuntu 官方源里的还是旧版本,名字叫做 letsencrypt
,虽然是旧版本,但是功能已经够用了。直接安装即可。
sudo apt-get install letsencrypt
准备工作
Let's Encrypt 为网站生成证书之前,需要验证域名的所有权。Let's Encrypt 客户端使用的验证方式是在网站根目录下生成 /.well-known/acme-challenge/
目录,并在该目录下生成一个验证文件。
默认情况下 Nginx 是不允许 /.well-known
这种隐藏目录被访问的,所以我们需要修改配置文件,保证该目录是可访问的。
在 blog
配置文件中增加以下配置信息:
location ~ /.well-known {
allow all;
}
重启 Nginx 使配置生效。
获取证书
运行以下命令就可为根目录为 /var/www/html
的 example.com
和 www.example.com
获取证书
sudo letsencrypt certonly -a webroot --webroot-path=/var/www/html -d example.com -d www.example.com
一切正常的话,
letsencrypt 客户端会把获取的证书放在 /etc/letsencrypt/live/example.com/
目录下
使用证书
在 /etc/letsencrypt/live/example.com/
目录下有四个文件,我们需要用到的是 fullchain.pem
和 privkey.pem
这两个证书文件。
由于是一个证书文件可以应用到多个域名下,所以我们可以把证书配置信息放到单独一个文件中,用到的时候 include 一下就可以了。
我们在 /etc/nginx/snippets/
下创建一个配置文件 ssl-example.com.conf
, 并加入以下内容
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
再打开网站的配置文件,首先加入端口监听配置,并启用 http2
协议
listen 443 ssl http2;
listen [::]:443 ssl http2;
再加入配置包含信息
include snippets/ssl-example.com.conf;
重启 Nginx 使配置生效,使用 https://www.example.com 访问网站就可以看到效果了。
HTTP 重定向
为了达到更好的安全效果,我们可以把所有的 HTTP 请求都重定向为 HTTPS。
打开网站的 Nginx 配置文件,将 80 端口的配置块与 443 端口的配置块,大概是下面这个样子
server {
listen 80;
......
}
server {
listen 443;
.....
}
我们在 80 端口的配置块中加入重定向命令和域名配置信息
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
重启 Nginx 生效。
版权声明:本文版权属于作者 plumes,并受法律保护。
本作品采用知识共享「署名 - 非商业性使用 - 相同方式共享 3.0 未本地化版本」许可协议进行许可。