Nginx HTTPS全局配置需统一SSL参数与证书路径、用map实现HTTP→HTTPS自动跳转、复用HTTPS server模板并添加安全响应头。

在 Nginx 中实现 HTTPS 全局配置,核心是统一处理 HTTP 到 HTTPS 的强制跳转、复用 SSL 证书配置、并确保所有 server 块遵循安全策略。不推荐为每个站点单独写重复的 SSL 配置,而是通过 include 和 map 等机制集中管理。
统一 SSL 参数与证书路径(推荐放在 http 块)
将通用的 TLS 设置提取到全局作用域,避免每个 server 块重复书写:
- 使用
ssl_certificate和ssl_certificate_key指向通配符或主域名证书(如/etc/nginx/ssl/fullchain.pem和/etc/nginx/ssl/privkey.pem) - 启用现代 TLS 协议和强加密套件:
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; - 开启 OCSP Stapling 和会话复用提升性能与安全性:
ssl_stapling on; ssl_stapling_verify on;ssl_session_cache shared:SSL:10m; ssl_session_timeout 4h;
HTTP → HTTPS 全局重定向(无需每个 server 写 rewrite)
利用 map 指令定义重定向逻辑,再在 server 块中统一调用:
- 在
http块顶部添加:
map $scheme $redirect_to_https {<br> http "https://$host$request_uri";<br> default ""; } - 在监听 80 的 server 块中直接使用:
return 301 $redirect_to_https; - 这样所有新接入的域名只要走这个 80 server,就自动跳转,无需修改配置文件结构
HTTPS server 块模板(支持多域名泛匹配)
一个可复用的 HTTPS server 模板,适配多个子域或不同域名:
- 监听 443 并启用 HTTP/2:
listen 443 ssl http2; - 支持多域名(含泛域名):
server_name example.com *.example.com other-site.net; - 复用全局 SSL 配置后,只需声明证书路径(若证书统一)或用变量动态加载(进阶场景)
- 内置基础安全头:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;add_header X-Content-Type-Options nosniff;add_header X-Frame-Options DENY;
可选:基于域名自动选择证书(适合多租户或 SaaS 场景)
若需为不同域名加载不同证书,可用 map + ssl_certificate_by_lua_block(需 lua-nginx-module),或更轻量的方式:
- 用
map映射域名到证书路径变量:
map $host $cert_path {<br> example.com "/etc/nginx/ssl/example.com.pem";<br> other-site.net "/etc/nginx/ssl/other-site.net.pem";<br> default "/etc/nginx/ssl/default.pem"; } - 在 server 块中引用:
ssl_certificate $cert_path;ssl_certificate_key $cert_path.key; - 注意:Nginx 要求这些指令必须在 server 块内,且变量值需为静态路径(不能带复杂表达式)


















