获取免费证书
为了鼓励https的普及,EFF成立了免费证书最大的提供商Let’s Encrypt,可以提供免费证书。小型的网站也可以使用免费证书升级为https啦。
当然Let’s Encrypt生成的证书,只能是单域名的,而且只有最低级的域名验证。
克隆letsencrypt客户端
$ git clone https://github.com/letsencrypt/letsencrypt ~/letsencrypt
如果遇到权限问题,记得先创建/opt/letsencrypt文件夹再,更改文件夹权限为可写入。
注册证书
注册一个域名证书非常简单,使用letsencrypt就能生成https所需的证书。当然,用letsencrypt生成的证书只支持域名验证,只需要用letsenctypt的自动注册证书命令,证明这个域名是自己的是用的即可。
1 2 3
| $ cd ~/letsencrypt $ ./letsencrypt-auto certonly -a webroot --webroot-path=/<your web site path> -d practi.tk # 可以使用多个 -d 添加多个域名
|
letsencrypt可以帮我们自动注册证书,–webroot-path是静态资源所指的路径。-d是域名域名,也可以多个-d增加多个域名。最后确保需要使用https的域名都用letsencrypt注册。
后续将会让你继续输入邮箱信息
如果出现Congratulations!字样,则证明证书注册成功。
指向静态文件Nginx配置Sample:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| server { listen 80; server_name practi.tk; # 这里写你的域名 location ^~ /.well-known/acme-challenge/ { default_type "text/plain"; root /usr/share/nginx/html; # 这里写你的静态文件目录 } location = /.well-known/acme-challenge/ { return 404; } return 301 https://$host$request_uri; # 跳转到https }
server { # SSL Configuration listen 443 ssl; server_name practi.tk; # 这里写你的域名 # specify cert files ssl_certificate /etc/letsencrypt/live/practi.tk/fullchain.pem; # 中间写你的域名 ssl_certificate_key /etc/letsencrypt/live/practi.tk/privkey.pem; # 中间写你的域名 location / { root /usr/share/nginx/html; # 这里写你的静态文件目录 index index.html index.htm; # 这里写你暴露的静态文件 } }
|
Nginx配置各有各的配置方法,这里只要保证四点:
域名配置正确
静态文件目录路径、本地服务目录路径配置正确
.well-known/acme-challenge目录配置正确
要保证80默认端口和443ssl端口都有配置
如果配置好Nginx,那么访问网站就会有绿色的小钥匙啦,说明你的https站点搭建好。
自动更新证书
letsencrypt证书最多只有90天,90天之后我们需要重新注册证书,当然这个可以交给服务器自己做啦。
验证自己的证书是否可以更新
1 2
| $ cd ~/letsencrypt $ ./letsencrypt-auto renew --dry-run
|
此命令只是验证 不会更新证书
如果出现Congratulations!字样或者已经更新字样则证明可以自动更新。如果出现错误,或者说路径找不到的情况,大多数情况是.well-known/acme-challenge目录配置没有正确的配置成功
编写crontab脚本
$ crontab -e
脚本内容
1
| 8 0 11 * * /<你的路径>/letsencrypt-auto renew >> /var/log/le-renew.log
|
如果遇到权限问题,可先创建/var/log目录再设置其权限为可写入
参考链接
nginx内置变量
$host
请求中的主机头(Host)字段,如果请求中的主机头不可用或者空,则为处理请求的server名称(处理请求的server的server_name指令的值)。值为小写,不包含端口。
$request_uri
这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI。
$server_name
服务器域名。