PHPでシステムを構築しているWEBサーバを更新することになりました。
それに伴い
PHPのバージョンを7.4から8.3に
Apacheも最新にすることになりました。
7月1日まではPHP8.3とApache2.4.59を使用してシステムの修正と動作確認を行っていましたが、7月1日に脆弱性対応版のApache2.4.60が公開されたということでこちらを使用することになりました。
httpd.confの内容も全く変わっておらず、同じ個所を修正すれば、問題なく動くものと思っていました。
目次
システムにアクセスするとindex.phpがダウンロードされる?
テスト環境の設定も終わって、localhostからシステムにアクセスしたところ
ブラウザからindex.phpがダウンロードされるようになっていました。
設定が間違っているのかと思い、httpd.confや.htaccessなどを見なおしましたが、特におかしいところはなさそうです。
phpinfo.phpを作成し起動してみたところ、問題なく表示されました。
ついでにindex.htmlも試してみたところ、当然問題ありませんでした。
index.phpを指定すると起動できる
phpinfo.phpが問題なかったのでURLにindex.phpを指定して起動してみました。
すると問題なくTOPページが表示されます。
ますます原因がわからなくなりました。
とりあえず起動はしたので、他の設定自体は間違っていないようです。
解決方法はAddtype→AddHndler
原因についてですが、httpd.confで設定した。
Apache2.4.59までは、下記の設定で動いていました。
AddType application/x-httpd-php .php
ただApache2.4.60では
AddtypeではなくAddHandlerにしないとindex.phpがダウンロードされてしまうようでした。
ということで
AddType application/x-httpd-php .php
→
AddHandler application/x-httpd-php .php
に記述を変更。
と思ったんですが、AddtypeとAddHndlerについて調べてみると、
拡張子にphpを含んでいれば(aaa.php.bbbなど)phpとしてマッチされるということで
PHPでは推奨していないみたいです。
で最終的には以下で設定しました。
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
この設定でApacheを再始動したところ
正常にシステムが起動できました!
まとめ
今回の件についてですが、httpd.confの記述については、これまで何年も同じ内容で問題なかったので、全く変更したことはありませんでした。
結局問題解決に1日かかってしまいました。
2.4.59から2.4.60というマイナーバージョンの変更でこんなに苦労するとは・・・
PHPについても7.4から8.3に変更で色々修正箇所があり、結構時間がかかりました。
まあとりあえず解決!ということで原因がわかってよかったです。
追記
apache2.4.60のバグでした。
下記のページに記述がありました。
https://httpd.apache.org/security/vulnerabilities_24.html
Apache HTTP Server 2.4.60 のコアの回帰により、ハンドラーの従来のコンテンツ タイプ ベースの構成の一部が無視されます。ファイルが間接的に要求される状況によっては、「AddType」や同様の構成によって、ローカル コンテンツのソース コードが公開されることがあります。たとえば、PHP スクリプトが解釈されるのではなく、提供される場合があります。
まさにソースコードが公開される=index.phpがダウンロードされるということですね。
というわけで2.4.61をインストールしましょう。