NGINX 1.11.10版本修改Cookie SameSite属性的实现方案咨询
由于Nginx 1.19.3版本才原生支持proxy_cookie_flags配置,低版本可通过修改响应Set-Cookie头实现同类功能,推荐使用预集成ngx_http_headers_more_filter_module的Nginx版本(大部分第三方编译源、容器镜像默认已集成该模块,无集成需自行编译添加)。
场景1:全局修改所有Cookie
效果和你提供的Apache配置完全一致:检测到Cookie未携带SameSite属性时,自动追加SameSite=Strict和Secure标记,同时自动移除重复的Secure标记。
# 可放在http、server或location块生效 # 可自定义跳过规则,示例为请求路径匹配^/custom/时跳过修改 set $samesite_skip 0; if ($uri ~* ^/custom/) { set $samesite_skip 1; } if ($samesite_skip = 0) { # 给未携带SameSite的Cookie追加属性 more_set_headers 'Set-Cookie: *~^(?!.*[;\s]SameSite=)(.*)$' '$0; SameSite=Strict; Secure'; # 移除末尾重复的Secure标记 more_set_headers 'Set-Cookie: *~^(.*[;\s]Secure[;\s].*)\s*Secure$' '$1'; }
场景2:仅修改指定名称的Cookie
以修改名为user_session的Cookie为例,仅对该Cookie追加SameSite属性,其他Cookie保持不变:
more_set_headers 'Set-Cookie: *~^user_session=([^;]*)(;.*)?$' 'user_session=$1$2; SameSite=Strict; Secure';
无headers-more模块的兼容方案(仅适合单Cookie场景)
如果后端服务仅返回1个Cookie,也可以用Nginx原生配置实现,无需额外模块:
# http块定义映射规则 map $upstream_http_set_cookie $processed_cookie { *~^(?!.*[;\s]SameSite=)(.*)$ "$0; SameSite=Strict; Secure"; default $upstream_http_set_cookie; } # 对应location块中添加配置 proxy_hide_header Set-Cookie; add_header Set-Cookie $processed_cookie;
内容的提问来源于stack exchange,提问作者hoz
相关产品推荐
相关产品推荐

