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 パッケージがインストールされていることを確認します
$ which amazon-linux-extras
/usr/bin/amazon-linux-extras ←このように表示されればOK
nginxを有効にします。
amazon-linux-extrasコマンドでnginxがどのような名前で登録されているか確認します。
自分の環境ではnginx1でした。
まず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がありました。古いバージョンもあるようです。
まず 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にします。
こうすることで、権限の違いによるエラーが起こりずらくなります。
※はまったところ
listen=/var/run/php-fpm/php-fpm.sock
の記述を追加後初期値の
listen=/run/php-fpm/www.sockを消し忘れていた。
記述を追加したら初期値とだぶっていないか確認すること
- 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に以下の記述をします。
※はまったところ
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
の記述は
/etx/php-fpm.d/www.confの
listen=/var/run/php-fpm/php-fpm.sock
と同じにする
グーグルであちこちググってコピペしたらずれてしまいました。
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の文法確認をする
$ php-fpm -t
$ nginx -t
nginx php-fpmを再起動する
※はまったところ
nginxだけでなくphp-fpmの再起動も必要でした。
$ systemctl restart nginx.service
$ systemctl restart php-fpm.service
apacheの時はPHPはすぐに実行できたのですが、nginxでは設定が必要だったのですね。