自动化部署脚本为Nginx生成SSL配置需精准完成三件事:生成合规证书、写出安全HTTPS配置块、确保Nginx立即加载生效;涵盖证书管理(自签名或Certbot)、模板化配置(TLSv1.2+、强加密套件、HSTS、OCSP)、校验-写入-重载闭环及反向代理SSL验证。

在自动化部署脚本中为 Nginx 生成安全、可用的 SSL 配置,核心不是“让 Nginx 执行脚本”,而是用脚本精准完成三件事:生成合规证书(或适配已有证书)、写出符合安全基线的 HTTPS 配置块、确保 Nginx 能立即加载生效。整个过程可完全脱离人工干预,关键在于路径可控、参数明确、验证闭环。
证书环节:按需生成或预置,统一归档路径
脚本应避免硬编码证书位置,而是约定标准目录(如 /etc/nginx/ssl/$DOMAIN/),再根据场景选择生成方式:
- 开发/测试环境:用 OpenSSL 自动创建自签名证书,带 -subj "/CN=$DOMAIN" 和 -days 365,同时生成 .key 和 .crt,权限设为 600
- 生产环境:对接 Certbot 或 ACME 客户端,调用 certbot certonly --standalone -d $DOMAIN --non-interactive --agree-tos,并确认证书实际落盘在 /etc/letsencrypt/live/$DOMAIN/ 下
- 无论哪种方式,脚本最后都应输出一个变量(如 CERT_PATH 和 KEY_PATH),供后续配置段直接引用
配置生成:模板化 + 安全参数硬编码
不要拼接字符串写配置,用 here-document 或内置模板生成 server 块。必须包含以下安全项:
- 强制 TLSv1.2+,禁用 TLSv1.0/TLSv1.1:ssl_protocols TLSv1.2 TLSv1.3;
- 精简强加密套件:ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
- HSTS 头默认开启:add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
- OCSP Stapling 启用:ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 1.1.1.1 valid=300;
无缝集成:校验 → 写入 → 重载,一步不落
脚本执行完配置生成后,必须自动验证并生效:
- 先用 nginx -t 检查语法,失败则退出并打印错误,不继续
- 再用 openssl x509 -in $CERT_PATH -noout -dates 确认证书未过期、日期合理
- 将新配置写入 /etc/nginx/sites-available/$DOMAIN,并建立到 sites-enabled 的软链
- 执行 nginx -s reload(非 restart),平滑切换,零连接中断
反向代理场景补充:上游证书也要管
若 Nginx 做 HTTPS 反向代理(如 proxy_pass https://api.internal),脚本还应检查 upstream 是否启用 SSL 验证:
- 添加 proxy_ssl_verify on; 和 proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
- 可选:在部署脚本末尾加一句探测命令,如 curl -I --resolve $UPSTREAM_HOST:443:127.0.0.1 https://$UPSTREAM_HOST,确认后端 HTTPS 可通


















