nginx支持在每个server块中为不同域名单独配置ssl_session_timeout,如www.a.com设5m、www.b.com设30s,互不影响;需与ssl_session_cache配合使用,推荐分设独立缓存区(如shared:a_ssl:5m和shared:b_ssl:10m)以避免混用。

可以为不同域名单独设置 ssl_session_timeout,Nginx 支持在每个 server 块中独立配置该参数,无需全局统一。
每个 server 块独立定义超时时间
Nginx 的 SSL 会话缓存策略是按虚拟主机(即每个 server 块)生效的。只要把 ssl_session_timeout 放在对应域名的 server { ... } 内,它就只作用于该域名的 HTTPS 连接。
-
www.a.com 可设为
ssl_session_timeout 10m; -
www.b.com 可设为
ssl_session_timeout 2m; - 两个配置互不影响,重启 Nginx 后各自生效
注意 ssl_session_cache 的作用域匹配
ssl_session_timeout 必须和 ssl_session_cache 配合使用才有效。缓存名称(如 shared:SSL:10m 中的 SSL)在同一 Nginx 实例中需唯一,但不同域名可共用同一缓存区,也可分设:
- 共用缓存:都写
ssl_session_cache shared:SSL:10m;,再各自配不同timeout - 分离缓存(更推荐):分别用
shared:a_ssl:5m;和shared:b_ssl:2m;,避免会话混用
实际配置示例
以下片段展示两个域名使用不同超时策略:
server {
listen 443 ssl;
server_name www.a.com;
ssl_certificate /path/a.crt;
ssl_certificate_key /path/a.key;
ssl_session_cache shared:a_ssl:5m;
ssl_session_timeout 5m; # 仅对 a.com 生效
<pre class="brush:php;toolbar:false;">location / { root /var/www/a; }}
server { listen 443 ssl; server_name www.b.com; ssl_certificate /path/b.crt; ssl_certificate_key /path/b.key; ssl_session_cache shared:b_ssl:10m; ssl_session_timeout 30s; # 仅对 b.com 生效,更短
location / { root /var/www/b; }}
验证是否生效
可通过 OpenSSL 命令检查实际协商的会话超时值:
openssl s_client -connect www.a.com:443 -servername www.a.com 2>/dev/null | grep "Session-ID"
配合抓包或查看 Nginx error log 中的 ssl_handshake 日志(需开启 debug 级别),能确认会话是否按预期复用及过期。











