nginx中统一跨域与安全头配置的关键是通过模块化include机制实现集中定义、按需复用,推荐在/etc/nginx/conf.d/headers/下分设cors.conf、security.conf和common.conf,并使用map动态控制origin、always参数确保错误响应也携带头、if包裹options预检逻辑并return 204。

在 Nginx 中建立统一的跨域策略与安全头配置,关键不是“新建一个存放点”,而是通过 模块化 include 机制 实现集中定义、按需复用。Nginx 本身不提供“内置配置仓库”目录,但你可以主动构建一套可维护的结构,避免在每个 server 或 location 块里重复写 CORS 和安全头。
统一存放跨域与安全头配置文件
推荐在 /etc/nginx/conf.d/ 下创建专用子目录(如 headers/),用于归类响应头配置:
-
/etc/nginx/conf.d/headers/cors.conf:定义跨域相关 header(Origin、Methods、Headers 等) -
/etc/nginx/conf.d/headers/security.conf:定义安全头(X-Content-Type-Options、X-Frame-Options、Strict-Transport-Security 等) -
/etc/nginx/conf.d/headers/common.conf:二者合并后供 location 或 server 直接 include
例如 cors.conf 可这样写(支持带凭证且限定域名):
add_header 'Access-Control-Allow-Origin' '$http_origin' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
<p>if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}</p>在 server 或 location 中复用这些配置
只需在需要启用跨域的块中 include 对应文件即可,无需复制粘贴:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 对整个站点生效:在
server{}块顶部 includecommon.conf - 仅对 API 路径生效:在
location /api/ { ... }内部 includecors.conf - 区分环境:可通过变量或 map 指令动态控制
Access-Control-Allow-Origin的值(如开发用*,生产用白名单域名)
注意 include 的作用域与覆盖规则
Nginx 的指令继承遵循“就近优先”,所以:
- 在
http{}块中 include 的 header,默认会被所有 server 继承 - 但在某个
server{}或location{}中再次 define 同名 header,会覆盖上级定义 - 务必加
always参数(如add_header ... always),否则在 301/302 或 error 页面中 header 可能不生效 - 不要在
if块外直接写add_header处理 OPTIONS;预检逻辑必须包裹在if ($request_method = 'OPTIONS')内并配合return 204
配套建议:用 map 实现动态 Origin 控制
避免硬编码或滥用 *,可用 map 构建白名单:
map $http_origin $cors_origin {
default "";
"~^https?://(localhost|dev\.example\.com|app\.example\.com)$" "$http_origin";
}
<h1>在 cors.conf 中使用:</h1><p>add_header 'Access-Control-Allow-Origin' $cors_origin always;</p>这样既满足开发调试灵活性,又守住生产安全性。










