CentOS7+Apache2.4+PHP7+SuexecでPHPを(ユーザーディレクトリで)CGIモード化する

投稿日:

このページでは、CentOS7上で稼働するPHP7をCGIモード化する手順を解説します。当方ではAddHandlerを使ってドツボにはまりました。

もくじ

  • Apache2.4とPHP7のインストールと初期設定
  • SELinuxの設定変更
  • ユーザーディレクトリ・ユーザー権限でPHPを稼働させる準備
  • 実行してみる

前提条件

以下、ユーザー名をhogeとします。また、WEBサイトはユーザーディレクトリに(/home/hoge/public_html 以下のディレクトリに)構築し、ユーザー権限でPHPを動かします。今回は例として/home/hoge/public_html/piyoをドキュメントルートとします。

Apache2.4とPHP7のインストールと初期設定

Apache2.4

Apacheは普通にyumでインストールすればいいでしょう。また、サーバー再起動時にApacheも自動で再起動されるようにします。

インストールしたら設定作業を行います。

設定ファイルを開いたら、以下のように書き換えます。

ユーザーディレクトリの公開設定も行いましょう。ユーザーディレクトリでCGIを実行できるようにします。

設定ファイルを開いたら、以下の記述を編集します。

バーチャルホストの設定については、PHPのCGIモード化設定時にまとめて行います。また、HTTPの通信を許可していない場合は、以下のコマンドで許可してください。

PHP7

PHP7をインストールする場合は、こちらのページを参考にしてサードパーティリポジトリ(Remi)を導入した上で、yumで入れます。

PHPをインストールしたら、php.iniを開いて設定をいじります。

php.iniを開いたら、以下の記述を修正します。

今回はここだけ修正しましたが、必要であればその他の部分も修正してください。ちなみに、あるディレクトリだけPHPの設定を変えたい場合は、対象ディレクトリに.user.iniという名前の設定ファイルを置けばOKです。

SELinuxの設定変更

ユーザーディレクトリにWEBサイトを構築し、PHPをユーザー権限で(CGIモードで)動かす場合は、SELinuxの設定を変更する必要があるので、以下のコマンドを打ちます。

ユーザーディレクトリ・ユーザー権限でPHPを稼働させる準備

ユーザー権限でphp-cgiを稼働させる

まずはCGIモードのPHPをユーザー権限で動かす準備です。以下のコマンドを打ちます。

WEBサイトを公開するユーザーが複数いる場合は、ユーザーごとにCGI実行用のディレクトリを作ってください。

ディレクトリを作ったら、シェルスクリプトを作ります。このシェルスクリプトにより、インストールされているphp-cgiを呼び出します。

保存したら、以下のコマンドでシェルスクリプトの所有者をPHPを使用するページを公開するユーザーにします。

バーチャルホストの設定

今度はバーチャルホストの設定を行います。

バーチャルホストの設定ファイルを以下のように書き換えます。複数ユーザー・複数ドメイン名でWEBサイトを構築する場合は、ユーザーごとにScriptAliasの設定を記述し、ドメイン名ごとに<VirtualHost *:80>から</VirtualHost>までの部分の設定を書いてください。

書き終えたら保存しましょう。

ちなみに、ここで「AddHandler php-cgi .php」と書くとドツボにはまります。その理由についてはこちらで説明します。

Suexecの設定

Suexecのパーミッションを変更します。

Suexecを使うことにより、WEBサーバーユーザー(Aoache)とは別のユーザーの権限でCGIを実行できるようになります。バーチャルホストの設定で出てきた「SuexecUserGroup」は、どのユーザーの権限でCGIを実行するかを指定するディレクティブです。

実行してみる

ここまでで設定は終わりです。Apacheを起動しましょう。

Apache再起動後、設定したディレクトリでPHPがCGIモード化されているかを確かめましょう。以下のPHPプログラムをコピペして(任意の半角英数).php という名前で保存し、CGIモード化の設定を行ったディレクトリにアップロードしてください。

アップロードしたらブラウザでアクセスしてみましょう。


このように、ディレクトリ所有者名がユーザー名として表示され、「Server API」の項目に「CGI/FastCGI」と表示されていれば、CGIモード化成功です。

このブログを応援する・寄付する

当ブログでは暗号通貨による寄付を募っております。

Bitcoin:

Monacoin:

Litecoin: