Apache 2.4.29 導入

Contents

はじめに

WordPress を Apache 2.4 + MySQL 5.7 + PHP7 の環境で構築します。今回はApacheの内容になります。以前導入したときから月日が経ち、導入方法もだいぶ変わっていそうなので結構調査しながら作業を進めました。
今回の目標はApacheのsystemd化とHTTP/2対応、PHP7対応、MPMのpreforkからeventへの変更です。
HTTP/2はほとんどのブラウザがHTTPSでのみ対応しているため、HTTPSにも対応させます。とりあえず自己証明書ですが。MPMの変更はpreforkがHTTP/2で動作しないためですが、PHPをeventで動作させるためにはCGIとして動作させる必要があったりと勝手がわかっていないので、はじめにpreforkで導入し、その後eventに変更を目指して進めます。

用語

今回構築するにあたって理解しておく必要のあるキーワードがあり、いろいろなサイトの情報を参考にさせてもらいました。

HTTP/2って…

HTTP/2を導入するにあたりサーバの要件は…

ALPNって…

Brotli???(なにそれ)

対象バージョン

バージョン
Apache 2.4.29

最新バージョンは公式HPで確認してください。
https://httpd.apache.org/download.cgi

サーバ環境(ConoHa VPS)

バージョン
CentOS 7 7.4.1708
OpenSSL 1.1.0g

事前準備


Apacheダウンロード

CentOS を最小構成でインストールするとwgetも入っていないので無ければ入れる。

# yum -y install wget

Apacheソース版を使うのでダウンロードしておきます

# cd /usr/local/src
# wget http://ftp.riken.jp/net/apache//httpd/httpd-2.4.29.tar.gz

MD5またはPGPによる検証は過去記事があるので参考までに。

コンパイラインストール

# yum install gcc gcc-c++

OpenSSL 1.1.0 インストール

事前にインストールしておきます。以下参考までに。

Nghttp2のインストール

Nghttp2はHTTP/2(mod_http2)のサーバソフトです。日本人のtatsuhiro-tさんという方が開発されたそうです。最新版は以下を確認してください。
https://github.com/nghttp2/nghttp2/releases/

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

# yum -y install libev-devel c-ares-devel

Nghttp2のダウンロード

# cd /usr/local/src/
# wget https://github.com/nghttp2/nghttp2/releases/download/v1.29.0/nghttp2-1.29.0.tar.gz

Nghttp2インストール。事前にインストールしたOpenSSL 1.1.0のディレクトリを指定します。

# tar zxvf nghttp2-1.29.0.tar.gz

# cd nghttp2-1.29.0/

# env OPENSSL_CFLAGS="-I/usr/local/openssl/include/" OPENSSL_LIBS="-L/usr/local/openssl/lib -lssl -lcrypto" ./configure --enable-app

# make

# make install

/usr/local配下にライブラリとコマンドができていることを確認。

# ls -l /usr/local/lib
total 1776
-rw-r--r-- 1 root root 1151296 Jan 18 11:15 libnghttp2.a
-rwxr-xr-x 1 root root 958 Jan 18 11:15 libnghttp2.la
lrwxrwxrwx 1 root root 21 Jan 18 11:15 libnghttp2.so -> libnghttp2.so.14.15.1
lrwxrwxrwx 1 root root 21 Jan 18 11:15 libnghttp2.so.14 -> libnghttp2.so.14.15.1
-rwxr-xr-x 1 root root 655544 Jan 18 11:15 libnghttp2.so.14.15.1
drwxr-xr-x 2 root root 27 Jan 18 11:15 pkgconfig

# ls -l /usr/local/bin/
total 22544
-rwxr-xr-x 1 root root 2735304 Jan 18 11:15 h2load
-rwxr-xr-x 1 root root 2236448 Jan 18 11:15 nghttp
-rwxr-xr-x 1 root root 2375864 Jan 18 11:15 nghttpd
-rwxr-xr-x 1 root root 15728584 Jan 18 11:15 nghttpx

Brotliのインストール

