为apache提供http2支持

截至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 http2

sudo service apache2 restart

大功告成。

4、参见

https://new.blog.cloudflare.com/tools-for-debugging-testing-and-using-http-2/

Tagged , , , .