CentOS 7のnginxでPHP7を利用する。最短でPHP7系の環境を構築する手順。

2018/07/23 CentOS, Nginx, php, サーバー構築

centos-nginx-php-top
nginxに関する前回の記事
>「CentOS 7へのnginxのインストール。最短でバーチャルホストまでを利用する。」
ではウェブサーバーであるnginxのインストールと、バーチャルホストのセットアップまでを紹介しました。
今回はセットアップしたnginx環境でphpを利用できるようにphpとphp-fpmのインストールと設定までを紹介したいと思います。ここ最近では静的なHTMLファイルを利用してウェブサイトを立ち上げるという環境は殆どありませんので、phpを利用できる環境のセットアップは必須の作業になると考えています。

スポンサーリンク

作業手順はApacheにPHPを導入する場合と、それ程の違いはありません。Apacheではあったモジュール版からCGI版の変更などがなく(nginxの場合、phpはCGI版でしか動作しません)php-fpmの導入と設定が必須になります。是非、試してみて下さい。

目次

1.phpとphp-fpmを導入する環境

nginxでphpとphp-fpmをインストールする環境は記事
>「CentOS 7へのnginxのインストール。最短でバーチャルホストまでを利用する。」
で紹介していますが、確認の意味で再度纏めておきます。基本的な環境は以下の通りです。

  • OSのバージョンはCentOSで最新(2018年6月現在)のバージョン7.5を利用しています。
  • ウェブサーバーとしてnginxがインストールされています。
  • nginxは基本的な設定が完了して、バーチャルホストが二つ設定されています。
  • バーチャルホストは”www.testdom.com”と”www.testdom2.com”になります。
  • 各バーチャルホストはテストページが表示されることを確認しています。
  • サーバーはインターネットへ接続されており、グローバルIPアドレスが一つ、割り当てられています。
  • ファイアウォールとしてfirewalldを設定しています。
  • firewalldではHTTPとSSHの接続を許可しています。

この環境を前提にphpとphp-fpmのインストールを進めていきます。
尚、導入するphpのバージョンですが、現在、利用されている主なバージョンとしては

  • 5.4系(CentOSのベースに登録されているもの、OSのサポート期間に準ずる)
  • 5.6系(2018年12月31日でサポート終了)
  • 7.1系(7系の前バージョン、サポート期間がやや短い)
  • 7.2系(最新のメジャーバージョン、サポート期間が長い)

の4つがあります。これ以前のバージョン(OSのベースパッケージ以外で導入したphpについては5.4もサポートが終了しています。)については、サポートされていないため、対象外としています。本記事ではセキュリティ面(サポート期間の長さ)とパフォーマンス(php5系と比較して2倍の処理能力ある)から7.2系をインストールしていきます。

2.phpインストール前の事前準備

php7.2系のインストール前に事前準備を行います。作業としては、導入する環境にOSデフォルトのPHPがインストールされていないかを確認することと、php7.2系をインストールするのに必要なレポジトリであるremiレポジトリの追加になります。

2-1.php5.4系のインストール確認

php7.2系をインストールする前にOSデフォルトのphp(5.4系)がインストールされていないことを確認します。5.4系がインストールされていると、設定ファイルやモジュールの読み込み時に混乱する可能性があります。以下のコマンドでphpがインストールされていないことを確認します。

phpに関するパッケージが表示されないことが確認できれば、完了です。もし出力結果にphpが含まれている場合は

などでphp5系のパッケージを削除してください。

2-2.remiレポジトリの設定

OSデフォルトではphp7.2系に関するパッケージを探してみても見つかりません。これはOSのベースに用意されているレポジトリにはphpの7.2系は含まれていなことが原因です。

2-2-1.remiレポジトリの追加

remiレポジトリはEPELの補完的な立ち位置の外部リポジトリです。有志によって管理されているプロジェクトになります。
remiの目的ですが、最新バージョンのPHPモジュールをRHEL系のディストリビューションに提供することです。このレポジトリをインストールします。

(参考サイト)remiレポジトリ公式サイト

上記の公式サイトにリンクにあるRedhat enterprise linux 7用のremiを利用します。インストールにはyumコマンドを利用します。
以下のように実行します。

以下が実行結果です。

エラーが出力なく”完了しました!”と表示されれば、remiレポジトリの追加は完了です。
追加後には、レポジトリを設定するファイルとしてphp関連のものが追加されていることが確認できます。
※レポジトリファイルは/etc/yum.repos.d/以下に含まれています。以下が追加後のディレクトリ一覧になります。

remi関連のファイルが追加されていることが確認できます。

2-2-2.remiレポジトリの追加の確認

remiレポジトリでphp7.2系の導入に利用するレポジトリはremi-php72レポジトリになります。remi-php72レポジトリはデフォルトでは有効になっていません。それ程、使用頻度も高くないことからphp7.2系に関連したyumコマンドを実行する際だけ有効にするようにします。
この場合はyumコマンドにオプションである”–enable-repo=remi,remi-php72”を付与します。例えばphpパッケージを探す場合は以下のように実行します。

実行結果は以下の通りです。

php7.2系のパッケージについて詳細が表示されます。remiレポジトリを有効にするオプションを付与して再度、phpのパッケージを探してみます。

今度はphpのバージョン7.2系を含むパッケージが表示されることが確認できました。この中で必要になるものは以下のパッケージになります。
php7.2系基本パッケージ

  • php.x86_64 : Package that installs PHP 7.2
  • php-xml.x86_64 : A module for PHP applications which use XML
  • php-xmlrpc.x86_64 : A module for PHP applications which use the XML-RPC protocol
  • php-pecl-mcrypt.x86_64 : Provides bindings for the unmaintained libmcrypt.

マルチバイト対応用パッケージ

  • php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling

画像処理用パッケージ

  • php-gd.x86_64 : A module for PHP applications for using the gd graphics library

MySQLデータベース連携用パッケージ

  • php-pdo.x86_64 : A database access abstraction module for PHP applications
  • php-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases
  • php-pecl-mysql.x86_64 : MySQL database access functions

上記のphpパッケージをインストール対象とします。

3.phpパッケージのインストール

本章では実際にphp7.2系のパッケージをインストールする手順を紹介していきます。

3-1.phpパッケージの情報確認

php72パッケージのインストール前に、パッケージの情報を確認しておきます。

実行結果は以下の通りです。各パッケージの役割などを確認しておくと、インストールするパッケージの意味合いをイメージしやすいと思います。

各パッケージの詳細を確認後、インストールに入ります。

3-2.phpのインストール

php72パッケージはyumコマンドにinstallオプションを付けることでインストールすることができます。項目3-1.で必要なパッケージの情報が確認できましたので、以下のコマンドでインストールします。

上記ではyumコマンドに-yオプションを付けることでインストール時の確認応答を省いています。パッケージを複数インストールする場合はスペースを入れてパッケージ名を列記します。コマンドを実行すると、以下のようにインストールが開始されます。

エラーの出力がなく”完了しました!”と表示されれば、phpは正常にインストールされています。

3-3.インストールされたphpパッケージの確認

phpがインストールされたことを確認します。インストールされているパッケージはyumコマンドで確認できます。以下のようにyumを実行することで、phpパッケージがインストールされていることを確認します。

出力結果として、以下のphpパッケージが表示されることを確認します。

上記のパッケージが表示されれば、phpのパッケージ確認は完了です。

3-4.php72 cliの動作確認

phpはcliから動作させることも可能です。phpコマンドを使ってバージョンを確認してみます。

正常に7.2系のバージョンが表示されました。

4.phpの基本的な設定

項目3.の手順までで、php7.2系パッケージの導入とモジュールの設定までが完了しました。phpの場合、この状態でも動作しますが、基本的な設定を行うことをお勧めします、本記事では運用するにあたって最低限、必要になる設定を行います。設定の前提は以下の通りです。

  • 最低限のセキュリティ設定
  • アップロードサイズの変更(2Mから20MBへ)
  • タイムゾーンの設定
  • マルチバイト対応(日本語対応)

この条件に合わせて設定を行っていきます。

