https愈来愈流行了,但免费的证书通常是一年有效期。通常是够用了,但懒人都想一劳永逸,nginx
有个免费证书颁发机构是letsencrypt。它是开源,而且彻底免费的,它颁发的证书已经被几乎全部的浏览器所承认。证书90天有效期,支持自动续订。git
本身的服务器使用docker进行部署的,基本上有新项目都强迫症般docker化。letsencrypt这确定支持docker运行的。web
官方有个certbot/certbot docker镜像docker
本地使用nginx反向代理的,好比个人一个域名https://git.dxgz.work/浏览器
修改nginx配置,添加服务器
location ~ /.well-known{ # https证书自动更新 proxy_pass http://127.0.0.1:88; # certon自动更新接口 }
88端口是cerbot的容器的端口,重载配置spa
sudo /usr/sbin/nginx -s reload # 这个是装在主机的nginx重载命令
docker exec -it nginx.web /usr/sbin/nginx -s reload
# 我是使用docker的,要用这个命令
certbot第一次运行时须要配置域名和邮箱地址,以后使用renew就能够了代理
docker run -it --rm -p 88:80 --name certbot \ -v "/data/ssl:/etc/letsencrypt" \ certbot/certbot \ certonly --standalone \ --email `你的邮箱地址` \ -d `你的域名地址` -d www.`你的域名地址`
上述命令将域名的ssl证书放在本地 /data/sslcode
由于有效期限制,须要配置自动更新,好比这样,放到crontab定时任务中blog
renew_cert.sh
# 运行docker-更新证书 cd /data/letsencrypt && docker-compose up # reload nginx 配置,加载新证书 #docker exec -it nginx.web /usr/sbin/nginx -t docker exec -it nginx.web /usr/sbin/nginx -s reload
上面的docker-compose.yml内容
version: '3' services: web: image: certbot/certbot container_name: certbot.ssl.web volumes: - /data/ssl:/etc/letsencrypt ports: - "88:80" command: renew
crontab -e 添加一个定时任务,固然了,docker是须要root权限启动的,或者配置了普通用户运行
0 0 * * * /data/letsencrypt/renew_cert.sh > /dev/null 2>&1
天天凌晨0点运行
获得证书后,配置nginx,请参考个人另外一博客以上