Apache 2.4系 HTTP/2 対応ウェブサーバの環境を構築する

Scientific Linux 7 や CentOS 7 の Apache 2.4系 HTTP/2 対応サーバを RPM パッケージをインストールして簡単に環境構築する方法です。

【centos apache http2】のようなワードで軽く検索してみるとソースからコンパイル・ビルドするタイプの記事がヒットします。RHEL 系 OS はパッケージ管理システムですので簡単に導入できるよう RPM パッケージを作成しました。

RPM パッケージのダウンロード

CentOS 7
Scientific Linux 7

簡単に解説すると上記のパッケージ、【apr httpd httpd-tools httpd-filesystem mod_ssl】の5つを rpm コマンドでインストールしたあと、 ssl が設定された conf ファイルの VirtualHost ディレクティブ内に【Protocols h2 http/1.1】と書き足すだけです。

Apache 2.4系 HTTP/2 対応サーバの環境構築

今回は CentOS 7.3 1611 を「最小限のインストール」でインストールした状態に、環境を構築します。

ダウンロードした RPM パッケージを /tmp に置いてください。

# から始まるコマンドは root ユーザです。管理者フラグの一般ユーザから実行する場合は $ sudo ~ と置き換えてください。


# yum install epel-release

# yum install mailcap apr-util nghttp2
libnghttp2 libev もインストールされます。

# cd /tmp

# rpm -Uvh apr-1.5.2-4.el7.centos.yk1.x86_64.rpm httpd-2.4.25-3.el7.centos.yk2.x86_64.rpm httpd-tools-2.4.25-3.el7.centos.yk2.x86_64.rpm httpd-filesystem-2.4.25-3.el7.centos.yk2.noarch.rpm mod_ssl-2.4.25-3.el7.centos.yk2.x86_64.rpm

# apachectl configtest
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Syntax OK

# vi /etc/httpd/conf/httpd.conf
#ServerName www.example.com:80
↓コメントを外し適当なホスト名に変更します
ServerName localhost.localdomain:80

VirtualHost ディレクティブ内に Protocols を追記します
# vi /etc/httpd/conf.d/ssl.conf
<VirtualHost _default_:443>

<IfModule http2_module>
  ProtocolsHonorOrder On
  Protocols h2 http/1.1
#  H2Direct on
#  Header set Strict-Transport-Security "max-age=15552000"
</IfModule>

# apachectl configtest
Syntax OK

# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

# systemctl start httpd

# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 土 2017-04-01 12:59:20 JST; 12s ago
 Main PID: 19203 (httpd)
   Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─19203 /usr/sbin/httpd -DFOREGROUND
           ├─19204 /usr/sbin/httpd -DFOREGROUND
           ├─19205 /usr/sbin/httpd -DFOREGROUND
           ├─19206 /usr/sbin/httpd -DFOREGROUND
           ├─19207 /usr/sbin/httpd -DFOREGROUND
           └─19208 /usr/sbin/httpd -DFOREGROUND

 4月 01 12:59:19 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
 4月 01 12:59:20 localhost.localdomain systemd[1]: Started The Apache HTTP Server.

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

# firewall-cmd --add-service http
success

# firewall-cmd --add-service http --permanent
success

# firewall-cmd --add-service https
success

# firewall-cmd --add-service https --permanent
success

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: dhcpv6-client http https ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

ブラウザからサーバにアクセスします。プロトコルが h2(HTTP/2) になっています。

HTTP/2

配布パッケージの説明

パッケージは Fedora Project から拝借してます。apr パッケージはリビルドしただけですので spec ファイルには履歴を追加しておりません。apache パッケージは少々手を加えました。 ALPN の HTTP/2 対応するには OpenSSL のバージョン 1.0.2 以降が必要ですので、ライブラリは 1.0.2k をスタティックリンクとしてます。OpenSSLのビルドオプションにデフォルトで有効かどうかわからなかったので enable-tlsext を明示的に指定してますので SNI にも対応してると思います。多分。

何をどうこうしてるのか知りたい方は spec ファイルを眺めてみてください。OpenSSL のソースをダウンロードしてコンパイル・リンク・インストールする動作に頭を抱えそうになるかも。

リビルドする際は冒頭で配布の apr-devel のインストールが必要です。他の devel パッケージは yum でインストールできます。

SRPM パッケージのダウンロード

CentOS 7
Scientific Linux 7

注意事項

無保証です。野良ビルドパッケージですよ!野良ビルドの目印としてパッケージ名に yk を入れております。

将来において、バージョンアップのパッケージを公開するか不明です。

検証もせず本番環境にインストールしないでください。仮想環境等で動作を確認してください。

何かミスってるかもしれません。見つけた方はこっそりコメントをお願いします。

シェアする

コメント

関連記事
Apache 2.4.27 mod_h[ttp]2 1.10.11 (mod_ssl) パッケージの配布: 以前に Scientific Linux 7 や CentOS 7 用の httpd rpm パッケージを配布してるのでそれの更新です。 脆弱性(CVE-2017-9789)のために Apache 同梱の mod_http2 が組み込めなくなってる?ので mod_h[ttp]2 をパ...
2017-09-24

トラックバック

トラックバック用URL
http://www.youyoukankan.net/cms/action.php?action=plugin&name=TrackBack&tb_id=195
トラックバック
このエントリにトラックバックはありません