4-1.php.iniの変更

phpの設定は/etc/以下にあるphp.iniファイルで行います。php.iniの設定変更前に、既存のファイルをバックアップしておきます。具体的には以下の手順でコピーを行います。

バックアップの完了後、エディタで設定ファイルを開いて変更を行います。本環境ではOSの標準的なエディタである、viエディタを利用しています。

4-1-1.phpのセキュリティ設定

phpはデフォルトの設定ではhttpヘッダーにバージョンを表示します。バージョンは公開しないほうがセキュアになりますので、phpのバージョンを非表示にする設定を行います。374行目にある

に変更します。

4-1-2.アップロードサイズの変更

phpのデフォルト設定ではアップロードできるファイルのサイズが2MBだと少ないため、20Mに変更します。
まずはPOST データの最大サイズを設定するpost_max_sizeを変更します。デフォルトでは8Mですが、これを20Mに変更します。
672行目にある

に変更します。

post_max_sizeの変更だけでは、ファイルのアップロード容量を増やせないため、併せてupload_max_filesizeを変更します。
825行目にある

に変更します。

4-1-3.タイムゾーンの設定

タイムゾーンの設定を行います。これを設定しないとエラーが大量に出力されます。勿論、アプリケーションが時間を扱う時にも運用環境に合わせて設定が行われていないと問題になります。日本の場合は”Asia/Tokyo”になりますので、これをdate.timezoneとして設定を行います。
902行目

に変更します。

4-1-4.マルチバイト対応(日本語対応)設定

以下の項目は日本語を利用するうえでの設定変更になります。一般的な設定を紹介していますが、日本語の扱いは運用環境によって異なると思います。動作するアプリケーションに応じて、適宜、変更してください。
まずはmbstringで使用される言語のデフォルト値を定義するmbstring.languageを設定します。
1509行目のパラメーター

に変更します。

続いて内部文字エンコーディングのデフォルト値を定義するmbstring.internal_encodingを設定します。ここではOSに合わせてUTF-8を指定しています。
1516行目のパラメーター

に変更します。

HTTP通信の時のインプット文字コードを指定するmbstring.http_inputを設定します。ここではUTF-8を指定しています。
1524行目のパラメーター

に変更します。

HTTP 出力文字コードを指定するmbstring.http_outputを設定します。ここではpassを指定して自動変換を行わないようにします。
1534行目のパラメーター

に変更します。

HTTP 入力変換を有効にするmbstring.encoding_translationをOnにします。文字化けが発生した場合はOffにします。
1542行目のパラメーター

に変更します。

文字コード自動検出の優先順位を定義するパラメーターであるmbstring.detect_orderを設定します。autoの場合、UTF-8が最初に選択されるため、ここはautoで問題ないかと思います。コメントである”;”を削除します。
1547行目のパラメーター

に変更します。

コードとして変換できない文字がある場合に、代替の文字を出力しないようmbstring.substitute_characterを設定します。コメントである”;”を削除します。
1552行目のパラメーター

に変更します。
以上でphp.iniの設定変更は完了です。変更したファイルを保存します。

5.php-fpmの導入

項目4.まででphpのインストールが完了しましたので、ここからはphp-fpmパッケージの導入と設定を説明していきます。
php-fpm(FastCGI Process Manager)はphpスクリプトをCGIとして動作させるためのパッケージです。phpにはモジュール版とCGI版があり、通常、Apacheで利用されるものはモジュール版になります。php-fpmはCGI版で、FastCGIは通常のCGIよりパフォーマンスの向上が見込めるものになります。モジュール版と比較して、高負荷なサイトでのパフォーマンスアップを期待できます。NGINXではモジュール版は利用できませんので、CGI版で動作させるためのphp-fpmパッケージが必要になります。

スポンサーリンク

5-1.php-fpmパッケージの情報を確認する。

php-fpmパッケージのインストール前に、パッケージの情報を確認しておきます。php7.2系のphp-fpmはremiレポジトリに含まれるため、確認コマンドの実行時にremiレポジトリを参照するように指定します。

