Nginx HTTPS部署必须正确配置证书链、协议版本与权限,强制HTTP重定向,并启用HSTS和会话复用等安全加固。核心步骤包括:使用fullchain.pem和privkey.pem文件,监听443 ssl并启用http2,限定TLSv1.2/TLSv1.3,禁用弱加密套件,通过Certbot自动续期并reload服务。

直接上 HTTPS 是当前线上服务的硬性要求,不是“要不要做”,而是“必须怎么做对”。Nginx 作为主力 Web 服务器,其 SSL 配置既要保障加密有效,又要兼顾性能与兼容性。关键不在会不会配,而在每一步是否踩准细节——证书路径、协议版本、密钥权限、重定向逻辑,错一个就可能提示“连接不安全”或握手失败。
证书获取与文件准备
生产环境推荐使用 Let’s Encrypt 免费证书(90 天有效期,支持自动续期),商业证书适合需长期稳定或 EV 显示的场景。拿到证书后,确保包含以下三个核心文件:
-
证书文件(
fullchain.pem):含站点证书 + 中间证书链,浏览器验证必需 -
私钥文件(
privkey.pem):绝对不可泄露,权限必须设为600 -
不单独放
.crt或只放域名证书:缺少中间链会导致部分安卓或旧系统校验失败
建议统一存放在 /etc/nginx/ssl/example.com/ 下,并用 chown root:root 和 chmod 600 严格限制访问。
Nginx HTTPS 基础配置
在 server 块中启用 443 端口监听,同时必须关闭 HTTP 的明文访问,强制跳转:
- HTTP server 块仅做 301 重定向:
return 301 https://$host$request_uri; - HTTPS server 块启用
http2(提升并发性能)和ssl(明确标识加密) -
ssl_certificate指向fullchain.pem,ssl_certificate_key指向privkey.pem - 协议至少限定为
TLSv1.2 TLSv1.3,禁用已淘汰的 TLSv1.0/1.1
安全加固与常见避坑点
基础能通只是起点,真正上线前还需几项关键加固:
-
HSTS 头部:加
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;,防止首次访问被降级劫持 -
会话复用:启用
ssl_session_cache shared:SSL:10m和ssl_session_timeout 4h,减少重复握手开销 - 密码套件精简:优先选 ECDHE 开头的前向保密套件,剔除 RC4、NULL、MD5 等弱算法
-
避免
ssl on;:该指令已废弃,Nginx 1.15+ 必须把ssl写在listen 443 ssl中
自动化续期与日常维护
Let’s Encrypt 证书 90 天过期,手动更新不可靠。推荐用 Certbot 定期执行:
- 安装 certbot:
sudo apt install certbot python3-certbot-nginx(Debian/Ubuntu) - 首次部署可直接
certbot --nginx -d domain.com,自动改配置并申请 - 续期任务加进 crontab:
0 2 * * 1 /usr/bin/certbot renew --quiet --no-self-upgrade - 续期后需重载 Nginx:
systemctl reload nginx,否则新证书不生效
每次变更配置后务必运行 nginx -t 校验语法,再 systemctl reload nginx 生效,切忌直接 kill 进程。


















