letsencrypt是什麼就不作過多的贅述了,它對於咱們的意義在於方便的簽發證書、加密、被主流瀏覽器信任。html
letsencrypt 官網
客戶端:certbot 官網nginx
$ sudo apt-get update $ sudo apt-get install software-properties-common $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt-get update $ sudo apt-get install certbot
$ sudo certbot certonly --webroot -w /usr/share/nginx/html/ -d www.domain1.com -d domain1.com $ sudo certbot certonly --webroot -w /usr/share/nginx/html/ -d www.domain2.com -d domain2.com # 成功後的證書可在這查看 $ ls /etc/letsencrypt/live
以上是分別爲www.domain1.com,domain1.com,www.domain2.com,domain2.com 域名申請了證書。web
--webroot 模式表示:CertBot在驗證服務器域名的時候,會在 -w 這個路徑生成一個隨機文件,並經過http-01方式驗證。(更多的其餘模式可在官方文檔中查看,感受這種模式更加自由點)。shell
server { listen 443; ssl on; server_name domain1.com www.domain1.com; ssl_certificate /etc/letsencrypt/live/www.domain1.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.domain1.com/privkey.pem; }
重載nginx,而後在瀏覽器訪問 https://www.domain1.com 便可查看效果。後端
而後,根據業務需求,實現全站https並攔截http請求,nginx配置文件中添加相關重定向:瀏覽器
# http轉https server{ listen 80; server_name domain1.com www.domain1.com; #告訴瀏覽器有效期內只准用 https 訪問 add_header Strict-Transport-Security max-age=15768000; #永久重定向到 https 站點 return 301 https://$host$request_uri; } server { listen 443; ssl on; server_name domain1.com www.domain1.com; ssl_certificate /etc/letsencrypt/live/www.domain1.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.domain1.com/privkey.pem; # 重定向轉發給後端程序 location /demo { proxy_pass http://demo; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } # https 對於未匹配的域名的處理(如domain2.com) server { listen 443 ssl default_server; server_name _; # 雖然不是對應的證書,但得有,不然不能正常訪問 ssl_certificate ssl_certificate /etc/letsencrypt/live/www.domain1.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.domain1.com/privkey.pem; return 404; }
# 定時更新證書 (還未驗證效果) sudo crontab -e # 添加: 30 2 * */2 * /usr/bin/certbot renew >> /var/log/le-renew.log # 刪除已有的證書(可選擇) sudo certbot delete