系统信息:
Ubuntu 16.04
Apache 2.4.29
PHP 7.0.22(命令行)
为了启用 Apache 2,我按照本教程中的以下步骤进行操作:https://http2.pro/doc/Apache。
包括:
添加 Protocols h2 h2c http/1.1
到apache2.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!)
结论
一项非常新的技术即将到来!查看其他未来的协议在这里!
感谢访问 AskUbuntu!