AWS EC2+nginx+PHP7+php-fpmの導入手順

AWS php/laravel

前回のnginxが表示される設定までを確認後からPHPの動作確認できる所まで進めます。

下記の記事を参考にさせて頂きました。説明を加えている項目や今回は導入までの最短にしてるので、省いている部分もあります。
https://qiita.com/knymssh/items/15bb876da0688db5feb1
省いている理由としては、カスタマイズを後にしないとどこで躓いているかが分かりにくくなるからです。

本BLOGでは、Laravelの実行環境の導入を目指してますが、動かない時に、nginxの導入なのか、PHPの導入なのか、Laravelの導入なのかで分からなくなるのでフェーズを分離して導入します。

phpをインストール

AmazonLinuxではyumではなくextrasからインストールします。
php7.4でインストールされるパッケージを確認します。

amazon-linux-extras info php7.4

下記コマンドでphp7.4をインストールします。

sudo amazon-linux-extras install php7.4

extrasにない項目はyumからインストールします。

sudo yum install -y php-mbstring php-opcache

インストールできているか下記コマンドで確認します。

php -v
php-fpm -v

nginxとphp-fpmの連携設定

php-fpm側の設定

/etc/php-fpm.d/www.confの編集

sudo vi  /etc/php-fpm.d/www.conf 
 nginxユーザ、nginxグループで実行されるように修正 
;user = apache
user = nginx
;group = apache
group = nginx

UNIXドメインソケットがnginxユーザ、nginxグループで作成されるように修正

;listen.owner = nobody
listen.owner = nginx
;listen.group = nobody
listen.group = nginx

UNIXドメインソケットで通信するように修正
(Amazon Linux 2では変更の必要なし)
初期でlisten = /run/php-fpm/www.sock
が設定されている。

;listen = 127.0.0.1:9000
listen = /run/php-fpm/php-fpm.sock

nginx側の設定

/etc/nginx/nginx.confの編集

下記の編集はAmazonLinux2の場合不要です。
/etc/nginx/conf.d/php-fpm.conf
に設定されている為です。こちらはnginx.confからphp-conf.confを参照して実行されるようになってます。

また /etc/nginx/conf.d/php-fpm.confに

upstream php-fpm {
        server unix:/run/php-fpm/www.sock;
}

が記載されてますので、こちらでphp-fpmにデータを送る設定ができています。

AL2以外は下記のコードを追加する事によってphpファイルにアクセスしたときにphpが実行されるようになります。

location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    if (!-f $document_root$fastcgi_script_name) {
        return 404;
    }
    fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
}

またnginx.confを編集した場合に下記で構文のチェックができる。

sudo nginx -t

nginxとphp-fpmを起動して接続確認

下記コマンドでnginxとphp-fpmを起動します。

sudo systemctl start php-fpm
sudo systemctl start nginx

下記コマンド nginxとphp-fpmのUNIXドメインソケット接続確認をします。

netstat -al --protocol=unix |egrep "Proto|fpm"

ブラウザで表示確認

下記コマンドでphpの情報を表示するphpinfo.phpを作成します。

echo '<?php phpinfo(); ?>' | sudo tee /usr/share/nginx/html/phpinfo.php

ブラウザでアクセスしphpの情報が表示されれば成功です。

今回の環境では、 /etc/nginx/nginx.conf の実行環境が
/user/shere/nginx/html/になっているので合わせてphpファイルを作成しています。