云网牛站
所在位置:首页 > Linux云服务器 > 在Ubuntu 16.04上使用Apache启用HTTP/2协议的方法

在Ubuntu 16.04上使用Apache启用HTTP/2协议的方法

2019-03-22 16:00:12作者:陈雄稿源:云网牛站

本文介绍在Ubuntu 16.04操作系统中启用HTTP/2协议并在Apache服务器上,及启用服务器推送的方法。

 

先决条件

HTTP/2规范允许纯文本HTTP,但实际上所有主流Web浏览器都以需要HTTPS的方式实现HTTP/2,可参考网站从HTTP升级成HTTPS完全配置教程

从版本2.4.26开始,Apache中的HTTP/2是生产就绪的,因此,你将需要使用Apache HTTP/2模块mod_http2构建的Apache 2.4.26或更高版本,Ubuntu 16.04中的Apache软件包没有HTTP/2模块,可以使用mod_http2从ondrej的PPA安装最新版本的Apache,开发者是Certbot PPA的维护者:

sudo apt install software-properties-common

sudo add-apt-repository ppa:ondrej/apache2

sudo apt update

sudo apt install apache2

 

在Apache Virtual Host上启用HTTP/2协议

满足上述两个要求后,即可启用HTTP/2模块:

sudo a2enmod http2

然后编辑Apache主机文件,如果你使用Let's Encrypt启用HTTPS,则SSL主机将定义为以le-ssl.conf结尾的单独文件,请更改your-site:

sudo nano /etc/apache2/sites-enabled/your-site-le-ssl.conf

在打开<VirtualHost *:443>标记后放置以下指令:

Protocols h2 http/1.1

在Ubuntu 16.04上使用Apache启用HTTP/2协议的方法

保存并关闭文件,然后重新启动Apache以使更改生效:

sudo systemctl restart apache2

 

如果你使用的是mod_php

如果你将mod_php模块与Apache一起使用,那么你正在使用prefork MPM模块,不幸的是,Mod_http2不支持prefork,可以使用事件MPM模块来支持HTTP/2,并且需要你使用FastCGI运行PHP,因为事件MPM与mod_php不兼容,按照以下步骤从prefork切换到事件MPM,请注意,在以下命令中,在Ubuntu 16.04上使用PHP7.1、php7.0:

禁用PHP7模块:

sudo a2dismod php7.0

sudo a2dismod php7.1

禁用prefork MPM模块:

sudo a2dismod mpm_prefork

启用事件MPM,Fast_CGI和setenvif模块:

sudo a2enmod mpm_event proxy_fcgi setenvif

安装PHP-FPM:

sudo apt install php7.0-fpm 

sudo apt install php7.1-fpm

启动PHP-FPM:

sudo systemctl start php7.0-fpm

sudo systemctl start php7.1-fpm

启用PHP-FPM以在启动时启动:

sudo systemctl enable php7.0-fpm

sudo systemctl enable php7.1-fpm

使用以下命令将PHP-FPM设置为Apache的PHP处理程序,该命令将启用/etc/apache2/conf-available/php7.x-fpm .conf文件:

sudo a2enconf php7.0-fpm

sudo a2enconf php7.1-fpm

重新启动Apache以使更改生效:

sudo systemctl restart apache2

 

如何启用服务器推送

HTTP/2附带了一个名为“服务器推送”的功能,它允许Web服务器发送Web浏览器不需要的资源,但是需要加载网页,例如,如果Web浏览器请求HTML文档,则Web服务器知道客户端将需要关联的CSS文件并将其与HTML文档一起发送,从而消除了Web浏览器发送CSS请求的需要。

在这里,我以WordPress为例(参考:在Ubuntu 18.04系统下搭建WordPress全过程),WordPress站点通常需要以下资源:

style.css:主样式表,位于主题目录的根目录下。

jquery.js:JQuery库。

jquery-migrate.min.js:旧的JQuery。

wp-embed.min.js:用于嵌入视频。

要将这些资源推送到客户端,请在<VirtualHost>块中添加以下指令,用你自己的WordPress主题名称替换twentyseventeen:

Header add Link "</wp-content/themes/twentyseventeen/style.css>;rel=preload"

Header add Link "</wp-includes/js/jquery/jquery.js>;rel=preload"

Header add Link "</wp-includes/js/jquery/jquery-migrate.min.js>;rel=preload"

Header add Link "</wp-includes/js/wp-embed.min.js>;rel=preload"

保存并关闭文件,然后重新启动Apache以使更改生效:

sudo systemctl restart apache2

请注意,需要在functions.php文件中添加以下代码,以从WordPress CSS和JavaScript文件中删除版本号,当WordPress更新时,如果将版本号添加到这些文件,则服务器推送将不起作用:

// Remove WP Version From Styles        

add_filter( 'style_loader_src', 'sdt_remove_ver_css_js', 9999 );

// Remove WP Version From Scripts

add_filter( 'script_loader_src', 'sdt_remove_ver_css_js', 9999 );

// Function to remove version numbers

function sdt_remove_ver_css_js( $src ) {

if ( strpos( $src, 'ver=' ) )

$src = remove_query_arg( 'ver', $src );

return $src;

}

附:测试服务器推送

在Google Chrome浏览器中,加载你的页面,然后按Ctrl+Shift+I打开开发人员工具,然后点击网络标签,按F5重新加载,正如你在下面的屏幕截图中看到的那样,服务器推送正在我的一个网站上运行,如果看到“来自内存缓存”,则右键单击它,清除浏览器缓存并重新加载:

在Ubuntu 16.04上使用Apache启用HTTP/2协议的方法

 

相关主题

Ubuntu 16.04系统中Nginx上配置HTTP/2简明教程

精选文章
热门文章