Apache httpd 2.4.35 + HTTP/2 + Brotli インストールメモ

Linux
Linux
スポンサーリンク

 

(2023年10月21日追記)このバージョンの Apache httpd にはセキュリティ脆弱性及び不具合が見つかっています。これらのセキュリティ脆弱性などが修正されている「Apache httpd 2.4.58(TLS1.3対応)+ HTTP/2 + Brotli インストールメモ」をご参照ください。

2018年9月22日、Apache httpd2.4.35 が安定板としてリリースされました。約2ヶ月ぶりのバージョンアップです。Apache httpd2.4.35 では各種不具合への対応がされています。注目の TLSv1.3 に対応した OpenSSL 1.1.1 のサポートはこのバージョンでは見送られ、将来のリリースで対応予定とのことです。さっそく、CentOS7.5 (1804) に Apache httpd 2.4.35 をインストールする手順をまとめてみました。

 

Apache HTTP Server 2.4.35 リリースノート(抜粋)

This release is compatible with OpenSSL versions from 0.9.8a to 1.1.0 only, and does not support TLSv1.3. Future releases of httpd 2.4 are expected to add compatibility with OpenSSL 1.1.1 and enable support for TLSv1.3.

http://www.apache.org/dist/httpd/Announcement2.4.html より引用(2018年9月26日)

参考資料:Changes with Apache 2.4.35

開発ツールのインストール

Apache httpd や各種ライブラリをソースからコンパイルしますので、CentOS7.5 (1804) を「最小限のインストール」でインストールしている場合は、基本コマンドと開発ツールをインストールしておきましょう。

yum -y groupinstall base
yum -y groupinstall development
yum -y update

Nghttp2 のインストール

HTTP/2(mod_http2)のコアエンジン Nghttp2 をインストールします。

Nghttp2 が必要とするライブラリのインストール

yum -y install openssl-devel
yum -y install jansson-devel
yum -y install libev-devel
yum -y install c-ares-devel

Nghttp2 のダウンロード(ダウンロードの前に Nghttp2の最新リリース を確認しておきましょう)

cd /usr/local/src/
wget https://github.com/nghttp2/nghttp2/releases/download/v1.33.0/nghttp2-1.33.0.tar.gz

Nghttp2 をコンパイルしてインストールします。(そこそこの時間がかかります)

tar xvzf nghttp2-1.33.0.tar.gz
cd nghttp2-1.33.0/
./configure -enable-app
make
make install

HTTP/2 のライブラリ「libnghttp2」が /usr/local/lib 以下にインストールされます。Nghttp2 関連のコマンドは /usr/local/bin 以下にインストールされます。(特にベンチマークツールの h2load が便利です)

Brotli のインストール

Brotli のコンパイルに cmake を使いますので、インストールしておきます。

yum -y install cmake

Brotli のダウンロード(ダウンロードの前に Brotliの最新リリース を確認しておきましょう)

cd /usr/local/src/
wget https://github.com/google/brotli/archive/v1.0.6.tar.gz

Brotli をコンパイルしてインストールします。

tar xvzf v1.0.6.tar.gz
cd brotli-1.0.6/
mkdir out && cd out
../configure-cmake
make
make test
make install

Brotli のライブラリが /usr/local/lib 以下にインストールされます。

ライブラリへのパス追加

HTTP/2 と Brotliのライブラリが「/usr/local/lib」以下にインストールされましたので、ライブラリのパスに追加しておきます。(この後インストールする curlの最新版のライブラリもこの場所にインストールされます)

echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf
ldconfig

Apache httpd インストールの下準備

Apache httpd のコンパイルに必要なパッケージをインストールしておきます。

yum -y install pcre-devel
yum -y install expat-devel

また、Apache 2.4系をソースコードからインストールする場合は、APR と APR-util が必要になりますので、インストールしておきます。

APR

cd /usr/local/src/
wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-1.6.5.tar.gz
tar xvzf apr-1.6.5.tar.gz
cd apr-1.6.5/
./configure
make
make install

APR-util

cd /usr/local/src/
wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-util-1.6.1.tar.gz
tar xvzf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1/
./configure --with-apr=/usr/local/apr
make
make install

Apache httpd 2.4.35 のインストール

いよいよ本題の Apache httpd のインストールです。

Apache httpd のソースコードのダウンロード

cd /usr/local/src/
wget http://ftp.jaist.ac.jp/pub/apache//httpd/httpd-2.4.35.tar.gz

