スマートフォン・タブレットからインターネットサーバーオペレーション

APPW.jp

Ubuntu 19.10 の Apache 2.4 で HTTP/2 の対応と PHP7.3-FPM への変更、 .html 拡張子ファイル内の PHP スクリプトを実行するまで

HTTP/2 対応は急がなくてもいいが、どこかのタイミングで切り替えたいと考えていました。ただ、同時に PHP モジュール版から CGI 版の PHP-FPM に替えなければならない点で、ほとんどのウェブページで PHP スクリプトコードを使用していることから、あらかじめ検証したいと思っていました。

10 年ぐらい前は、PHP モジュール版のほうが速いといわれていましたが、PHP 7 になってものすごく高速になって、現在では、FastCGI(PHP-FPM & mod_fcgid )版が速いといわれています。

今回は、Raspberry Pi 4 model B / 4GB に Ubuntu 19.10 をセットアップしてウェブサイトの環境を構築し、HTTP/2 への移行手順を確認します。

Install Ubuntu Server on a Raspberry Pi 2, 3 or 4 | Ubuntu

最初は、Ubuntu 19.10 の Apache 2.4 で HTTP/2 に対応するための手順です。

まず、PHP7.3-FPM のインストールがされていない場合は、あらかじめインストールします。



$ sudo apt install php7.3-fpm

 

PHP7.3-FPM が起動していることを確認します。



$ sudo systemctl status php7.3-fpm

 

PHP7.3 のモジュール版を解除して、PHP7.3 の FastCGI(PHP-FPM & mod_fcgid )版を有効にします。



$ sudo a2dismod php7.3
$ sudo a2enmod proxy_fcgi setenvif
$ sudo a2enconf php7.3-fpm

 

そして、MPM を prefork から event に変更します。



$ sudo a2dismod mpm_prefork
$ sudo a2enmod mpm_event

 

HTTP/2 モジュールを有効にします。



$ sudo a2enmod http2

 

/etc/apache2/sites-available にあるサイト設定の Virtual Host ごとに設定を追加します。HTTP/2 と HTTP/1.1 の両方を有効にする設定例です。



<IfModule mod_ssl.c>
<VirtualHost *:443>
        :
        :

        Protocols h2 http/1.1

        :
        :
</VirtualHost>
</IfModule>

 

続いて、.html 拡張子ファイル内の PHP スクリプトコードが実行されることの確認です。

これまでの PHP モジュール版では、.htaccess に次のような設定をすることで、.html 拡張子ファイル内の PHP スクリプトコードが実行されました。



AddType application/x-httpd-php .html

 

ところが、FastCGI(PHP-FPM & mod_fcgid )版にすると、これだけでは .html 拡張子ファイル内の PHP スクリプトコードが実行されませんでした。Apache2.4 において、この先の情報が見つからず、ハマってしまいました。

Google 検索していると、現在のトレンドの nginx の HTTP/2 対応には、 PHP7.3-FPM への fastcgi_pass などの設定があるのに、Apache 2.4 では見られなかったことから、そのところに注目しながら設定ファイルを探していると、/etc/apache2/conf-available/php7.3-fpm.conf に気になる箇所がありました。

ここに .html 拡張子を加えてみました。



#    <FilesMatch ".+\.ph(ar|p|tml)$">
#        SetHandler "proxy:unix:/var/run/php-fpm.sock|fcgi://localhost"
#    </FilesMatch>
    <FilesMatch ".+\.(phar|php|phtml|html)$">
        SetHandler "proxy:unix:/var/run/php-fpm.sock|fcgi://localhost"
    </FilesMatch>

 

ところが、Access denied. と表示されてしまい、なにがなんだか?ここでお手上げ、と思ったところ、 AWS EC2 Amazon Linux 2 AMI + Apache 2.4 + PHP-FPM 7.2 の構成にて、.html拡張子でPHPを動作させる - Qiita という記事が見つかりました。記事によると、さらに、/etc/php/7.3/fpm/pool.d/www.conf に設定を追加します。



;security.limit_extensions = .php .php3 .php4 .php5 .php7
security.limit_extensions = .php .html

 

これで .html 拡張子ファイル内の PHP スクリプトコードが実行されました。わたしの自力だけでここまではたどり着けなかったでしょう。HTTP/2 対応の見通しが立ちました。

『Ubuntu 19.10 の Apache 2.4 で HTTP/2 の対応と PHP7.3-FPM への変更、 .html 拡張子ファイル内の PHP スクリプトを実行するまで』を公開しました。