LoginSignup
0
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-01-24

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 パッケージがインストールされていることを確認します

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

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

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がありました。古いバージョンもあるようです。

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にします。
こうすることで、権限の違いによるエラーが起こりずらくなります。

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

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

/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の文法確認をする

文法確認
$ php-fpm -t
$ nginx -t

nginx php-fpmを再起動する

※はまったところ
nginxだけでなくphp-fpmの再起動も必要でした。

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

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0