ダウンロードしたソースコードを解凍して、ディレクトリを移動します。

tar xvzf httpd-2.4.35.tar.gz
cd httpd-2.4.35/

HTTP/2 と Brotli モジュール、SSL/TLS を有効にしてインストールします。

./configure \
--enable-http2 \
--enable-brotli \
--with-brotli=/usr/local/lib \
--enable-ssl \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr \
--enable-so \
--enable-mods-shared=all \
--enable-mpms-shared=all
 
make
make install

以上で Apache が /usr/local/apache2/ 以下にインストールされました。続いてSSLサーバー証明書の作成と、Apacheの設定を行います。

自己署名のSSLサーバー証明書の作成

正規の認証局が発行したサーバー証明書を、無料で取得することもできます。よければご参照ください → Let's Encrypt サーバー証明書の取得と自動更新設定メモ

HTTP/2 および Brotli は HTTPS が必須になりますので Apache の設定の前に、SSLサーバー証明書を作成しておきます。

秘密鍵の作成(ECDSAの256ビット鍵を生成)

openssl ecparam -name prime256v1 -genkey -out server.key

CSR(証明書署名要求)の作成(入力するのは2箇所だけです)

openssl req -new -key server.key > server.csr
 
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:<空エンター>
Locality Name (eg, city) [Default City]:<空エンター>
Organization Name (eg, company) [Default Company Ltd]:<空エンター>
Organizational Unit Name (eg, section) []:<空エンター>
Common Name (eg, your name or your server's hostname) []:www.example.com
Email Address []:<空エンター>
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<空エンター>
An optional company name []:<空エンター>

SSLサーバー証明書の作成(有効期限10年)

openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt

秘密鍵とSSL証明書を移動

mv -i server.key /etc/pki/tls/private/
mv -i server.crt /etc/pki/tls/certs/

パーミッションを変更

chmod 600 /etc/pki/tls/private/server.key
chmod 600 /etc/pki/tls/certs/server.crt

SELinux を有効にしている場合は、秘密鍵とSSL証明書にセキュリティコンテキストをつけておきましょう。(Apache 起動時にエラーが発生することがあります)

restorecon -v /etc/pki/tls/private/server.key
restorecon -v /etc/pki/tls/certs/server.crt

CSRを削除

rm server.csr

Apache httpd の設定

オリジナルの設定ファイルをバックアップ

mv -i /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.org
mv -i /usr/local/apache2/conf/extra/httpd-ssl.conf /usr/local/apache2/conf/extra/httpd-ssl.conf.org

・設定ファイルを作成します
vim /usr/local/apache2/conf/httpd.conf

vim /usr/local/apache2/conf/extra/httpd-ssl.conf

systemd サービスファイルの作成

Apache httpd 用の systemd サービスファイル(起動スクリプトのようなもの)を作成します。

vim /etc/systemd/system/httpd.service

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
ExecStart=/usr/local/apache2/bin/apachectl start
ExecReload=/usr/local/apache2/bin/apachectl graceful
ExecStop=/usr/local/apache2/bin/apachectl stop
 
[Install]
WantedBy=multi-user.target

作成したサービスファイルを systemd に反映

systemctl daemon-reload

systemd に反映されているか確認

systemctl list-unit-files | grep httpd
httpd.service disabled ←この表示があればOK

起動

systemctl start httpd

自動起動設定

systemctl enable httpd

firewalld設定

HTTP(80/tcp) と HTTPS(443/tcp) を開けておきます。

firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload

・確認
firewall-cmd --list-all

public (default, active)
interfaces: enp0s3 enp0s8
sources:
services: dhcpv6-client ssh
ports: 443/tcp 80/tcp ←この表示があればOK
(略)

ログのローテーション設定

・設定ファイルを作成します
vim /etc/logrotate.d/httpd

/usr/local/apache2/logs/*log { 
    daily 
    missingok 
    dateext 
    rotate 60 
    create 644 daemon daemon
    sharedscripts 
    postrotate 
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript 
}

・確認します
logrotate -dv /etc/logrotate.d/httpd
-----(下記のような表示であればOKです)-----

reading config file /etc/logrotate.d/httpd
 
Handling 1 logs
 
rotating pattern: /usr/local/apache2/logs/*log after 1 days (60 rotations)
empty log files are rotated, old logs are removed
(略)

以上です。設定お疲れ様でした!

コメント

タイトルとURLをコピーしました