启动Https,需要从证书授权机构(简称CA)处获取一个证书,Let's Encrypt就是一个CA
Let's Encrypt上可以获得免费的ssl证书,时间是3个越
下面通过Nginx和Let's Encrypt让网站升级到HTTPS
Certbot简介
Certbot是Let's Encrypt官方推荐的获取证书的客户端
Centos 7.9操作
yum install certbot
获取证书有两种方式
第一种
certbot certonly --webroot -w /var/www/example -d www.example.com -d example.com
certbot certonly --webroot -w /var/www/example -d *.example.com -d example.com
certbot certonly --webroot -w /var/www/example -d www.example.com -d example.com -p xxx.example
上面这样都是可以的
一般我们
certbot certonly --webroot -w /var/www/example -d www.example.com -d example.com 就好了 泛域名反而有时也用不到 甚至微服务分开部署 .......
这种方式会为www.example.com和example.com这两个域名生成一个证书,使用 --webroot模式会在/var/www/example中创建 .well-known问价夹,这个文件夹里包含一些验证文件 会通过访问 example.com/.well-known/acme-challenge 来验证你的域名是否绑定的这个服务器
--webroot 模式 需要自己提前启动nginx 因为一会它会来验证
server {
listen 80;
server_name www.example.com example.com;
location / {
root /var/www/example;
}
}
-----------------------------------------------------------------------------
server {
listen 80;
server_name www.example.com example.com;
location /.well-known/acme-challenge {
root /var/www/example;
}
location / {
return 301 https://$host$request_uri;
}
}
# HTTP server
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
# Redirect all HTTP requests to HTTPS
return 301 https://$host$request_uri;
}
# HTTPS server
然后启动nginx 注意你域名DNS已经指向该服务器IP
首先创建文件夹
mkdir -p /var/www/example
然后
certbot certonly --webroot -w /var/www/example -d www.example.com -d example.com
cloudflare 代理关掉 没理明白
另外一种模式是
--standalone
这种模式不需要指定网站根目录,他会自动启用服务器的443端口,来验证域名的归属。我们有其他服务(例如nginx)占用了443端口,就必须先停止这些服务,在证书生成完毕后,再启用。
--standalone模式 在验证过程中不需要你去配置nginx 验证时会自启服务
续期命令
certbot renew --dry-run 无论三个月到没到 都可以续期 无论哪种模式
注意用这个命令时候要保证80端口
如果你原先用的是
--standalone模式
那么需要关闭 nginx 因为certbot自己要启动443服务
自动续签 自动续签最好用 --standalone模式
因为可以通过定时任务
先关闭nginx 然后续签SSL之后 再启动nginx
如果你用
--webroot 模式 那么总是要配置 下面这段代码
server {
listen 80;
server_name www.example.com example.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /var/www/example;
}
# Redirect all HTTP requests to HTTPS
#return 301 https://$host$request_uri;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
定时任务 在 --standalone模式下
执行 crontab -e
输入下面命令
30 4 * */2 * certbot renew --pre-hook "/usr/local/nginx/sbin/nginx -s stop" --post-hook "/usr/local/nginx/sbin/nginx"
表示每两个月的4:30执行任务 刷新一次
下面用 --standalone模式来一遍
mkdir -p /var/www/example
certbot certonly --standalone -w /var/www/example -d www.example.com -d example.com
那么你现在可以将ssl配置好 启动nginx 验证certbot自己起服务做好了
crontab -e
/var/spool/cron 下会有个root文件 (看你是用什么用户登录的)
这样 定时任务会自动执行