最新版は以下を確認。
https://github.com/google/brotli/releases

コンパイルにcmakeを使うためインストール

# yum install cmake

ダウンロード

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

ビルド・インストール

# tar zxvf v1.0.2.tar.gz
# cd brotli-1.0.2/
# mkdir out && cd out
# ../configure-cmake
# make
# make test
# make install

インストール後、ライブラリがインストールされていることを確認。

# ls -l /usr/local/lib | grep brotli
lrwxrwxrwx 1 root root 20 Jan 18 11:26 libbrotlicommon.so -> libbrotlicommon.so.1
lrwxrwxrwx 1 root root 24 Jan 18 11:26 libbrotlicommon.so.1 -> libbrotlicommon.so.1.0.2
-rwxr-xr-x 1 root root 133088 Jan 18 11:26 libbrotlicommon.so.1.0.2
-rw-r--r-- 1 root root 127944 Jan 18 11:26 libbrotlicommon-static.a
lrwxrwxrwx 1 root root 17 Jan 18 11:26 libbrotlidec.so -> libbrotlidec.so.1
lrwxrwxrwx 1 root root 21 Jan 18 11:26 libbrotlidec.so.1 -> libbrotlidec.so.1.0.2
-rwxr-xr-x 1 root root 243272 Jan 18 11:26 libbrotlidec.so.1.0.2
-rw-r--r-- 1 root root 317566 Jan 18 11:26 libbrotlidec-static.a
lrwxrwxrwx 1 root root 17 Jan 18 11:26 libbrotlienc.so -> libbrotlienc.so.1
lrwxrwxrwx 1 root root 21 Jan 18 11:26 libbrotlienc.so.1 -> libbrotlienc.so.1.0.2
-rwxr-xr-x 1 root root 1529496 Jan 18 11:26 libbrotlienc.so.1.0.2
-rw-r--r-- 1 root root 2081996 Jan 18 11:26 libbrotlienc-static.a

HTTP/2とBrotliのライブラリパス追加

HTTP/2とBrotliのライブラリが/usr/local/libに追加されたのでライブラリのパスを追加する

# vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/openssl/lib
/usr/local/lib

# 以下のコマンドで更新
# ldconfig

Apache インストール

PCREをApacheで利用するためのPCRE開発パッケージをインストール。
(Perl Compatible Rebular Expression Library version 5.0)

# yum install pcre-devel

apr-util 1.6.0 のコンパイルに「expat-devel」パッケージインストール

# yum install expat-devel

ダウンロードしたApache のソースコードを展開

# cd /usr/local/src/
# tar zxvf httpd-2.4.29.tar.gz

ディレクトリ移動

# cd /usr/local/src/httpd-2.4.29/srclib/

APR、APR-Util、APR iconvのソースをApacheに含めてビルドするため、/usr/local/src/httpd-2.4.29/srclib/にダウンロード
http://apr.apache.org/download.cgi

# wget http://ftp.riken.jp/net/apache//apr/apr-1.6.3.tar.gz
# wget http://ftp.riken.jp/net/apache//apr/apr-util-1.6.1.tar.gz
# wget http://ftp.riken.jp/net/apache//apr/apr-iconv-1.2.2.tar.gz

APR、APR-Util、APR iconvのソース展開

# tar zxvf apr-1.6.3.tar.gz && tar zxvf apr-iconv-1.2.2.tar.gz && tar zxvf apr-util-1.6.1.tar.gz

APR、APR-Util、APR iconvのディレクトリ名の変更

# mv apr-1.6.3 apr && mv apr-util-1.6.1 apr-util && mv apr-iconv-1.2.2 apr-iconv

展開前のtar.gzファイルは削除

# rm -f *.tar.gz

# ls -l
total 16
drwxr-xr-x 27 1001 1001 4096 Oct 18 23:50 apr
drwxr-xr-x 10 1001 1001 4096 Oct 18 23:52 apr-iconv
drwxr-xr-x 20 1001 1001 4096 Oct 18 23:51 apr-util
-rw-r--r-- 1 501 games 121 Feb 11 2005 Makefile.in

