Nginx + Let’s Encrypt 實(shí)現(xiàn)免費(fèi)證書(shū)!網(wǎng)站不再提示“不安全”!
最近自己搭建了一個(gè)博客網(wǎng)站,我用openssl方式創(chuàng)建了一個(gè)免費(fèi)證書(shū),結(jié)果登錄時(shí)顯示“不安全”,要寫(xiě)hosts文件才可以,讓用戶配置不現(xiàn)實(shí)。

然后我就換成了Let’s Encrypt 免費(fèi)證書(shū),成功解決這個(gè)不安全的問(wèn)題。
下面是我操作的完整步驟:
1. 為什么不用自簽名證書(shū)?
openssl自簽名證書(shū)會(huì)遇到:
- 瀏覽器仍然提示“不安全”
- 每臺(tái)客戶端都需要手動(dòng)信任
- 無(wú)法自動(dòng)續(xù)期
opnessl的自簽名證書(shū)適合用在測(cè)試或開(kāi)發(fā)環(huán)境,做網(wǎng)站就不適用。所以我用 Let’s Encrypt 生成免費(fèi)證書(shū),瀏覽器完全信任,并且可以自動(dòng)續(xù)期。
2. 前提
公網(wǎng)域名已備案:我的是www.ligelinux.com
DNS 已解析:www.ligelinux.com 和 ligelinux.com 都指向你的服務(wù)器 IP
Nginx 已安裝,80 端口可訪問(wèn)。

3. 安裝 Certbot
yum install epel-release -y # 啟用 EPEL 源
yum install certbot python3-certbot-nginx -yCentOS 7.9 默認(rèn) EPEL 里的 Certbot 版本較舊,如果 nginx 插件不可用,可用 Webroot 模式。
4. 配置 Nginx
因?yàn)槲矣玫氖荂entOS7.9,沒(méi)有加載到nginx插件,所以使用webroot方式繞過(guò)插件,需要放通80端口測(cè)試。
server {
listen 80; # 監(jiān)聽(tīng) HTTP 80 端口
server_name www.ligelinux.com ligelinux.com; # 域名綁定
# Let’s Encrypt 驗(yàn)證路徑
location /.well-known/acme-challenge/ {
root /data/nginx/cert; # 指向 Webroot 臨時(shí)目錄
allow all;
}
location / {
return 301 https://$host$request_uri; # 所有 HTTP 請(qǐng)求重定向到 HTTPS
}
}創(chuàng)建目錄并測(cè)試:
mkdir -p /data/nginx/cert/.well-known/acme-challenge
echo "test-ok" > /data/nginx/cert/.well-known/acme-challenge/test.txt訪問(wèn):
http://www.ligelinux.com/.well-known/acme-challenge/test.txt顯示 test-ok 表明路徑正確。
申請(qǐng) Let’s Encrypt 證書(shū):
certbot certonly --webroot -w /data/nginx/cert \
-d www.ligelinux.com -d ligelinux.com- --webroot -w /data/nginx/cert:指定驗(yàn)證目錄
- -d www.ligelinux.com -d ligelinux.com:指定需要證書(shū)的域名

證書(shū)生成后默認(rèn)存放:
/etc/letsencrypt/live/www.ligelinux.com/fullchain.pem
/etc/letsencrypt/live/www.ligelinux.com/privkey.pem5. 配置HTTPS + 反向代理
server {
listen 443 ssl http2; # 啟用 HTTPS 和 HTTP/2
server_name www.ligelinux.com ligelinux.com;
ssl_certificate /etc/letsencrypt/live/www.ligelinux.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.ligelinux.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://xxxxxx:8090; # 反向代理到后端應(yīng)用,填寫(xiě)你的IP地址
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;
}
}重載 Nginx:
nginx -t
systemctl restart nginx
然后訪問(wèn)一下URL,會(huì)發(fā)現(xiàn)已經(jīng)顯示安全:

6. 自動(dòng)續(xù)簽
Certbot 證書(shū)默認(rèn)是90天過(guò)期,但提供自動(dòng)續(xù)簽功能:
sudo certbot renew --dry-run--dry-run 模擬續(xù)簽。
可添加 Nginx 自動(dòng)重載:
sudo certbot renew --deploy-hook "systemctl reload nginx"確保 .well-known/acme-challenge/ 目錄保持可訪問(wèn),否則續(xù)簽會(huì)失敗。

7. 小技巧總結(jié)
- 訪問(wèn)域名:必須通過(guò) www.ligelinux.com 或 ligelinux.com,直接訪問(wèn) IP 不安全
- 瀏覽器緩存:首次啟用 HTTPS,可清理瀏覽器緩存
- 自動(dòng)續(xù)簽:使用 Certbot timer 或 cron 保證證書(shū)永不過(guò)期
- 多域名/子域名:可以在申請(qǐng)時(shí) -d sub.example.com 一次性添加





















