Ubuntu 20.04 & Apache 2.4環境でHTTP/2 & FastCGIを実装

同時処理によりWebの表示速度が爆上げになったHTTP/2、最近の普及率は結構高くなってきていました。今後はむしろHTTP/2のほうこそ主流だと思います。今回はowner203の世界にようやくHTTP/2を実装したので、その詳細をメモしておきます。

実装環境

まず実装前の環境を説明します。OSはUbuntu 20.04 LTSで、Apacheのバージョンは2.4.43です。そしてPHPのバージョンは7.4.7です。インストールしているPHP関連のパッケージはこちらです。

php7.4
libapache2-mod-php7.4
php7.4-mysql
php7.4-gd
php7.4-json
php7.4-curl
php7.4-mbstring
php7.4-intl
php7.4-xml
php7.4-xmlrpc
php7.4-soap
php7.4-zip
php7.4-bz2
php7.4-bcmath
php7.4-gmp
php-imagick
php-apcu

PHP-FPMを導入

HTTP/2導入するためにPHPモジュールを追加します。

sudo apt install php7.4-fpm

それから、指示通りにApacheのFastCGI modを有効化します。

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.4-fpm

最後に従来のPHP7.4のmodを無効化して、Apacheを再起動します。

sudo a2dismod php7.4
sudo systemctl restart apache2.service

MPMを変更

従来のMPM (Multi-Processing Module)はHTTP/2に完全対応していないので、従来の「prefork」から「event」に変更します。

sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2.service
sudo systemctl restart php7.4-fpm.service

HTTP/2を有効化

ApacheでHTTP/2を有効化して、再起動します。

sudo a2enmod http2
sudo systemctl restart apache2.service

バーチャルホストの設定変更

ホスト中のサイトのconfファイルでHTTP/2を優先させるよう記載します。

sudo vi /etc/apache2/sites-available/owner.pw.conf
/etc/apache2/sites-available/owner.pw.conf

#前略...

<VirtualHost *:443>
#以下の行を追記する
Protocols h2 http/1.1

#中略...
</VirtualHost>

PHPの設定ファイル

PHP-FPMの使用によって、使用されるphp.iniファイルが変わります。必要に応じてphp.iniファイルをカスタマイズします。

sudo vi /etc/php/7.4/fpm/php.ini
/etc/php/7.4/fpm/php.ini

memory_limit = 1G

post_max_size = 5G

upload_max_filesize = 5G

PHP-FPMの設定

PHP-FPMの設定によってサーバーの性能が変わります。しかし不適切な設定は逆に性能が落ちることやメモリリーク等につながるので注意しましょう。

sudo vi /etc/php/7.4/fpm/pool.d/www.conf
/etc/php/7.4/fpm/pool.d/www.conf

pm = static  #プロセス制御方法をstaticにする(プロセス起動数が少ないため)

pm.max_children = 2  #最大プロセス数を2にする(サーバーのCPUコア数を考慮する)

pm.max_requests = 500  #プロセスごとの最大リクエスト数を制限する(メモリリークを防ぐため)