お茶漬けぶろぐ

Ubuntu16.04のApache2でHTTP/2する

あると思ったらなかったHTTP/2対応(?)

[bash]
$ sudo a2enmod http2
ERROR: Module http2 does not exist!
$ ls /etc/apache2/mods-available/http2.load
ls: cannot access ‘/etc/apache2/mods-available/http2.load’: No such file or directory
[/bash]

マジかよ。

ぐぐってきたら、mod_http2.soが無いらしいので自前でapache2ビルドしてやれ、という情報が。やってやるぜ!

参考サイト:

How To Set Up Apache with HTTP/2 Support on Ubuntu 16.04 - WebSetNet

Bug #1543572 “mod_http2 is not available under apache 2.4.18 / U…“:Bugs:apache2 package:Ubuntu

流れは、

  1. ソースを拾えるようにリポジトリリストをいじる
  2. ビルドに必要なパッケージをインストール
  3. ビルドする
  4. mod_http2.soをコピー
  5. mods-availableに配置するべきloadファイルを作成する

参考サイトでは最初にlibnghttp2-devをインストールさせてるけど、ぶっちゃけようわからん(まがお)一応入れました

さて作業。

[bash]
$ sudo apt-get install libnghttp2-dev
$ tail -n3 /etc/apt/sources.list
deb-src http://archive.ubuntu.com/ubuntu xenial main universe restricted multiverse
deb-src http://security.ubuntu.com/ubuntu xenial-security main universe restricted multiverse
deb-src http://archive.ubuntu.com/ubuntu xenial-updates main universe restricted multiverse
$ sudo apt-get update
$ cd ~
$ mkdir apache2
$ cd apache2
$ apt-get source apache2
$ sudo apt-get build-dep apache2
$ cd apache2-2.4.18
$ fakeroot debian/rules binary
[/bash]

以上でビルドが完了するはず。あとはコピーして有効化してなんたらかんたら

[bash]
$ sudo cp ~/apache2/apache2-2.4.18/debian/apache2-bin/usr/lib/apache2/modules/mod_http2.so /usr/lib/apache2/modules/
$ cat /etc/apache2/mods-available/http2.load
LoadModule http2_module /usr/lib/apache2/modules/mod_http2.so

LogLevel http2:info

$ sudo a2enmod http2
$ cat /etc/apache2/sites-enabled/default-ssl.conf

<VirtualHost _default_:443> 〜略〜 Protocols h2 http/1.1 〜略〜 $ sudo service apache2 restart [/bash] あとはDeveloper Toolsでプロトコル調べるとかなんとかして動作チェックしよう。

< PHPでiCalendarなデータをパースする

Let's encryptでサラッとHTTPSする >