実行結果は以下の通りです。各パッケージの役割などを確認しておくと、インストールするパッケージの意味合いをイメージしやすいと思います。

上記のように7.2系のphp-fpmが表示されることが確認できました。このphp-fpmパッケージをインストールしていきます。

5-2.php-fpmパッケージのインストール

php-fpmパッケージはyumコマンドにinstallオプションを付けることでインストールすることができます。項目3-1.で必要なパッケージの情報が確認できましたので、以下のコマンドでインストールします。

上記ではyumコマンドに-yオプションを付けることでインストール時の確認応答を省いています。コマンドを実行すると、以下のようにインストールが開始されます。

エラーがなく、”完了しました!”と表示されればphp-fpmパッケージのインストールは完了です。

5-3.インストールされたphp-fpmパッケージの確認

php-fpmがインストールされたことを確認します。インストールされているパッケージはyumコマンドで確認できます。以下のようにyumを実行することで、php-fpmパッケージがインストールされていることを確認します。

出力結果として、以下のphpパッケージが表示されることを確認します。

上記のパッケージが表示されれば、インストール後のphp-fpmパッケージ確認は完了です。

6.php-fpm設定ファイルの変更

php-fpmは本記事の環境で利用するために、幾つかの設定変更を行う必要があります。本章では設定ファイルの場所と、設定変更が必要な個所について説明していきます。設定の前提条件は以下になります。

  • 動作ユーザーとグループをnginxに合わせてwwwに変更
  • メモリなどのパフォーマンス設定を行う(メモリ1GBと前提)

パフォーマンス設定については、運用環境に合わせて行う必要がありますが、本記事ではサンプルとしてメモリが1GBあるサーバーで動作させることを考えた数値設定を行います。実際には設定値の調整が必要になりますので、参考として考えて下さい。尚、本記事ではパフォーマンス設定の詳細や調整については割愛しています。

6-1.php-fpm設定ファイルのバックアップ

php-fpmの設定は”/etc/php-fpm.d/”以下にある”www.conf”ファイルで行います。www.confの設定変更前に、ファイルをバックアップしておきます。具体的には以下の手順でコピーを行います。

バックアップの完了後、エディタで設定ファイルを開いて変更を行います。本環境ではOSの標準的なエディタである、viエディタを利用しています。

6-2.www.conf設定ファイルの変更

バックアップの後、www.confファイルの変更を行います。変更点は以下となります。

6-2-1.php-fpmを動作させるユーザー、グループの設定変更

php-fpmを動作させるユーザーとグループについては、nginx側での設定に合わせる必要があります。本記事で利用している環境では、nginxの動作ユーザーとグループとしてwwwを設定していますので、www.conf設定ファイルの以下の部分をapacheからwwwに変更します。20行目付近にある設定パラメーター、userとgroupを変更します。具体的には

に変更します。続いてパフォーマンスに関するパラメータを設定します。

6-2-2.pm.max_パラメーターの変更

次にパフォーマンスに関するパラメータの”pm.max_”が付いた各パラメータを変更します。デフォルトでの設定だとメモリを多く使い過ぎてしまうことがありますので、数値をやや低めに設定しています。基本的にはサーバーのスペックやHTTPのリクエスト数に応じて設定を変更する必要がありますので、ここでの設定は参考までに考えて下さい。

まずpm.max_childrenを50から25に変更します。pm.max_childrenは処理を行う子プロセスの最大数で多すぎるとメモリを容量以上に利用しますので、ここでは50から25へ落としています。

pm.start_serversはphp-fpmのサービス開始時に起動される子プロセスの数になります。少し多めに5から10へ変更しています。

pm.min_spare_serversは待ち状態にあるphp-fpm子プロセスの最小の数値になります。多少、多めに5から10へ変更しています。

pm.max_spare_serversは待ち状態にあるphp-fpm子プロセスの最大の数値になります。多少、少な目に35から20へ変更しています。

pm.max_requestsは子プロセスが再起動するまでに実行するリクエスト数です。デフォルトでは0なので再起動しませんが、メモリリークの対応として再起動を行うようにコメントアウトを外します。(500リクエストを実行後に子プロセスが再起動を行う。)

