You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 16.04下Apache/2.4.41+WordPress启用HTTP/2失败求助

解决Apache 2.4.41在Ubuntu 16.04上启用HTTP/2的问题

你已经完成了基础的模块激活和配置,但HTTP/2在Apache上生效还有几个关键前提没覆盖到,我帮你一步步排查:

1. 检查MPM模式(最容易踩的坑)

Apache的HTTP/2模块完全不支持prefork MPM——因为prefork是单进程单线程模型,根本适配不了HTTP/2的多路复用特性。你得先确认当前用的是哪种MPM:

  • 查看当前MPM:
    sudo apache2ctl -M | grep mpm
    
  • 如果输出是mpm_prefork_module (shared),必须切换到event或worker MPM:
    1. 禁用prefork:
      sudo a2dismod mpm_prefork
      
    2. 启用event MPM(推荐,比worker更高效):
      sudo a2enmod mpm_event
      
  • 注意:如果你之前用的是mod_php(PHP作为Apache模块运行),event/worker MPM和它不兼容,得切换到PHP-FPM才能让PHP正常工作:
    1. 安装对应版本的PHP-FPM(Ubuntu16.04默认是PHP7.0):
      sudo apt-get install php7.0-fpm
      
    2. 禁用mod_php:
      sudo a2dismod php7.0
      
    3. 启用FPM相关模块:
      sudo a2enmod proxy_fcgi setenvif
      
    4. 在你的HTTPS站点配置块(<VirtualHost *:443>)里添加PHP-FPM转发规则:
      <FilesMatch \.php$>
          SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost/"
      </FilesMatch>
      

2. 确保TLS配置符合HTTP/2要求

HTTP/2只支持TLS 1.2及以上版本,而且必须启用ALPN(应用层协议协商)来完成HTTP/2的协议协商:

  • 修改SSL配置(可以是全局的/etc/apache2/mods-available/ssl.conf,也可以是站点的VirtualHost配置):
    # 强制使用TLS 1.2及以上版本,禁用老旧协议
    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    # 使用支持ALPN的现代密码套件(参考Mozilla中间安全配置)
    SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
    # 启用ALPN(你的Apache 2.4.41版本原生支持,无需额外模块)
    SSLHonorCipherOrder off
    SSLCompression off
    SSLSessionTickets on
    

3. 确认Protocols配置的优先级

  • 务必把Protocols h2 http/1.1添加在HTTPS的VirtualHost块(<VirtualHost *:443>)内,HTTP(80端口)的配置加了也没用——HTTP/2只在HTTPS环境下生效。
  • 检查配置是否被覆盖:运行sudo apache2ctl -S查看站点的生效配置路径,确认对应的文件里确实存在Protocols设置。

4. 验证配置并重启服务

  • 先检查配置语法是否合法:
    sudo apache2ctl configtest
    
  • 如果输出Syntax OK,重启Apache服务:
    sudo systemctl restart apache2
    
  • 若仍有问题,查看错误日志找线索:
    sudo tail -f /var/log/apache2/error.log
    
    日志会明确告诉你HTTP/2初始化失败的原因(比如MPM不兼容、TLS配置不符合要求等)。

5. 测试HTTP/2是否生效

  • 用curl快速验证:
    curl -I --http2 https://your-domain.com
    
    若返回的状态行是HTTP/2 200,说明已经成功启用。
  • 或者用浏览器开发者工具:打开网站后按F12进入Network标签,查看Protocol列,显示h2即为生效状态。

内容的提问来源于stack exchange,提问作者DS87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 16:22:43