利用Certbot生成ssl证书配置到nginx
1.装 Certbot
Debian/Ubuntu
sudo apt-get update
sudo apt-get install -y certbot
CentOS/RHEL/OpenCloudOS
sudo yum update -y
sudo yum install -y certbot
2) 在你现有的 80 站点里加一段“挑战文件”位置
在对应的 server { listen 80; } 里加入(如果已有反代,不会冲突):
location ^~ /.well-known/acme-challenge/ {root /var/www/letsencrypt;
}
创建目录并重载:
sudo mkdir -p /var/www/letsencrypt
sudo nginx -t && sudo systemctl reload nginx
3) 用 webroot 签证书
sudo certbot certonly --webroot -w /var/www/letsencrypt -d your-domain.com
多域名就多写几个 -d,成功后证书在:
/etc/letsencrypt/live/your-domain.com/fullchain.pem
/etc/letsencrypt/live/your-domain.com/privkey.pem
4) 在你现有 HTTPS server 块里指定证书并启用 HTTP/2
(如果你还没写 443 段,就加一个)
server {listen 443 ssl;http2 on;server_name your-domain.com;ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;ssl_session_timeout 1d;# 你原来的反代/静态配置放这里
}
80 跳转到 443(如果还没配)
server {listen 80;server_name your-domain.com;location ^~ /.well-known/acme-challenge/ { root /var/www/letsencrypt; }return 301 https://$host$request_uri;
}
重载:
sudo nginx -t && sudo nginx -s reload
5) 自动续签
验证一次:
sudo certbot renew --dry-run
续签成功后证书会被覆盖,你无需改 Nginx;如想续签即生效,可加一个 hook:
echo -e '#!/bin/sh\nsystemctl reload nginx' | sudo tee /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh