需在VirtualHost中用Header always set配置COEP和COOP头,确保仅作用于指定站点;同时需配合CORP或CORS使跨源资源可加载,并验证crossOriginIsolated为true。
在虚拟主机层级用 mod_headers 配置 cross-origin-embedder-policy(coep),核心是确保该头只作用于你指定的站点,且不干扰其他共存站点。apache 的 <virtualhost></virtualhost> 块天然支持按域名或 ip 精确隔离,只要模块已启用、语法正确,就能安全生效。
确认 mod_headers 已启用
COEP 依赖 mod_headers 模块输出响应头。需先检查是否加载:
- 运行
a2enmod headers(Debian/Ubuntu)或确认LoadModule headers_module modules/mod_headers.so在 Apache 配置中未被注释(RHEL/CentOS) - 重启 Apache:
systemctl restart apache2或httpd - 用
apache2ctl -M | grep headers验证模块已激活
在 VirtualHost 中添加 COEP 和 COOP 头
仅对目标虚拟主机生效,不影响同服务器其他站点。推荐同时配置 COOP(跨源 opener 隔离),因两者协同才能启用 SharedArrayBuffer 等高级能力:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example
<pre class="brush:php;toolbar:false;"><IfModule mod_headers.c>
Header always set Cross-Origin-Embedder-Policy "require-corp"
Header always set Cross-Origin-Opener-Policy "same-origin"
</IfModule>
# 其他配置...
-
Header always set确保所有响应(包括 404、301 等非 200)都携带该头,避免漏掉关键资源 - 若使用 HTTPS,同样在
<virtualhost></virtualhost>块中重复配置,不可省略 - 不建议用
Header set(无always),否则重定向或错误页可能缺失头,导致隔离失败
配合 CORP 或 CORS 保证资源可加载
启用 require-corp 后,浏览器会拒绝加载任何未声明“可被嵌入”的跨源资源。因此必须同步处理静态资源:
- 同一域名下的 JS/CSS/图片无需额外操作(默认同源)
- 若引用 CDN 上的脚本(如
https://cdn.example.net/ffmpeg-core.js),CDN 必须返回Cross-Origin-Resource-Policy: cross-origin或Access-Control-Allow-Origin: * - 若无法控制第三方资源,改用同源托管,或临时将 COEP 设为
require-same-origin(限制更严,仅允许完全同源)
验证与常见问题
部署后,打开浏览器开发者工具 → Network → 刷新页面 → 查看任意 HTML 响应的 Headers 标签页:
- 确认存在两行:
Cross-Origin-Embedder-Policy: require-corp和Cross-Origin-Opener-Policy: same-origin - 访问
self.crossOriginIsolated控制台,返回true表示隔离成功 - 若页面白屏或报错
SharedArrayBuffer is not defined,大概率是某个子资源(如字体、图片、iframe)触发了 COEP 拦截,需检查 Network 面板中的 Failed 请求及其响应头

















