截至2015年末,主要的浏览器的最新版本已经支持HTTP/2协议。其中:Google Chrome、Mozilla Firefox、Microsoft Edge和Opera已支持HTTP/2,并默认启用。Internet Explorer自IE 11开始支持HTTP/2,并预设启用。
下面简述ubuntu16.04 下apache下开启http2的几种方法。
1、使用ppa:ondrej源
UBUNTU 16.04默认源里的APACHE为2.4.18版,没有HTTP2模块,直接启用HTTP2会找不到模块。
a2enmod http2
ERROR: Module http2 does not exist!
ppa:ondrej是一个比较知名的源,最新的apache版本是2.4.38
sudo add-apt-repository ppa:ondrej/apache2
sudo apt update
sudo apt install apache2
a2enmod http2
安装Let’s Encrypt,在默认配置文件的SERVERNAME下添加一行:
<VirtualHost x.x.x.x:443>
Protocols h2 http/1.1…
</VirtualHost>
重启apache
service apache2 restart
2、编译apache 2.4.41
我们需要安装 nghttp2(http2 的 C 语言库)
#安装编译工具等
sudo apt-get install git g++ make binutils autoconf automake autotools-dev libtool pkg-config \
zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libev-dev libevent-dev libjansson-dev \
libjemalloc-dev cython python3-dev python-setuptools libpcre3 libpcre3-dev openssl#编译安装nghttp2
git clone https://github.com/tatsuhiro-t/nghttp2.git
cd nghttp2
autoreconf -i
automake
autoconf
./configure
make
make install
安装PRCE
#apt-get install libpcre3 libpcre3-dev
#已经安装
编译apache
cd ~
wget http://archive.apache.org/dist/httpd/httpd-2.4.18.tar.gz
wget https://www-us.apache.org/dist/apr/apr-1.7.0.tar.gz
wget https://www-us.apache.org/dist/apr/apr-util-1.6.1.tar.gz
tar xzf httpd-2.4.18.tar.gz
tar xzf apr-1.7.0.tar.gz
tar xzf apr-util-1.6.1.tar.gz
mv apr-1.7.0 httpd-2.4.18/srclib/apr
mv apr-util-1.6.1 httpd-2.4.18/srclib/apr-util
cd httpd-2.4.18./configure –prefix=/usr/local/apache2.4.18 –enable-so –enable-deflate=shared –enable-ssl=shared –enable-expires=shared –enable-headers=shared –enable-rewrite=shared –enable-static-support –with-included-apr –with-mpm=event –enable-http2
make && make install
#添加启动脚本apache2到service
sudo cp /usr/local/apache2.4.18/bin/apachectl /etc/init.d/apache2
cd ..
#添加apache2到环境变量
sudo echo ‘export PATH=$PATH:/usr/local/apache2.4.18/bin’ > ./apache2.sh
sudo chmod a+x apache2.sh# 拷贝脚本至目录
sudo cp apache2.sh /etc/profile.d# 更新脚本状态
source /etc/profile.d/apache2.sh
#添加apache2到开机启动项
sudo nano /etc/rc.local#将/etc/profile.d/apache2.sh添加到exit 0之前
/etc/profile.d/apache2.sh
exit 0
#启动apache2
sudo systemctl start apache2
不过因为编译安装的apache2设置文件集中放在httpd.conf,使用起来不是很方便,还要一堆设置,不推荐使用,重点是利用编译好的http2.so模块。
以上在linode编译成功,不同IDC可能稍有不同,请自行甄别。
3、直接使用上一步编译好的http2.so模块,推荐
sudo cp /usr/local/apache2.4.18/modules/mod_http2.so /usr/lib/apache2/modules/
然后为HTTP2模块编写一个配置文件:
sudo nano /etc/apache2/mods-available/http2.load
在其中写入以下:
LoadModule http2_module /usr/lib/apache2/modules/mod_http2.so
LogLevel http2:info
注意:
nghttp2还是要安装的,要不apache2重启会报错。同时不要忘记设置VirtualHost
<VirtualHost x.x.x.x:443>
Protocols h2 http/1.1…
</VirtualHost>
最后启用HTTP2模块:
sudo service apache2 restart
sudo a2enmod http2sudo service apache2 restart
大功告成。
4、参见
https://new.blog.cloudflare.com/tools-for-debugging-testing-and-using-http-2/