最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中 HTTPS 配置如何在多语言站点中统一管理安全证书策略
时间:2026-08-25 11:43:48 编辑:袖梨 来源:一聚教程网
关键是将证书配置、TLS参数和重定向逻辑下沉至Nginx全局层:用*.example.com通配符证书统一覆盖多语言子域,通过map动态映射域名到证书路径,http块中统设ssl_protocols、HSTS及301跳转规则,实现零配置新增子域自动HTTPS。
在多语言站点中统一管理 HTTPS 安全证书策略,关键是把证书配置、TLS 参数和重定向逻辑从具体站点剥离,下沉到 Nginx 全局层,避免为 zh.example.com、en.example.com、ja.example.com 等每个子域重复写一套 SSL 配置。
用通配符证书覆盖全部语言子域
最简方案是使用一张泛域名证书(如 *.example.com),它天然支持所有子域,包括多语言子域:
- 证书路径统一设为
/etc/nginx/ssl/example.com/fullchain.pem和/etc/nginx/ssl/example.com/privkey.pem - 在全局
http块中定义一次,后续所有server块直接复用,无需重复声明ssl_certificate - 确保证书 SAN(Subject Alternative Name)包含所有实际使用的子域,或直接依赖通配符匹配
通过 map 动态映射语言子域到证书变量(多租户场景)
若不同语言站点分属不同品牌或需独立证书(如 en.brand-a.com 和 zh.brand-b.com),可用 map 实现按域名自动加载证书:
- 在
http块顶部定义映射关系:map $host $ssl_cert_path {
en.brand-a.com "/etc/nginx/ssl/brand-a/fullchain.pem";
zh.brand-b.com "/etc/nginx/ssl/brand-b/fullchain.pem";
default "/etc/nginx/ssl/default/fullchain.pem";
}
- HTTPS
server块中直接引用:ssl_certificate $ssl_cert_path;ssl_certificate_key $ssl_cert_path/.key; - 注意:Nginx 1.19.0+ 支持变量用于证书路径;旧版本需配合 Lua 模块(
ssl_certificate_by_lua_block)
全局 TLS 策略与安全头统一下发
所有语言站点应共用同一套加密强度与响应头,避免个别子域降级:
- 在
http块中统一设置:ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:…;ssl_prefer_server_ciphers off; - 强制启用 HSTS 并覆盖子域:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; - 基础防护头也统一添加:
add_header X-Content-Type-Options nosniff;add_header X-Frame-Options DENY;
HTTP 自动跳转 HTTPS 的零配置接入
新上线的语言子域无需修改任何 server 块,就能自动跳转:
- 在
http块中用map定义跳转逻辑:map $scheme $redirect_to_https {
http "https://$host$request_uri";
default "";
}
- 仅保留一个监听 80 的通用 server:
server { listen 80; return 301 $redirect_to_https; } - 所有新增子域(如
fr.example.com)只要走这个 80 端口,就自动 301 跳转,无需单独配置