網站的https訪問,須要域名證書。能夠在letsencrypt上申請免費的域名證書。首先,須要向letsencrypt證實對域名的控制權。證實的方式不少,這裏採用的是,讓certbot在網站上添加一個相似 http://ooxxooxx.com/.well-known/acme-challenge/{token} 的節點,letsencrypt會去訪問這個節點,以此證實對域名的控制權。先配置一個簡單的nginx,用於申請證書, 驗證域名的控制權。獲得證書後,就能夠配置用於https訪問的nginx了。證書3個月過時,更新證書的時候,關掉https訪問的nginx,開啓證書申請的nginx。更新完成以後,再關掉證書申請的nginx,從新開啓https訪問的nginx。html
docker pull nginx docker pull certbot/certbot
server { listen 80; server_name ooxxooxx.com; location ~ /.well-known/acme-challenge { allow all; root /usr/share/nginx/html; } root /usr/share/nginx/html; index index.html; }
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Let's Encrypt First Time Cert Issue Site</title> </head> <body> <h1>Oh, hai there!</h1> <p> This is the temporary site that will only be used for the very first time SSL certificates are issued by Let's Encrypt's certbot. </p> </body> </html>
docker run --network host --rm --name nginx-letsencrypt \ -v /root/docker/nginx/volumes/letsencrypt-nginx.conf:/etc/nginx/conf.d/default.conf \ -v /root/docker/nginx/volumes/letsencrypt/html:/usr/share/nginx/html \ -d nginx
docker run -it --rm \ -v /root/docker/nginx/volumes/letsencrypt/etc/letsencrypt:/etc/letsencrypt \ -v /root/docker/nginx/volumes/letsencrypt/var/lib/letsencrypt:/var/lib/letsencrypt \ -v /root/docker/nginx/volumes/letsencrypt/var/log/letsencrypt:/var/log/letsencrypt \ -v /root/docker/nginx/volumes/letsencrypt/html:/data/letsencrypt \ certbot/certbot \ certonly --webroot \ --register-unsafely-without-email --agree-tos \ --webroot-path=/data/letsencrypt \ --staging \ -d ooxxooxx.com
看命令的結果,是否有證書生成。nginx
server { listen 443; server_name ooxxooxx.com; ssl on; ssl_certificate /etc/letsencrypt/live/ooxxooxx.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ooxxooxx.com/privkey.pem; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
docker run --network host --rm --name nginx-https \ -v /root/docker/nginx/volumes/https-nginx.conf:/etc/nginx/conf.d/default.conf \ -v /root/docker/nginx/volumes/letsencrypt/etc/letsencrypt:/etc/letsencrypt \ -d nginx
docker run --rm -it --name certbot \ -v /root/docker/nginx/volumes/letsencrypt/etc/letsencrypt:/etc/letsencrypt \ -v /root/docker/nginx/volumes/letsencrypt/var/lib/letsencrypt:/var/lib/letsencrypt \ -v /root/docker/nginx/volumes/letsencrypt/var/log/letsencrypt:/var/log/letsencrypt \ -v /root/docker/nginx/volumes/letsencrypt/html:/data/letsencrypt \ certbot/certbot renew --webroot -w /data/letsencrypt