以上のパラメータを変更後にファイルを保存します。これでphp-fpmの設定ファイル変更は完了です。

7.php-fpmの起動と自動起動設定

ここまででphp-fpmの基本的な設定は完了しましたので、本章ではphp-fpmの起動と起動後の確認、及びphp-fpmの自動起動設定を行います。

7-1.php-fpmの起動と起動後の確認

起動できる状態に設定が完了しましたので、早速php-fpmを起動してみます。systemctlコマンドを以下のように実行します。

上記のようにActive項目に”active (running)”に出力されておりエラーが出力されなければphp-fpmは正常に起動しています。起動後にphp-fpmのstatusを確認します。

上記の出力結果から、php-fpmは正常に起動していることが確認できます。これでphp-fpmの起動と確認は完了です。

7-2.php-fpmの自動起動設定

サーバーの再起動や停止の復旧時に、php-fpmが自動的に起動するように設定します。サービスの自動起動を設定するにもsystemctlコマンドを利用します。自動起動は以下のようにsystemctlコマンドを実行します。

エラーが出力されなければ、自動起動の設定は正常に完了しています。
続いて自動起動が設定されたことを確認します。こちらもsystemctlコマンドから確認できます。”is-enabled”オプションを付与して実行します。

上記のように”enabled”と表示されれば自動起動は設定されています。これで自動起動の確認は完了です。

8.nginxの設定変更

phpとphp-fpmのインストールと設定まで完了しました。ここからはnginx経由でphp-fpmへスクリプトファイルの処理を行うようにnginxの設定を行います。設定が必要なファイルはバーチャルホスト用の設定ファイル”ドメイン名”.confになります。
以下がフォルダとファイルの構成です。

8-1.www.testdom.confの変更

www.testdom.comバーチャルホスト用の設定ファイルは”/etc/nginx/sites-available”ディレクトリに入っている”www.testdom.com.conf”になります。viエディタでファイルを開きます。

ファイルの内容は以下のようになっています。

このファイルに2か所の変更を行います。まず

のindexパラメーターを

として、index.phpを追加します。このindexに指定した順にファイルを処理していきます。そのためindex.phpを最初に記載しています。

変更する2ヶ所目としてはphpをfastCGIで処理するためのlocationを追加します。追加する場所は、最初に設定されているlocationディレクティブの下です。このlocationディレクティブはデフォルトで作成されるサイト用設定ファイル、default.confに記載がある以下の内容を元にしています。
default.confに記載されているPHP用設定

追加する内容は

になります。変更、追加後のwww.testdom.com.confは以下のようになっています。

確認後、問題なければ設定ファイルを保存します。

8-2.www.testdom2.confの変更

もう一つのバーチャルホスト、www.testdom2.comバーチャルホスト用の設定ファイルは”/etc/nginx/sites-available”ディレクトリに入っている”www.testdom2.com.conf”になります。基本的にはwww.testdom.com.confと変更点は同じです。viエディタでファイルを開きます。

ファイルの内容は以下のようになっています。

このファイルに2か所の変更を行います。
まず

のindexパラメーターを

として、index.phpを追加します。

次にserverディレクティブにlocationを追加します。追加する場所は、最初に設定されているlocationディレクティブの下です。追加する内容は

になります。変更、追加後のwww.testdom2.com.confは以下のようになっています。

確認後、問題なければ設定ファイルを保存します。これでnginx側の設定は完了です。

8-3.設定ファイルの確認

設定ファイルの作成と配置が完了したら、間違いや問題がないかを確認します。nginxに”-t”オプションを付けて実行することで設定ファイルの間違いをチェックできます。設定変更後には実行することをお勧めします。
以下のように実行します。

上記のように、”test is successful”と表示されていればファイルには問題ありません。

8-4.設定の有効化

シンボリックリンクでの管理について、有効化と無効化の何れかを行った場合には設定ファイルの再読み込みとして、nginxの再起動が必要になります。systemctlコマンドでnginxを再起動します。

エラーが出力されなければ、正常に再起動は完了しています。これで設定の有効化は完了です。

9.動作確認

