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,請參考個人另外一博客以上