为什么 http2 在我的 Apache/2.4.29 上不起作用?

为什么 http2 在我的 Apache/2.4.29 上不起作用?

我试图启用我正在运行的http2模块,但似乎不起作用。Apache/2.4.29Ubuntu 16.04

我确实喜欢这个:

sudo a2enmod http2

然后通过添加以下项单独激活:

Protocols h2 http/1.1

我也正在运行mpm_prefork模块,这是否会导致问题?http2如果是,那么可以运行什么替代方案mpm_prefork

还有一件事,我正在运行共享服务器,它只允许运行 PHP。我正在检查 suPHP,但他们的网站上说:

suPHP 不再维护,并且不会收到任何进一步的更新,甚至安全补丁。

答案1

这里是一个可能对您有帮助的快速解决方法。

mpm_prefork此外,在故障排除部分中,还有一些关于解决方法的有用数据这里

从 Apache 2.4.27 开始,Apache MPM(多处理模块)prefork 不再支持 HTTP/2。这将在您的 Apache 错误日志中显示如下:AH10034:mod_http2 不支持 mpm 模块(prefork.c)。mpm 决定了服务器中事物的处理方式。HTTP/2 在这方面有更多要求,当前选定的 mpm 无法满足要求。这是一个建议性警告。您的服务器将继续工作,但 HTTP/2 协议将处于非活动状态。

答案2

我解决了,我的情况是,使用 PHP、Python、Django 和 Apache2 直接/代理使用,我无法使用 http2。然后找出问题并按如下方式解决

apachectl stop
apt-get install php7.0-fpm # Install the php-fpm from your PHP repository. This package name depends on the vendor.
a2enmod proxy_fcgi setenvif
a2enconf php7.0-fpm # Again, this depends on your PHP vendor.
a2dismod php7.0 # This disables mod_php.
a2dismod mpm_prefork # This disables the prefork MPM. Only one MPM can run at a time.
a2enmod mpm_event # Enable event MPM. You could also enable mpm_worker.
apachectl start

根据您所在的地区,您需要正确的 php 版本来设置,在我的例子中是 php7.0。如果您没有 PHP,请避免遵循与 php 相关的步骤。

注意:mpm_prefork 与 http2 配合不好,性能也不好。我个人建议使用 mpm_event 或 worker

按照上述步骤设置后,我立即获得了 H2 协议。欢迎在评论中提出您的建议

相关内容