为了在Ubuntu Server 14.04上实现HTTP/2.0这个特性,大伟哥也算是拼上老命了,参考了好多文档,进了好多坑,花了两天时间才成功实现,光阿里云的快照都回滚了两三次,博客更新也落下了一天,好在最后终于实现了。这里详细记录一下实现方法,供大家参考一下。
首先说明一下服务器的情况:阿里云ECS服务器,安装的系统是Ubuntu Server 14.04,使用tasksel install lamp-server默认安装的LAMP组件,Apache 2.4.7, PHP 5.5.9, MySQL 5.5.57, OpenSSL 1.0.1,安装了由Let's Encrypt颁发的数字证书。
目标:实现HTTP/2.0协议,优化网站性能。
实现HTTP/2.0的条件:Apache 2.4.17以上,OpenSSL 1.0.2以上,安装了SSL证书启用了https协议。
Apache从2.4.17版本之后,开始支持HTTP/2.0,而Ubuntu 14.04的官方源是2.4.7,要安装Apache 2.4.17以后版本,要么使用第三方的PPA源,要么自己编译安装,再不就得升级到Ubuntu 16.04。自己编译的话,需要自己解决依赖库的问题,而且以后不方便升级;如果要升级到Ubuntu 16.04,一方面是阿里云官方不建议直接升级到更新版本,要稳妥地更换系统盘又比较花费时间,而且目前ECS上还运行着Magento 1.9,在没有打补丁或升级的情况下也不能直接运行在PHP7.0上。把以想来想去,只有一种办法比较合理,那就是采用第三方PPA源安装新版本的Apache2.4,至于PHP7,虽然性能提升很大,但因为目前还没准备好,所以还是先用PHP5凑合着。
以上就是选择方案升级的原因,不是情怀作祟,不复杂,也很现实,在所有的选择方案中综合考虑,以节省时间提高效率为原则。
以下是方法步骤:
一.、添加APache2和PHP的PPA源并更新:
sudo apt-get install software-properties-common python-software-properties sudo add-apt-repository ppa:ondrej/apache2 sudo add-apt-repository ppa:ondrej/php apt-get update
系统会问你是否确认加源,按Enter键回车确认。
二、安装更新必要的软件包:
sudo apt-get install apache2 sudo apt-get install php5-fpm libapache2-mod-fastcgi apache2-mpm-event
三、修改配置文件:
1.修改虚拟主机配置文件
用你喜欢的文本编辑器,修改虚拟主机的配置文件,此例中的配置文件是/etc/apache2/sites-available/daweibro.com-le-ssl.conf,加入下面一行代码,指定HTTP的版本:
Protocols h2 http/1.1
使虚拟主机的配置文件看上去像这样:
<virtualhost> ServerAdmin webmaster@localhost ServerName daweibro.com ServerAlias www.daweibro.com Protocols h2 http/1.1 DocumentRoot /var/www/html/daweibro.com <directory> Options FollowSymLinks AllowOverride None </directory> <directory /var/www/html/daweibro.com> …… </directory> </virtualhost>
2.创建及修改php5-fpm配置文件,位置和文件名称为/etc/apache2/conf-available/php5-fpm.conf,加入下面内容并保存:
<IfModule mod_fastcgi.c> AddHandler php5-fcgi .php Action php5-fcgi /php5-fcgi Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization <Directory /usr/lib/cgi-bin> Require all granted </Directory> </IfModule>
这个配置是告诉Apache使用fast CGI的形式处理PHP请求。其中socket /var/run/php5-fpm.sock,这里的路径和方式,要和/etc/php5/fpm/pool.d/www.conf中定义的“listen = /var/run/php5-fpm.sock”保持一致。
四、停用php5, mpm-perfork模块,切换到mpm_event工作模式并重启:
sudo a2dismod php5 mpm_prefork sudo a2enconf php5-fpm sudo a2enmod actions fastcgi alias sudo a2enmod mpm_event sudo a2enmod http2 sudo service apache2 restart sudo service php5-fpm restart
如果一切正常,Apache服务器就会启动并以mpm_event新模式运行,而不是原来的prefork模式运行。在浏览器里打开网站,利用开发者工具查看,如果能够看到资源的消息header版本号是HTTP/2.0而不是HTTP/1.1, 就说明我们成功实现了HTTP/2.0。
五、两点说明:
1. PPA源里的Apache版本,已经编译进了足够高版本的OpenSSL,比如当前安装的版本已经是OpenSSL 1.1.0f,不需我们自行安装。
2.PPA源里目前的Apache版本是2.4.27,而从这个版本开始,HTTP/2已经不再支持prefork模式运行,所以我们只能更换运行模式到worker或者event。转换Apache的运行模式直接导致了我们工作量的增加。
参考文章:
- 639 阅读
添加新评论