一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Nginx 中 HTTPS 配置如何在多语言站点中统一管理安全证书策略

时间:2026-08-25 11:43:48 编辑:袖梨 来源:一聚教程网

关键是将证书配置、TLS参数和重定向逻辑下沉至Nginx全局层:用*.example.com通配符证书统一覆盖多语言子域,通过map动态映射域名到证书路径,http块中统设ssl_protocols、HSTS及301跳转规则,实现零配置新增子域自动HTTPS。

在多语言站点中统一管理 HTTPS 安全证书策略,关键是把证书配置、TLS 参数和重定向逻辑从具体站点剥离,下沉到 Nginx 全局层,避免为 zh.example.comen.example.comja.example.com 等每个子域重复写一套 SSL 配置。

用通配符证书覆盖全部语言子域

最简方案是使用一张泛域名证书(如 *.example.com),它天然支持所有子域,包括多语言子域:

  1. 证书路径统一设为 /etc/nginx/ssl/example.com/fullchain.pem/etc/nginx/ssl/example.com/privkey.pem
  2. 在全局 http 块中定义一次,后续所有 server 块直接复用,无需重复声明 ssl_certificate
  3. 确保证书 SAN(Subject Alternative Name)包含所有实际使用的子域,或直接依赖通配符匹配

通过 map 动态映射语言子域到证书变量(多租户场景)

若不同语言站点分属不同品牌或需独立证书(如 en.brand-a.comzh.brand-b.com),可用 map 实现按域名自动加载证书:

  1. 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";

    }

  2. HTTPS server 块中直接引用:

    ssl_certificate $ssl_cert_path;

    ssl_certificate_key $ssl_cert_path/.key;

  3. 注意:Nginx 1.19.0+ 支持变量用于证书路径;旧版本需配合 Lua 模块(ssl_certificate_by_lua_block

全局 TLS 策略与安全头统一下发

所有语言站点应共用同一套加密强度与响应头,避免个别子域降级:

  1. http 块中统一设置:

    ssl_protocols TLSv1.2 TLSv1.3;

    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:…;

    ssl_prefer_server_ciphers off;

  2. 强制启用 HSTS 并覆盖子域:

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

  3. 基础防护头也统一添加:

    add_header X-Content-Type-Options nosniff;

    add_header X-Frame-Options DENY;

HTTP 自动跳转 HTTPS 的零配置接入

新上线的语言子域无需修改任何 server 块,就能自动跳转:

  1. http 块中用 map 定义跳转逻辑:

    map $scheme $redirect_to_https {

    http "https://$host$request_uri";

    default "";

    }

  2. 仅保留一个监听 80 的通用 server:

    server { listen 80; return 301 $redirect_to_https; }

  3. 所有新增子域(如 fr.example.com)只要走这个 80 端口,就自动 301 跳转,无需单独配置

热门栏目