nginx + PHP-FPMでCentOS 7にPHPの実行環境を作る


環境

  • macOS 10.12.6
  • MacBook pro 2016
  • VirtualBox 5.2.18
  • CentOS 7.6-1810

はじめに

nginx上でPHPの実行環境を作ってブラウザ確認までしようと思います。
nginxのインストールはこちらの記事をご覧ください↓
  - CentOS 7にnginxをインストールしてブラウザ確認するまで
CentOS 7の環境構築はこちらの記事をご覧ください↓
  - MacでVirtualBoxを使ってCentOS 7をインストールしてみた
  - VirtualBoxのネットワーク設定をいじって安全で快適な開発ができるようにした

nginxでPHPを動かすには

Apacheはインストールした時点でPHPの実行環境が整っています。
PHPはApache用に、同一プロセスで動くモジュール版というものが用意されていて、これがApacheのインストール時に一緒に入っているので、PHPのプログラムを動かすことができるのです。

それに比べて、nginxはインストールしただけではPHPのプログラムを動かせません。
なぜなら、nginx用のモジュール版は用意されていないからです。よってnginxでPHPを動かすには、CGI版のPHPを使わなくてはなりません。(ちなみに、ApacheにはCGI版もあるみたいです…!欲張りですね。)
CGI版のPHPを動かすには、PHP-CGIというものにリクエストを送らなくてはならないのですが、nginxだけだとそれができません。。。(なんでできないのかは後ほど調べよ〜っと)

ではどうするか、そこで登場するのが、PHP-FPMというプログラムです!
この、PHP-FPMがうまいこと、nginxからPHP-CGIへのリクエストをさばいてくれて、やっとPHPのプログラムが動いてくれるというわけです。

まあ、とにかくPHPをnginxで動かしたいならPHP-FPM入れなさいってことですね。

PHPのインストール

yumでチャチャっとインストール。

// インストール
# yum -y install php
// 確認
# php --version

phpの用意はこれだけで十分です。

PHP-FPMのインストールと設定

こちらもyumでインストール。

# yum -y install php-fpm

設定ファイルは、/etc/php-fpm.d/配下の、www.confというファイルです。

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

設定内容は以下です。

www.conf
- user = apache
- group = apache
+ user = nginx
+ group = nginx

nginxでの設定

設定ファイルは、/etc/nginx/conf.d/配下の、default.confというファイルです。

# vi /etc/nginx/conf.d/default.conf
default.conf
# ...(省略)
   location / {
        root   /usr/share/nginx/html;
        index  index.php; # index.phpを設定
    }
# ...(省略)
  # 以下の部分のコメントアウトを消す
  location ~ \.php$ {
        root           /usr/share/nginx/html; # ドキュメントルートを設定
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; # デフォルトでは、「/scripts」となっているので、「ドキュメントルート($document_root)」に変更する
        include        fastcgi_params;
    }
# ...(省略)

表示するPHPファイルを用意

上記の設定で、ドキュメントルートを/usr/share/nginx/htmlにしていますので、/usr/share/nginx/html配下に、index.phpを作成しましょう。

# touch /usr/share/nginx/html/index.php

確認用なので、適当にechoしてみましょう。

index.php
<?php
 echo('PHP動いたよ!');
?>

ブラウザで確認

nginxとphp-fpmの設定を変えたので、両方とも再起動して設定を反映させます。

# systemstl restart nginx
# systemctl restart php-fpm
※CentOS 6 以下は、serviceコマンドを使ってください。

あとは、http://CentOSのIP:nginxで設定したポート番号/index.phpでアクセスして、ブラウザ確認できたら完了!