Apache服务器未设置X-Frame-Options头:如何正确配置SAMEORIGIN参数
Apache配置X-Frame-Options响应头不生效解决方案
核心前置检查
绝大多数配置不生效都是因为未启用Apache的headers模块,先执行以下操作:
- Debian/Ubuntu系统执行:
sudo a2enmod headers - CentOS/RHEL系统不需要额外启用模块,headers模块默认已加载
执行完成后先重启一次Apache:sudo systemctl restart apache2(CentOS/RHEL替换为sudo systemctl restart httpd)
正确配置方法(按生效范围选择)
1. 全局生效(所有站点都携带该响应头)
打开主配置文件:
- Debian/Ubuntu路径:
/etc/apache2/apache2.conf - CentOS/RHEL路径:
/etc/httpd/conf/httpd.conf
在文件末尾添加如下配置:
Header always set X-Frame-Options "SAMEORIGIN"
注意:你之前的配置
Header set X-Frame-Options: "SAMEORIGIN"多了一个冒号,属于语法错误;添加always参数可以确保错误状态码的响应也携带该头,覆盖范围更完整。
添加完成后重启Apache即可生效。
2. 单站点生效(仅指定站点携带响应头)
修改对应站点的虚拟主机配置文件,Debian/Ubuntu下路径为/etc/apache2/sites-available/你的站点配置名.conf,在<VirtualHost>标签内部添加上述Header配置,保存后执行:
- 启用站点配置:
sudo a2ensite 你的站点配置名 - 重启Apache生效
3. 目录级生效(仅指定目录下的资源携带响应头)
使用.htaccess配置前需要先开启目录的Override权限:
- 打开Apache主配置文件,找到站点根目录对应的
<Directory>配置段,将AllowOverride None修改为AllowOverride All - 重启Apache
- 在站点目标目录下新建/编辑
.htaccess文件,添加如下内容:Header always set X-Frame-Options "SAMEORIGIN"
生效验证
除了Chrome开发者工具的Network面板,也可以用curl命令直接校验:
curl -I 你的站点访问地址
返回结果中存在X-Frame-Options: SAMEORIGIN即表示配置生效。
常见问题排查
- 配置修改前先执行语法校验:
apache2ctl configtest(CentOS/RHEL替换为httpd -t),避免语法错误导致配置不加载 - 不要在多个配置文件中重复配置X-Frame-Options,避免规则覆盖
- 如果站点前置了CDN、反向代理服务,需要确认代理层没有删除该响应头
内容的提问来源于stack exchange,提问作者Kumar K
相关产品推荐
相关产品推荐

