AmazonLinux 2 + Nginx でPHPを使えるようにする方法

takahashi 著者:takahashi

AmazonLinux 2 + Nginx でPHPを使えるようにする方法

Nginxはリバースプロキシとしてかなり優秀なサーバーアプリケーションで、自分も愛用しているのですが、あくまでリバースプロキシとしてしか使っていませんでした。

しかし、Nginxの本来の役割はWebサーバーですので当然Nginx自身がアプリの動作環境になることも可能です。

今回機会があってAWS EC2上のNginxで直接アプリケーションを動かす必要が出てきたので、実際にセットアップしてみました。

NginxにはApacheのようにモジュールを組み込んでPHPを動作させるような仕組みがない為、CGIを利用して動作できるようにします。
ただ、通常のCGI版PHPだと重いので、Fast CGI版のPHPが利用できるphp-fpmを利用します。

今回はPHP7.1の環境をインストールします。

まずは必要なパッケージをインストールします。

#epelリポジトリをインストール
sudo yum -y install epel-release

#remi リポジトリをインストール
sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

#nginxをインストール
sudo yum -y install nginx

#php-fpm(php7.1)をインストール
sudo yum -y install --enablerepo=remi,remi-php71 --disablerepo=amzn2-core  php-fpm
#※--disablerepo=amzn2-coreしておかないと古いphp-fpmがインストールされます。

インストールが完了したら設定していきます。

sudo vi /etc/php-fpm.d/www.conf

次の項目を編集します。

;localから参照するのでUNIX SOCKETを設定。
- ;listen = 127.0.0.1:9000;
+ listen = /var/run/php-fpm.sock

;UNIX SOCKETファイルのユーザーとグループの指定(指定しないとrootとなるが、nginxからアクセスできなくなる。)
- ;listen.owner = nobody
- ;listen.group = nobody
+ listen.owner = nginx
+ listen.group = nginx

Nginx側も設定を変更します。
Nginxでは各バーチャルホストごとの設定を定義するserverセクションに記述します。

server {

  listen        80;
  listen        443 ssl;

  server_name  example.com;

  ssl_certificate       /path/to/ssl/fullchain.pem;
  ssl_certificate_key   /path/to/ssl/privkey.pem;

  client_max_body_size 1g;
  location / {
        root /path/to/docroot;
        index index.php index.html index.htm;
        allow all;
  }
  location ~ \.php$ {
    root           /path/to/docroot;
    fastcgi_pass   unix:/var/run/php-fpm.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
    allow all;
  }
}

基本的には上記のような設定でOKです。

設定が完了したらphp-fpmとnginxを再起動します。

sudo systemctl start php-fpm nginx
sudo systemctl enable php-fpm nginx

あとはおなじみのphpinfo();をドキュメントルートに置いて、phpが実行されているか確認します。

vi /path/to/docroot/phpinfo.php
<?php
    phpinfo();
?>

あとは

http://example.com/phpinfo.php

のようにして、phpの環境情報が表示されれば成功です。

  • この記事いいね! (0)

著者について

takahashi

takahashi administrator

Webエンジニア。 趣味で自宅サーバーを稼働中。 ファンタジーが好き。

1件のコメント

LaravelをNginxで動作させる際の設定 – 株式会社シーポイントラボ | 浜松のシステム開発会社投稿日:3:56 pm - 3月 28, 2019

[…] sファイルは基本的にApacheなどのごく一部のWebサーバーでしか認識しないので、たとえは先日の記事のようにnginxにPHPをインストールした環境で動作させようとしても、そのままではうま […]

現在コメントは受け付けていません。