手把手教你配置Nginx HTTPS:踩坑全记录

David Ng | 2026-07-24T15:58:00 | DevOps, Security

从Certbot申请证书到Nginx HTTPS配置,HSTS和OCSP Stapling的完整踩坑记录

# 手把手教你配置Nginx HTTPS:踩坑全记录 公司要求所有服务上HTTPS,记录一下从申请证书到完成配置的全过程和踩过的坑。 ## 1. Certbot申请Let's Encrypt证书 ```bash # 安装certbot sudo apt install certbot python3-certbot-nginx # 自动申请并配置(最简单的方式) sudo certbot --nginx -d example.com -d www.example.com # 自动续期(certbot会自动添加cron任务) sudo certbot renew --dry-run ``` ## 2. Nginx HTTPS配置 ```nginx server { listen 443 ssl http2; server_name example.com; # 证书路径 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # TLS版本和加密套件 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers off; # HSTS:告诉浏览器只用HTTPS访问 add_header Strict-Transport-Security "max-age=63072000" always; # OCSP Stapling:加速证书验证 ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; } # HTTP重定向到HTTPS server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; } ``` ## 踩坑记录 - **坑1**:fullchain.pem包含证书链,用cert.pem会导致部分设备验证失败 - **坑2**:HSTS的max-age设太大,后悔了也改不回来(浏览器会缓存) - **坑3**:OCSP Stapling需要resolver,不配DNS解析器会报错 配完后去 ssllabs.com/ssltest 检测一下,拿A+就说明配置没问题。

← Back to Blog