AWS EC2でnginxバーチャルホストを設定しPHPを使えるようにする

Apachでは簡単にPHPを使えるのですが、nginxでは別途設定が必要だったんですね。
しかもバーチャルドメインごとにPHPの設定も必要なのです。

ググってもなかかできなかったのでメモ

前提：
すべて管理者権限で実行。
AmazonLinux2 AMI

#nginxのインストール
amazon-linux-extrasというリポジトリからインストールできます。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-install-extras-library-software/

which コマンドを使用して、amazon-linux-extras パッケージがインストールされていることを確認します

```shell:amazon-linux-extraの確認
$ which amazon-linux-extras
/usr/bin/amazon-linux-extras ←このように表示されればOK
```

nginxを有効にします。
amazon-linux-extrasコマンドでnginxがどのような名前で登録されているか確認します。
自分の環境ではnginx1でした。

```shell:nginxをインストールします。

まずnginxの登録名を確認
$ amazon-linux-extras 

nginxを有効にする
$ amazon-linux-extras enable nginx1

nginxを有効にする。インストールはyumコマンドでOK
$ yum install nginx

サーバー起動時にnginxも起動するように設定
$ systemctl enable nginx

設定できているか確認
$ systemctl list-unit-files -t service | grep nginx
enableになっていればOK

ついでにnginxのバージョンも確認
$ nginx -v

```

#PHPのインストール
こちらもアマゾンからインストールします。
amazon-linux-extras　コマンドでどのPHPがはいっているか確認します。
自分の環境ではphp7.4がありました。古いバージョンもあるようです。

```shell:phpをインストールする
まず　phpのバージョンを確認
$ amazon-linux-extras

PHPを有効にする
$ amazon-linux-extras enable php7.4

PHPをインストールする
$ yum clean metadata && sudo yum install php-cli php-pdo php-fpm php-json php-mysqlnd

インストールできたか確認する
$ yum list installed php-cli php-pdo php-fpm php-json php-mysqlnd

サーバー起動時にphp-fpmも起動するように設定
$ systemctl enable php-fpm.service

設定できているか確認
$ systemctl list-unit-files -t service | grep php
enableになっていればOK

```


#php-fpmの設定変更
listenの項目でUnixドメインソケットを利用するように設定し
PHP-FPMのworkerプロセスを実行するユーザーをnginxにします。
こうすることで、権限の違いによるエラーが起こりずらくなります。

<b>※はまったところ</b>
listen=/var/run/php-fpm/php-fpm.sock
の記述を追加後初期値の
listen=/run/php-fpm/www.sockを消し忘れていた。
記述を追加したら初期値とだぶっていないか確認すること

```conf:/etc/php-fpm.d/www.conf
- user = apache
- group = apache
- listen.owner=nobady
- listen.group=nobody
- listen=/run/php-fpm/www.sock

↑の記述を以下のように変更する

+ user = nginx
+ group = nginx
+ listen=/var/run/php-fpm/php-fpm.sock
+ listen.owner=nginx
+ listen.group=nginx
+ listen.mode=0660

```

##/etc/php-fpm.d/www.confの確認

```

cat 　と　grep　でコメントを除いた内容を確認できます。
cat www.conf | grep -v "^\s*$" | grep -v "^\s*;"

```

#nginxマルチドメインの設定準備

ドメイン：test.com
ドキュメントルート:/var/www/html/test.com

```
フォルダを作成します。
mkdir -p /var/www/html/test.com

テスト用のPHPフィルを作成します。
vim /var/www/html/test.com/test.php  #<?php echo 'test'; ?> などテスト用に記述

権限をnginxにします。
cd /var/www/
chown -R nginx:nginx html/
chmod -R 775 html/

```

#nginxでマルチドメインとPHPの設定をする

/etc/nginx/conf.d以下に
test.com.confファイルを作成します。
conf.dフォルダ以下のconfファイルを読み込むのはapachと同じですね。

```
vim /etc/nginx/conf.d/test.com.conf

```

/etx/nginx/conf.d/test.com.confに以下の記述をします。
<b>※はまったところ</b>
fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
の記述は
/etx/php-fpm.d/www.confの
listen=/var/run/php-fpm/php-fpm.sock
と同じにする
グーグルであちこちググってコピペしたらずれてしまいました。

```conf:/etc/eging/conf.d/test.com.conf

server {
    listen       80;
    server_name  test.com;
    location / {
        root   /var/www/html/test.com;
        index  index.html index.htm index.php;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    location ~ \.php$ {
        root           /var/www/html/test.com;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}


```
#nginxとphp-fpmの文法確認をする

```shell:文法確認
$ php-fpm -t
$ nginx -t
```

#nginx php-fpmを再起動する
<b>※はまったところ</b>
nginxだけでなくphp-fpmの再起動も必要でした。

```shell:再起動
$ systemctl restart nginx.service
$ systemctl restart php-fpm.service
```

apacheの時はPHPはすぐに実行できたのですが、nginxでは設定が必要だったのですね。