背景
会社で運用しているある古いWebサイトについて、AmazonLinux2023へのバージョンアップのためにサーバーリプレイスをすることになった。
かなり古いシステムらしく、具体的にいつから運用しているかは分からないが置いてあった資料的に20年以上前に構築されたものっぽい・・・
元々mod_phpでの実行方式で動いていたサイトだったがAL2023ではデフォルトでmod_phpに対応しておらず、基本php-fpmが推奨されているよう。
そこで困ったのがこの環境だとデフォルトではPHPタグを埋め込んでPHPを動作させているHTMLが正常に動作しなくなったこと。
拡張子をPHPに変更などすれば対応出来そうではあるが、古いシステムなだけにPHPを動かしてるようなHTMLファイルが大量に存在し、ちょっと厳しそう。
そこで何とかphp-fpm環境でHTMLでもPHPが動くよう設定方法があるかを調べてみた。
php.confの修正
まずはhtmlをPHPとして動作させるための設定。
/etc/httpd/conf.d/php.conf
php.confファイルにそのための設定があるので、以下の設定を変更。
変更前
<FilesMatch "\.(php|phar)$">
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
変更後
<FilesMatch "\.(php|phar|html)$">
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
FileMatchの対象拡張子にhtmlを追加する。
www.confの修正
php.confの修正でhtmlをPHPとして動かす設定自体は問題ないが、FPMで実行される拡張子の制限がかかっているため、そちらの設定の変更も必要(php.confの変更だけでブラウザでhtmlにアクセスしたところ、access deniedとなった)
/etc/php-fpm/www.conf
上記のファイルで拡張子の制限を追加する。
security.limit_extensions = .php .phar .html
こちらの設定値があれば.htmlの実行が許可される。(元々項目がある場合は.htmlを追加、ない場合は末尾に追記する)
各confファイルの修正ができたら各サービスを再起動
sudo systemctl restart php-fpm
sudo systemctl restart httpd
これでAL2023のphp-fpm環境でもhtmlファイルでPHPが実行されるようになった。
本来であればHTMLでPHPを実行するようなことは極力避けるべきだと思うが、古いシステムであるために全てをPHPファイルに差し替えるような対応ができず、今回はサーバー側の設定変更で対応した。