apache无法直接禁用http协议版本,实际需禁用不安全tls版本(sslprotocol all -sslv3 -tlsv1 -tlsv1.1)、可选禁用http/2、并限制http/1.x异常请求头以堵住安全漏洞。

Apache 本身不直接“禁用 HTTP 协议版本”(如 HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3),它默认支持多个版本,且协议版本的选择由客户端发起、服务器协商决定。真正可配置和需关注的,是禁用不安全或过时的协议协商机制与底层传输支持,尤其是:
- 禁用 HTTP/1.0 的明文弱协商行为(如不校验 Host 头导致虚拟主机混淆)
- 关闭 不安全的 TLS 版本(间接影响 HTTP/1.1 和 HTTP/2 的可用性)
- 禁用 HTTP/2 的某些高风险特性(如不加限制的流优先级、过大 header 块)
- 完全禁用 HTTP/2(若业务无需),避免相关实现漏洞(如 CVE-2023-44487 快速重置攻击)
-
HTTP/3 不被 Apache 官方主干支持(截至 2026 年中,仍需依赖第三方模块如
mod_h3或切换到 Caddy/Nginx)
所以,“禁用不必要的 HTTP 协议版本”在 Apache 中实际落地为以下三项关键操作:
关闭旧版 TLS,切断低版本 HTTP 的协商基础
HTTP/1.1 和 HTTP/2 都运行在 TLS 之上(HTTPS)。如果服务器允许 TLSv1.0 或 TLSv1.1,就可能被降级到不安全的 HTTP/1.1 行为(如无 SNI、无 ALPN),甚至让 HTTP/2 无法启用或退化。在 SSL 虚拟主机配置中明确限定协议:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLCompression off
✅ 效果:强制 TLSv1.2+,HTTP/2 自动启用(当 mod_http2 已加载且客户端支持);同时阻止老旧客户端通过降级方式绕过安全策略。
显式禁用 HTTP/2(如非必需)
如果你未主动启用 HTTP/2,它默认是关闭的;但若已启用(如通过LoadModule http2_module modules/mod_http2.so),又想彻底禁用,只需移除模块或屏蔽配置:
方法一(推荐):注释或删除加载行
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 编辑
/etc/apache2/mods-enabled/http2.load或主配置中的LoadModule http2_module - 执行
a2dismod http2(Debian/Ubuntu)或手动注释后重启
方法二:在虚拟主机中禁用特定站点的 HTTP/2
<virtualhost> Protocols h1c h1a # 不包含 h2 → 强制仅用 HTTP/1.1(明文 h1c / HTTPS h1a) </virtualhost>
限制 HTTP/1.x 行为,堵住协议层滥用入口
虽然不能“禁用 HTTP/1.0”,但可消除其带来的安全隐患:• 禁用 HTTP/1.0 的 Host 头缺失容忍(防虚拟主机劫持):
<if m> Require all denied </if>
• 拒绝无 Host 头或 IP 形式 Host 的请求(常见于扫描器和恶意代理):
RewriteCond %{HTTP_HOST} ^$ [OR]
RewriteCond %{HTTP_HOST} ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
RewriteRule ^ - [F]
• 关闭 ServerSignature 和暴露版本号(减少指纹识别面):
ServerTokens Prod ServerSignature Off
不复杂但容易忽略。重点不在“删协议”,而在收紧协商条件、关闭高危模块、过滤异常请求头——这才是 Apache 下真正可控的安全边界。










