Apache中配置Permissions-Policy需用Header always set指令,禁用Feature-Policy,显式声明权限如geolocation=(),确保mod_headers已启用,并在httpd.conf或虚拟主机中设置,值以逗号分隔、括号指定来源,未声明权限默认允许。

直接在 Apache 中用 mod_headers 配置 Permissions-Policy,核心是使用 Header always set 指令写入标准格式的策略值。注意 Feature-Policy 已被完全弃用,必须用新头名 Permissions-Policy,且语法和默认行为都不同。
确认 mod_headers 已启用
确保服务器已加载该模块:
- 检查配置文件中存在未注释的行:
LoadModule headers_module modules/mod_headers.so - Debian/Ubuntu 可运行
a2enmod headers && systemctl restart apache2 - RHEL/CentOS 检查
/etc/httpd/conf.modules.d/00-base.conf或执行httpd -M | grep headers
写入 Permissions-Policy 响应头
推荐使用 Header always set(而非 Header set),避免被后续逻辑覆盖。策略值为逗号分隔的指令列表,括号内填 self、具体域名或空表示禁止:
- 全局禁用敏感权限:
Header always set Permissions-Policy "geolocation=(), camera=(), microphone=(), accelerometer=(), gyroscope=(), magnetometer=()" - 仅允许自身调用全屏:
fullscreen=(self) - 允许特定第三方调用支付功能:
payment=https://pay.example.com
把这行加到 httpd.conf、security-headers.conf 或虚拟主机配置中( 内或外均可,但全局建议放主配置的 块里)。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
注意作用域与覆盖逻辑
最终送达浏览器的值,取决于哪一层真正生效:
- Apache 配置优先级高于 PHP 的
header()调用 - CDN(如 Cloudflare)可能过滤或重写该头,需单独在 CDN 控制台开启或配置响应头
- Nginx 反向代理若存在,它发出的头会覆盖 Apache 的——此时应在 Nginx 层统一设置
- 未声明的权限默认允许,所以必须显式列出要限制的项,不能依赖“默认禁止”
验证是否生效
部署后,用浏览器开发者工具的 Network 标签页查看任意响应的响应头,确认包含 Permissions-Policy 且值符合预期。也可用在线工具如 securityheaders.com 扫描,或运行 curl 命令:
curl -I https://yoursite.com | grep -i permissions-policy










