apache配置cors需启用mod_headers模块,用header always set指定具体域名的access-control-allow-origin等响应头,并配合rewrite规则处理options预检请求;生产环境禁用*通配符,且启用credentials时必须指定域名。
在 apache 主配置文件(如 /etc/apache2/apache2.conf 或 /etc/httpd/conf/httpd.conf)中配置跨域资源共享,核心是启用 mod_headers 模块并用 header set 或更推荐的 header always set 添加响应头。但要注意:直接写 header set access-control-allow-origin "*" 仅适用于开发调试,生产环境必须禁用通配符。
确保 mod_headers 已启用
这是前提,否则所有 Header 指令都会被忽略:
- Ubuntu/Debian 系统执行:
sudo a2enmod headers,然后重启:sudo systemctl restart apache2 - RHEL/CentOS 系统检查
/etc/httpd/conf/httpd.conf中是否已取消注释:LoadModule headers_module modules/mod_headers.so - 修改后务必重启服务,否则配置不生效
在主配置文件中添加 Header 指令
把以下内容插入到主配置文件的全局作用域(例如在 <ifmodule mod_headers.c></ifmodule> 块内),或更稳妥地放在某个 <directory></directory> 或 <virtualhost></virtualhost> 块中:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 基础写法(仅限开发环境):
Header set Access-Control-Allow-Origin "*" - 生产环境必须改用具体域名:
Header always set Access-Control-Allow-Origin "https://app.example.com" - 加
always是关键:确保 401、500 等错误响应也带 CORS 头,避免浏览器静默拦截 - 配套常用头建议一并设置:
Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"Header always set Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With"Header always set Access-Control-Max-Age "86400"Header append Vary Origin(防止缓存混淆)
必须处理 OPTIONS 预检请求
仅设响应头不够,浏览器发预检时 Apache 默认不返回 200,会导致请求卡住。需配合 mod_rewrite 拦截并立即响应:
- 先启用
mod_rewrite(sudo a2enmod rewrite或确认已加载) - 在相同配置块中添加:
RewriteEngine OnRewriteCond %{REQUEST_METHOD} OPTIONSRewriteRule ^(.*)$ $1 [R=200,L] - 这条规则要放在
ProxyPass或其他重写规则之前,否则可能被转发走
不推荐直接在 httpd.conf 里全局放开 *
主配置文件影响全站,用通配符会带来严重安全风险:
- 若前端需要携带 Cookie 或 Token(即设了
Access-Control-Allow-Credentials true),Origin绝对不能为*,否则浏览器直接拒绝 - 多个前端域名时,应改用
SetEnvIf + Header always set ... env=...动态匹配白名单 - 优先把 CORS 配置下沉到
VirtualHost或站点专属配置中,而非主配置文件顶层










