问题

问题

系统信息:

Ubuntu 16.04

Apache 2.4.29

PHP 7.0.22(命令行)

为了启用 Apache 2,我按照本教程中的以下步骤进行操作:https://http2.pro/doc/Apache

包括:

添加 Protocols h2 h2c http/1.1apache2.conf以及Virtual Hosts configuration

成功做到了:

a2enmod mpm_event
a2enmod http2 

已重新启动:

service apache2 restart
sudo service php7.0-fpm reload

服务员仍然拒绝交谈HTTP 2。尝试了各种教程。

我对 Ubuntu 还很陌生:我可能遗漏了什么以及我可以采取哪些步骤来调试这个问题?

答案1


问题

浏览/var/log/apache2/error.log档案,包含如下内容:

[http2:warn] [pid 3220] AH10034:mod_http2 不支持 mpm modum 模块 (prefork.c)。mpm 决定了服务器中事物的处理方式。HTTP/2 在这方面有更多要求,当前选定的 mpm 无法满足要求。这是一个建议性警告。您的服务器将继续工作,但 HTTP/2 协议将处于非活动状态。

先决条件

在终端命令运行以获取您自己的变量:

  • Ubuntu 版本:lsb_release -a
  • Apache 版本:apache2 -v
  • PHP版本:php -v

这个问题是为了:

Ubuntu 16.04
Apache 2.4.29
PHP 7.0.22 (CLI)

这个答案正是针对:

Ubuntu 16.04.3 LTS
Apache/2.4.29 (Ubuntu)
PHP 7.1.12-3+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Dec 14 2017 15:37:13)

PHP 7.1.12 是按照给出的步骤构建的(参见问题):如何在 Apache 中启用 HTTP/2 支持,最后更新于2017年11月5日。


免责声明

请自行承担风险;请勿在任何生产服务器上使用此答案。不客气 ;-)。


回答

引用,之前提到的相同教程:

Apache 2.4.27,prefork 不支持 HTTP/2

我们必须将模式 prefork 更改为模式 event 或 worker,但请注意,你将需要使用PHP 作为 FastCGI

一步步

步骤1

首先将 Ondřej Surý 的存储库(请注意 UTF8 字符)添加到您的 Ubuntu,此说明取自此处DigitalOcean 的教程。你需要 root 权限,这里我们将使用须藤命令:

sudo add-apt-repository ppa:ondrej/php
sudo apt-get install -y language-pack-en-base
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
sudo apt-get update

第二步

sudo apt-get install php7.1

是啊,没错,没开玩笑。之后,下一步。

第三步

sudo apachectl stop
sudo apt-get install php7.1-fpm 
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.1-fpm 
sudo a2dismod php7.1 
sudo a2dismod mpm_prefork 
sudo a2enmod mpm_event 
sudo apachectl start

故障排除

如果你有任何问题

sudo a2dismod php7.1

试试这个:

sudo a2dismod php7.0

(我们也遇到了这个问题:sudo a2dismod php7.1

可能的改进

如果您想使用最新的包:

sudo apt-get install php7.2-fpm

我们安装好了,看图

验证工作完成情况

请参阅下一张图片以了解我们的结果并访问https://http2.pro进行您自己的测试(首先设置 ufw!)

HTTP2.Pro 检查

结论

一项非常新的技术即将到来!查看其他未来的协议在这里

感谢访问 AskUbuntu!


相关内容