🐘

CentOS7 + Nginx + PHP-FPM でPHPを実行する環境を整える

2021/02/21に公開

はじめに

PHPをインストールしてNginxの設定でCGIを実行できるようにすれば簡単にできると思っていましたが、実際にやってみると意外とハマったのでメモとして残しておきます。

PHPのインストール

以下のコマンドを実行します。

$ sudo yum -y install php

インストールできたかどうかを確認します。

$ php --version

📝 最新版のPHPをインストールしたい場合、あるいはプロジェクトごとに異なるバージョンのPHPを簡単に管理したい場合は、phpenvをおすすめします。phpenv利用したPHPのインストール手順については「phpenvで最新版のPHPをインストールしてWebサイトで使用する」を参考にしてください。

PHP-FPMのインストール

以下のコマンドを実行します。

$ sudo yum -y install php-fpm

Nginxのインストール

こちらの記事を参照してください。

CentOS 7 (5, 6) で "安定版 (最新版)" のNginxをインストールする方法

PHP-FPMの設定を変更

Apacheを使用する場合は特に変更することはありませんが、Nginxを使用する場合は設定ファイルの変更が必要です。/etc/php-fpm.d/www.conf内のusergroupnginxに変更します。

/etc/php-fpm.d/www.conf
- user = apache
- group = apache
+ user = nginx
+ group = nginx

設定したら、PHP-FPMを起動(再起動)します

$ sudo systemctl restart php-fpm

Nginxの設定を変更

Nginxの設定を変更してPHPを実行できるようにします。/etc/nginx/conf.d/default.conf を編集します。今回はホームディレクトリ以下に www というディレクトリを作り、その中にある index.php を実行できるようにします。

⚠️ 初期設定に戻せるように設定のバックアップを取りたい人はこのファイルを直接編集せずに、コピーして編集してください。コピー先ファイルは default.conf と同じディレクトリ、ファイル名は任意ですが、拡張子は .conf としてください。なお、今回は default.conf を直接編集することを前提として説明します。

/etc/nginx/conf.d/default.conf
- location / {
-     root   /usr/share/nginx/html;
-     index  index.html index.htm;
- }
+ location / {
+     root   /home/ユーザ名/www;
+     index  index.html index.htm index.php;
+ }

- #location ~ \.php$ {
- #    root           html;
- #    fastcgi_pass   127.0.0.1:9000;
- #    fastcgi_index  index.php;
- #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
- #    include        fastcgi_params;
- #}
+ location ~ \.php$ {
+     root           /home/ユーザ名/www;
+     fastcgi_pass   127.0.0.1:9000;
+     fastcgi_index  index.php;
+     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
+     include        fastcgi_params;
+ }

ユーザ名のところに自分のユーザ名を入力してください。注意すべき点は、location ~ \.php$ ブロック内の rootlocation /root と同じにすること、fastcgi_param のパスを上記のように変更することの2点です。

また、location /ブロックのindexindex.phpを追加することを忘れずにしてください。なお、ここでいうindex.phpはファイルを省略した場合に参照するファイルなので、たとえばinfo.phpというファイルにアクセスしたい場合でもNginx設定ファイル内のindex.phpの部分は変更する必要はありません。

上記を設定に変更したらNginxを起動(再起動)します。

$ sudo systemctl restart nginx

PHPファイルを作成

PHPのファイルを作成します。ホームディレクトリにwwwディレクトリを作り、その中にindex.phpを作成します。

$ mkdir ~/www
$ vi ~/www/index.php

index.phpに以下を追加します。

index.php
<?php
  phpinfo();
?>

確認

ブラウザでhttp://ドメイン名/index.phpにアクセスして、PHPに関する情報が表示されたら成功です。お疲れさまでした。

403 Forbidden と表示されたとき

ホームディレクトリのパーミッションが正しいか確認してください。パーミッションを正しく設定するには以下を実行します。

$ chmod 755 /home/ユーザ名/
GitHubで編集を提案

Discussion