項目8.まででnginxの設定変更とphp、php-fpmの導入と設定が完了しましたので、ここからは実際にブラウザでサイトへ接続して、正常にphpとphp-fpmが動作していることを確認していきます。利用しているブラウザはGoogle Chromeになります。

9-1.ブラウザでのphp-fpm確認

ブラウザから動作を確認します。設定したバーチャルホストのドキュメントルートに動作確認用のファイルを作成して、ブラウザからアクセスを行います。

9-1-1.動作確認用ファイルの作成

バーチャルホストのドキュメントルートディレクトリに、テスト用のHTMLファイルを作成します。二つのドメインに対して、作成します。
www.testdom.com テスト用HTMLファイルであるindex.phpを作成します。

ファイルの内容は以下になります。

作成後、ファイルを保存します。これでwww.testdom.com用ファイルの作成は完了です

続いて、www.testdom2.comテスト用のHTMLファイルであるindex.phpを作成します。

ファイルの内容は以下になります。(www.testdom.comに作成したファイルと同じ内容です。)

作成後、ファイルを保存します。これでwww.testdom2.com用ファイルの作成は完了です

9-1-2.ブラウザからのアクセス

本章では動作テストを行います。コマンドでの確認もできますが、ブラウザからのほうが早いと思いますので、ブラウザを利用して確認を行います。
バーチャルホストの動作確認には、DNSによる名前引き(正引き:ドメイン名からIPが引ける)が設定されている必要があります。もしDNSの名前引きが利用できない場合は、利用しているコンピューターのhostsファイルに、直接、IPとホスト名を記載することでも対応できます。

バーチャルホスト:www.testdom.comの確認
ブラウザからwww.testdom.comを表示します。以下のようにテスト用HTMLファイルの内容(phpinfo)が表示されました。
centos-nginx-php-9-1-2-1
これで、バーチャルホスト”www.testdom.com”のphp動作確認は完了です。

バーチャルホスト:www.testdom2.comの確認
ブラウザからwww.testdom2.comを表示します。こちらもwww.testdom.comと同様に以下のテスト用HTMLファイルの(phpinfo)が表示されました。
centos-nginx-php-9-1-2-2
これでバーチャルホスト”www.testdom2.com”のphp動作確認は完了です。

両方のサイトでphpinfoの画面が表示されたことで、バーチャルホストでphpが正常に動作していることが確認できました。これでphpとphp-fpmの確認が完了です。

10.まとめ

今回はnginxを導入した環境でphpを利用できるようにphpとphp-fpmの導入と設定までを行いました。これでnginxとphpが利用できる環境が整いましたので、今後は作成した環境にデータベースであるMariaDBを導入して、Apacheの環境と同じようにWordPressのインストールまでを行っていきたいと考えています。
※データベースサーバーMariaDBのインストール手順は記事
>「データベース MariaDB 10系(mysql)をインストール、最短でデータベースを利用する。」
で紹介しています。参考にしていただければ幸いです。
同じ環境でApacheとのパフォーマンスの違いがどの程度なのか、興味があるところだと思います。環境が整い次第、パフォーマンスの比較を進めていきますので、また記事の更新を楽しみにいていただければ幸いです。

関連する記事


システムでお困りのお客様

もし、貴社で、

  • サポート切れのサーバやネットワーク機器の入れ替えをしたいが、どうしたらよいかわからない
  • サーバやネットワークの管理を行う社員がいないため困っている
  • 業務に利用している機器のセキュリティが大丈夫か心配
  • 機器の障害で、業務への影響が発生している
  • 社内の要望に対して、どのようなシステムを導入したらよいか解らない

など、サーバーやネットワーク、セキュリティでお悩みの方、新規のシステム導入を検討中の方。
多くのシステム構築を行い、成功させてきた実績をもつ弊社が、その問題を解決します。
お気軽にお問い合わせ頂き、貴社の問題解決にお役立てください。

お問い合わせ・ご相談はこちらから

Facebookでのご購読が便利です。

Twitter・Feedlyでもご購読できます。

Twitterでフォローする Feedlyでフォローする

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  • スポンサーリンク