configure

# cd /usr/local/src/httpd-2.4.29/

# ./configure \
--prefix=/usr/local/httpd-2.4.29 \
--enable-ssl \
--with-ssl=/usr/local/openssl \
--enable-http2 \
--enable-brotli \
--with-brotli=/usr/local/lib \
--with-included-apr \
--enable-so \
--enable-mods-shared=all \
--enable-mpms-shared=all

...(省略)...

configure: summary of build options:

Server Version: 2.4.29
 Install prefix: /usr/local/httpd-2.4.29
 C compiler: gcc -std=gnu99
 CFLAGS: -g -O2 -pthread
 CPPFLAGS: -DLINUX -D_REENTRANT -D_GNU_SOURCE
 LDFLAGS:
 LIBS:
 C preprocessor: gcc -E

make、make install

# make


# make install

...(省略)...

Installing configuration files
mkdir /usr/local/httpd-2.4.29/conf
mkdir /usr/local/httpd-2.4.29/conf/extra
mkdir /usr/local/httpd-2.4.29/conf/original
mkdir /usr/local/httpd-2.4.29/conf/original/extra
Installing HTML documents
mkdir /usr/local/httpd-2.4.29/htdocs
Installing error documents
mkdir /usr/local/httpd-2.4.29/error
Installing icons
mkdir /usr/local/httpd-2.4.29/icons
mkdir /usr/local/httpd-2.4.29/logs
Installing CGIs
mkdir /usr/local/httpd-2.4.29/cgi-bin
Installing header files
Installing build system files
Installing man pages and online manual
mkdir /usr/local/httpd-2.4.29/man
mkdir /usr/local/httpd-2.4.29/man/man1
mkdir /usr/local/httpd-2.4.29/man/man8
mkdir /usr/local/httpd-2.4.29/manual
make[1]: Leaving directory `/usr/local/src/httpd-2.4.29'

SSLサーバ証明書(自己証明書)作成

HTTP/2はほとんどのブラウザがHTTPSでのみ対応とのことなので、今回は自己証明書ですがこのタイミングでやってしまいます。

いつも忘れるので作成されるファイルの内容確認。

ファイル拡張子 内容
.key 秘密鍵
.csr 証明書署名要求
.crt サーバ証明書

ディレクトリ移動

# cd /usr/local/httpd-2.4.29/conf

秘密鍵作成

# openssl genrsa 2048 > server.key

公開鍵(証明書署名要求)作成("JP"しか入れてない)

# openssl req -new -key server.key > server.csr

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

有効期間10年でサーバ証明書作成

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

Signature ok
subject=C = JP, ST = Some-State, O = Internet Widgits Pty Ltd
Getting Private key

ApacheのSSL設定ファイルでサーバ証明書と秘密鍵の配置先を確認しておく

# egrep -v "^#|^$" extra/httpd-ssl.conf | grep SSLCertificate
SSLCertificateFile "/usr/local/httpd-2.4.29/conf/server.crt"
SSLCertificateKeyFile "/usr/local/httpd-2.4.29/conf/server.key"

Apache 初期設定

とりあえず動作確認できるように設定します。

httpd.conf

# ファイルバックアップ
# cp /usr/local/httpd-2.4.29/conf/httpd.conf{,.`date +%Y%m%d`}

# vi /usr/local/httpd-2.4.29/conf/httpd.conf

# --- MPM変更 --- #
# eventでPHPを動かすときはfast_cgiが必要なため、今回はpreforkを有効にする
#LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# --- アンコメント --- #
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule brotli_module modules/mod_brotli.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule http2_module modules/mod_http2.so

# --- 変更 --- #
User apache
Group apache

#ServerAdmin you@example.com
ServerAdmin xxx@xxxxx.xxx

#ServerName www.example.com:80
ServerName xxxxx.xxx:80

#DocumentRoot "/usr/local/httpd-2.4.29/htdocs"
DocumentRoot "/var/www/html"

#<Directory "/usr/local/httpd-2.4.29/htdocs">
<Directory "/var/www/html">

#Options Indexes FollowSymLinks
Options FollowSymLinks

# --- 追加 --- #
<IfModule dir_module>
 DirectoryIndex index.html index.php
</IfModule>

# --- 変更 --- #
#<Directory "/usr/local/httpd-2.4.29/cgi-bin">
<Directory "var/www/cgi-bin">

# --- アンコメント --- #
# Server-pool management (MPM specific)
Include conf/extra/httpd-mpm.conf

# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf

httpd-ssl.conf

重要なのは"Protocols h2 http/1.1"の設定で、ブラウザが対応していればHTTP/2、対応してなければHTTP/1.1になります。

# ファイルバックアップ
# cp /usr/local/httpd-2.4.29/conf/extra/httpd-ssl.conf{,.`date +%Y%m%d`}

# vi /usr/local/httpd-2.4.29/conf/extra/httpd-ssl.conf

# --- 暗号化方式変更--- #
#SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES

SSLCipherSuite "ECDHE-ECDSA-AES128-GCM-SHA256 \
ECDHE-ECDSA-AES256-GCM-SHA384 \
ECDHE-ECDSA-AES128-SHA \
ECDHE-ECDSA-AES256-SHA \
ECDHE-ECDSA-AES128-SHA256 \
ECDHE-ECDSA-AES256-SHA384 \
ECDHE-RSA-AES128-GCM-SHA256 \
ECDHE-RSA-AES256-GCM-SHA384 \
ECDHE-RSA-AES128-SHA \
ECDHE-RSA-AES256-SHA \
ECDHE-RSA-AES128-SHA256 \
ECDHE-RSA-AES256-SHA384 \
DHE-RSA-AES128-GCM-SHA256 \
DHE-RSA-AES256-GCM-SHA384 \
DHE-RSA-AES128-SHA \
DHE-RSA-AES256-SHA \
DHE-RSA-AES128-SHA256 \
DHE-RSA-AES256-SHA256 \
EDH-RSA-DES-CBC3-SHA"

# --- 追加 --- #
<VirtualHost _default_:443>
Protocols h2 http/1.1

# --- 変更 --- #
DocumentRoot "/var/www/html"
ServerName *****:443
#ErrorLog "/usr/local/httpd-2.4.29/logs/error_log"
#TransferLog "/usr/local/httpd-2.4.29/logs/access_log"

# --- 確認 ---#
SSLEngine on
SSLCertificateFile "/usr/local/httpd-2.4.29/conf/server.crt"
SSLCertificateKeyFile "/usr/local/httpd-2.4.29/conf/server.key"

# --- 変更 ---#
#<Directory "/usr/local/httpd-2.4.29/cgi-bin">
<Directory "var/www/cgi-bin">

Apache実行ユーザの作成

とりあえずUIDとGIDはパッケージインストールしたときのIDと同じものにしておきます。

# groupadd -g 48 apache
# useradd -u 48 -g apache -s /sbin/nologin -M apache

# grep apache /etc/group
apache:x:48:

# grep apache /etc/passwd
apache:x:48:48::/home/apache:/sbin/nologin

ドキュメントルートを変更したので、ディレクトリを作成しておく

# mkdir -p /var/www/html

構文チェック

# /usr/local/httpd-2.4.29/bin/httpd -t
Syntax OK

または

# /usr/local/httpd-2.4.29/bin/apachectl configtest
Syntax OK

Apache起動

# /usr/local/httpd-2.4.29/bin/apachectl start

プロセス確認

# ps aux | grep apache | grep -v grep

Apache停止(プロセスがなくなっていることを確認する)

# /usr/local/httpd-2.4.29/bin/apachectl stop

シンボリックリンク作成

# cd /usr/local/
# ln -s /usr/local/httpd-2.4.29 httpd

# ls -l
total 8
drwxr-xr-x. 2 root root 78 Jan 18 11:26 bin
drwxr-xr-x. 2 root root 6 Nov 6 2016 etc
drwxr-xr-x. 2 root root 6 Nov 6 2016 games
lrwxrwxrwx 1 root root 23 Jan 23 09:27 httpd -> /usr/local/httpd-2.4.29
drwxr-xr-x 15 root root 175 Jan 18 17:07 httpd-2.4.29
drwxr-xr-x. 4 root root 35 Jan 18 11:26 include
drwxr-xr-x. 3 root root 4096 Jan 18 11:26 lib
drwxr-xr-x. 2 root root 6 Nov 6 2016 lib64
drwxr-xr-x. 2 root root 6 Nov 6 2016 libexec
lrwxrwxrwx 1 root root 25 Jan 17 09:23 openssl -> /usr/local/openssl-1.1.0g
drwxr-xr-x 7 root root 67 Jan 17 09:20 openssl-1.1.0g
drwxr-xr-x. 2 root root 6 Nov 6 2016 sbin
drwxr-xr-x. 7 root root 75 Jan 18 11:15 share
drwxr-xr-x. 7 root root 4096 Jan 23 08:01 src

パスを通す

# vi /etc/profile

#以下追加
export PATH=/usr/local/httpd/bin:$PATH

systemdへの登録

ここまでくればApacheが動作していることが確認できているので、systemdで動くようにします。

systemd用設定ファイル作成

# vi /etc/systemd/system/httpd.service

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

systemdに反映

# systemctl daemon-reload

systemdに反映されたことを確認する

# systemctl list-unit-files --type service | grep http
httpd.service disabled

Apacheをsystemdで起動させる

# systemctl start httpd.service

# systemctl status httpd.service
● httpd.service - The Apache HTTP2.4 Server
 Loaded: loaded (/etc/systemd/system/httpd.service; disabled; vendor preset: disabled)
 Active: active (running) since Fri 2018-01-19 11:39:40 JST; 9s ago
 Process: 10651 ExecStart=/usr/local/httpd-2.4.29/bin/apachectl -k start (code=exited, status=0/SUCCESS)
 CGroup: /system.slice/httpd.service
 ├─10656 /usr/local/httpd-2.4.29/bin/httpd -k start
 ├─10657 /usr/local/httpd-2.4.29/bin/rotatelogs logs/error_log.%Y%m%d 86400
 ├─10658 /usr/local/httpd-2.4.29/bin/rotatelogs logs/access_log.%Y%m%d 86400
 ├─10659 /usr/local/httpd-2.4.29/bin/httpd -k start
 ├─10660 /usr/local/httpd-2.4.29/bin/httpd -k start
 ├─10661 /usr/local/httpd-2.4.29/bin/httpd -k start
 ├─10662 /usr/local/httpd-2.4.29/bin/httpd -k start
 └─10663 /usr/local/httpd-2.4.29/bin/httpd -k start

Jan 19 11:39:40 ***** systemd[1]: Starting The Apache HTTP2.4 Server...
Jan 19 11:39:40 ***** systemd[1]: Started The Apache HTTP2.4 Server.

自動起動の設定と確認

# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /etc/systemd/system/httpd.service.

# systemctl is-enabled httpd.service
enabled

MPMの確認

# apachectl -V
Server version: Apache/2.4.29 (Unix)
Server built: Jan 18 2018 17:04:28
Server's Module Magic Number: 20120211:68
Server loaded: APR 1.6.3, APR-UTIL 1.6.1
Compiled using: APR 1.6.3, APR-UTIL 1.6.1
Architecture: 64-bit
Server MPM: prefork
 threaded: no
 forked: yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/usr/local/httpd-2.4.29"
 -D SUEXEC_BIN="/usr/local/httpd-2.4.29/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

動作モジュールの確認

# apachectl -M
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_event_module (shared)
 authn_file_module (shared)
 authn_core_module (shared)
 authz_host_module (shared)
 authz_groupfile_module (shared)
 authz_user_module (shared)
 authz_core_module (shared)
 access_compat_module (shared)
 auth_basic_module (shared)
 socache_shmcb_module (shared)
 reqtimeout_module (shared)
 filter_module (shared)
 brotli_module (shared)
 mime_module (shared)
 log_config_module (shared)
 env_module (shared)
 headers_module (shared)
 setenvif_module (shared)
 version_module (shared)
 ssl_module (shared)
 http2_module (shared)
 unixd_module (shared)
 status_module (shared)
 autoindex_module (shared)
 dir_module (shared)
 alias_module (shared)

firewalldの設定

今回はConoHa VPS で構築してますが、構築が終わるまでは自宅のIPからのみアクセス許可に設定しました。

# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address="xxx.xxx.xxx.xxx/32" service name="http" log prefix="firewalld" level="notice" limit value="24/h" accept'

# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address="xxx.xxx.xxx.xxx/32" service name="https" log prefix="firewalld" level="notice" limit value="24/h" accept'

# firewall-cmd --reload
success

# firewall-cmd --zone=public --list-all
public (active)
 target: default
 icmp-block-inversion: no
 interfaces: eth0
 sources:
 services:
 ports:
 protocols:
 masquerade: no
 forward-ports:
 source-ports:
 icmp-blocks:
 rich rules:
 rule family="ipv4" source address="xxx.xxx.xxx.xxx/32" service name="ssh" log prefix="firewalld" level="notice" limit value="24/h" accept
 rule family="ipv4" source address="xxx.xxx.xxx.xxx/32" service name="http" log prefix="firewalld" level="notice" limit value="24/h" accept
 rule family="ipv4" source address="xxx.xxx.xxx.xxx/32" service name="https" log prefix="firewalld" level="notice" limit value="24/h" accept

サーバ公開時にはpublicゾーンにHTTP、HTTPSの許可を追加する

# 追加
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https

# 削除
# firewall-cmd --permanent --zone=public--remove-service=http
# firewall-cmd --permanent --zone=public --remove-service=https

# 反映
# firewall-cmd --reload

# 確認
# firewall-cmd --zone=public --list-all

ブラウザ確認

Apacheのドキュメントルートを変更したので、確認用に以下のファイルを移動して置く(終わったら削除)

# cp /usr/local/httpd-2.4.29/htdocs/index.html /var/www/html/.

ブラウザでhttpとhttpsアクセスして"It work!"が表示されることを確認する。指定したアクセス元以外からは見れないことも確認しておく。

http://Server_IP/
https://Server_IP/

HTTP/2の確認方法は以下を参考にさせていただきました。

以下の画面はchromeでHTTPアクセスの確認をした時のものです。Protocolがhttp/1.1になっており、HTTP/2が無効になっているのがわかります。

ちなみにpreforkはHTTP/2に対応していないので、HTTPSでアクセスしても以下のようにエラーログに記録されます。

[Thu Feb 22 16:23:15.315822 2018] [http2:warn] [pid 1173] AH10034: The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more demands in this regard and the currently selected mpm will just not do. This is an advisory warning. Your server will continue to work, but the HTTP/2 protocol will be inactive.

最後に

今回は考慮することが多く構築順序を確定させるのがなかなか難しかった。

あとMPMをpreforkにしてるつもりが、いじってるうちに戻すのを忘れたみたいでeventになっていました。SSL接続でHTTP/2になってるやんと思ったが、ずっとメモリリークが発生する状況になってしまい、おかしいなと思いつつVPSのプランを上げても全く改善せず、MPMがeventになっていることに気が付きました。なるほどPHPでevent使うならやっぱりfastcgiにしないとだめねと思いました。

追記(2018/7/4)

MPMのprefokからeventへの変更は以下でまとめてます。

参考

Apache 2.4 event mpm+ php-fpm で WordPress を立ち上げる
http://www.kakiro-web.com/linux/ssl.html
https://weblabo.oscasierra.net/openssl-gencert-1/
https://blog.apar.jp/linux/7873/
https://blog.apar.jp/linux/8339/
https://blog.apar.jp/linux/8208/
https://qiita.com/pb_tmz08/items/68a58979ca22748e8502
https://nelog.jp/http2-browser-extensions