CentOS 7のNginx環境にPHP7をインストールして最短で開発環境を構築

centos-nginx-php-top2

こんにちは、ITエンジニアの小村(@system_kom)です。

Nginxに関する前回の記事ではウェブサーバーであるnginxのインストールと、バーチャルホストのセットアップまでを紹介しました。

Open Source
centos-yum-nginx-install-top
CentOS 7へNginxをインストールして最短でサイトが表示できる手順

今までApacheに関する設定や機能の拡張について紹介してきましたが、ここ最近導入されている環境が増えている、もう一つのウェブサーバー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をインストールする環境は記事

Open Source
centos-yum-nginx-install-top
CentOS 7へNginxをインストールして最短でサイトが表示できる手順

今までApacheに関する設定や機能の拡張について紹介してきましたが、ここ最近導入されている環境が増えている、もう一つのウェブサーバーNginx(エンジンエックス)をご存知でしょうか。 Nginxはパフォーマンスに特化されたオープンソースの ...

で紹介していますが、確認の意味で再度纏めておきます。基本的な環境は以下の通りです。

PHPをインストールするサーバー環境

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

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

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

これ以前のバージョン(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がインストールされていないことを確認します。

 command
$ yum list installed | grep php

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

 command
# yum remove php*

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

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

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

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

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

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

 command
# yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

以下が実行結果です。

 command
# yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
読み込んだプラグイン:fastestmirror
remi-release-7.rpm | 15 kB 00:00:00
/var/tmp/yum-root-PWduQw/remi-release-7.rpm を調べています: remi-release-7.5-2.el7.remi.noarch
/var/tmp/yum-root-PWduQw/remi-release-7.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ remi-release.noarch 0:7.5-2.el7.remi を インストール
--> 依存性の処理をしています: epel-release = 7 のパッケージ: remi-release-7.5-2.el7.remi.noarch
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
base | 3.6 kB 00:00:00
extras | 3.4 kB 00:00:00
nginx | 2.9 kB 00:00:00
updates | 3.4 kB 00:00:00
--> トランザクションの確認を実行しています。
---> パッケージ epel-release.noarch 0:7-11 を インストール
--> 依存性解決を終了しました。
依存性を解決しました
インストール中:
remi-release noarch 7.5-2.el7.remi /remi-release-7 18 k
依存性関連でのインストールをします:
epel-release noarch 7-11 extras 15 k
トランザクションの要約
インストール 1 パッケージ (+1 個の依存関係のパッケージ)
合計容量: 32 k
総ダウンロード容量: 15 k
インストール容量: 42 k
Downloading packages:
epel-release-7-11.noarch.rpm | 15 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : epel-release-7-11.noarch 1/2
インストール中 : remi-release-7.5-2.el7.remi.noarch 2/2
検証中 : remi-release-7.5-2.el7.remi.noarch 1/2
検証中 : epel-release-7-11.noarch 2/2
インストール:
remi-release.noarch 0:7.5-2.el7.remi
依存性関連をインストールしました:
epel-release.noarch 0:7-11
完了しました!

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

 command
$ ls -a /etc/yum.repos.d/
. CentOS-Media.repo epel.repo remi-php54.repo remi-safe.repo
.. CentOS-Sources.repo nginx.repo remi-php70.repo remi.repo
CentOS-Base.repo CentOS-Vault.repo remi-glpi91.repo remi-php71.repo
CentOS-CR.repo CentOS-fasttrack.repo remi-glpi92.repo remi-php72.repo
CentOS-Debuginfo.repo epel-testing.repo remi-glpi93.repo remi-php73.repo

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

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

remiレポジトリでphp7.2系の導入に利用するレポジトリはremi-php72レポジトリになります。

remi-php72レポジトリはデフォルトでは有効になっていません。それ程、使用頻度も高くないことからphp7.2系に関連したyumコマンドを実行する際だけ有効にするようにします。

この場合はyumコマンドにオプションである”--enable-repo=remi,remi-php72”を付与します。例えばphpパッケージを探す場合は以下のように実行します。

 command
$ yum info --enablerepo=remi,remi-php72 php

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

 log
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* epel: ftp.iij.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* remi: ftp.riken.jp
* remi-php72: ftp.riken.jp
* remi-safe: ftp.riken.jp
* updates: ftp.tsukuba.wide.ad.jp
インストール済みパッケージ
名前 : php
アーキテクチャー : x86_64
バージョン : 7.2.7
リリース : 1.el7.remi
容量 : 10 M
リポジトリー : installed
提供元リポジトリー : remi-php72
要約 : PHP scripting language for creating dynamic web sites
URL : http://www.php.net/
ライセンス : PHP and Zend and BSD and MIT and ASL 1.0
説明 : PHP is an HTML-embedded scripting language. PHP attempts to make it
: easy for developers to write dynamically generated web pages. PHP also
: offers built-in database integration for several commercial and
: non-commercial database management systems, so writing a
: database-enabled webpage with PHP is fairly simple. The most common
: use of PHP coding is probably as a replacement for CGI scripts.
:
: The php package contains the module (often referred to as mod_php)
: which adds support for the PHP language to Apache HTTP Server.

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

 log
$ yum search --enablerepo=remi,remi-php72 php
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: mirror.dmmlabs.jp
* extras: ftp.iij.ad.jp
* remi-php72: mirrors.tuna.tsinghua.edu.cn
* remi-safe: mirrors.tuna.tsinghua.edu.cn
* updates: ftp.iij.ad.jp
【略】
php72-php-pecl-handlebars-devel.x86_64 : php72-php-pecl-handlebars developer files (header)
php72-php-pecl-propro-devel.x86_64 : php72-php-pecl-propro developer files (header)
php72-php-pecl-psr-devel.x86_64 : php72-php-pecl-psr developer files (header)
php72-php-pecl-raphf-devel.x86_64 : php72-php-pecl-raphf developer files (header)
php72-php-pecl-swoole-devel.x86_64 : php72-php-pecl-swoole developer files (header)
php72-php-pecl-swoole2-devel.x86_64 : php72-php-pecl-swoole2 developer files (header)
php72-php-pecl-xmldiff-devel.x86_64 : php72-php-pecl-xmldiff developer files (header)
php72-php-pecl-yaconf-devel.x86_64 : php72-php-pecl-yaconf developer files (header)
php72-runtime.x86_64 : Package that handles php72 Software Collection.
【略】
php72-zephir.noarch : Zephir language for creation of extensions for PHP.
php72-zephir-parser.x86_64 : Zephir parser extension
Name and summary matches only, use "search all" for everything.

今度は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パッケージのインストール前に、パッケージの情報を確認しておきます。

 command
$ yum info --enablerepo=remi,remi-php72 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql

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

 log
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* epel: ftp.kddilabs.jp
* extras: ftp.tsukuba.wide.ad.jp
* remi: ftp.riken.jp
* remi-php72: ftp.riken.jp
* remi-safe: ftp.riken.jp
* updates: ftp.tsukuba.wide.ad.jp
インストール済みパッケージ
名前 : php
アーキテクチャー : x86_64
バージョン : 7.2.7
リリース : 1.el7.remi
容量 : 10 M
リポジトリー : installed
提供元リポジトリー : remi-php72
要約 : PHP scripting language for creating dynamic web sites
URL : http://www.php.net/
ライセンス : PHP and Zend and BSD and MIT and ASL 1.0
説明 : PHP is an HTML-embedded scripting language. PHP attempts to make it
: easy for developers to write dynamically generated web pages. PHP also
: offers built-in database integration for several commercial and
: non-commercial database management systems, so writing a
: database-enabled webpage with PHP is fairly simple. The most common
: use of PHP coding is probably as a replacement for CGI scripts.
:
: The php package contains the module (often referred to as mod_php)
: which adds support for the PHP language to Apache HTTP Server.
名前 : php-gd
アーキテクチャー : x86_64
バージョン : 7.2.7
リリース : 1.el7.remi
容量 : 212 k
リポジトリー : installed
提供元リポジトリー : remi-php72
要約 : A module for PHP applications for using the gd graphics library
URL : http://www.php.net/
ライセンス : PHP
説明 : The php-gd package contains a dynamic shared object that will add
: support for using the gd graphics library to PHP.
名前 : php-mbstring
アーキテクチャー : x86_64
バージョン : 7.2.7
リリース : 1.el7.remi
容量 : 3.3 M
リポジトリー : installed
提供元リポジトリー : remi-php72
要約 : A module for PHP applications which need multi-byte string handling
URL : http://www.php.net/
ライセンス : PHP and LGPLv2 and BSD and OpenLDAP
説明 : The php-mbstring package contains a dynamic shared object that will add
: support for multi-byte string handling to PHP.
名前 : php-mysqlnd
アーキテクチャー : x86_64
バージョン : 7.2.7
リリース : 1.el7.remi
容量 : 862 k
リポジトリー : installed
提供元リポジトリー : remi-php72
要約 : A module for PHP applications that use MySQL databases
URL : http://www.php.net/
ライセンス : PHP
説明 : The php-mysqlnd package contains a dynamic shared object that will add
: MySQL database support to PHP. MySQL is an object-relational database
: management system. PHP is an HTML-embeddable scripting language. If
: you need MySQL support for PHP applications, you will need to install
: this package and the php package.
:
: This package use the MySQL Native Driver
名前 : php-pdo
アーキテクチャー : x86_64
バージョン : 7.2.7
リリース : 1.el7.remi
容量 : 390 k
リポジトリー : installed
提供元リポジトリー : remi-php72
要約 : A database access abstraction module for PHP applications
URL : http://www.php.net/
ライセンス : PHP
説明 : The php-pdo package contains a dynamic shared object that will add
: a database access abstraction layer to PHP. This module provides
: a common interface for accessing MySQL, PostgreSQL or other
: databases.
名前 : php-pecl-mcrypt
アーキテクチャー : x86_64
バージョン : 1.0.1
リリース : 6.el7.remi.7.2
容量 : 100 k
リポジトリー : installed
提供元リポジトリー : remi-php72
要約 : Bindings for the libmcrypt library
URL : http://pecl.php.net/package/mcrypt
ライセンス : PHP
説明 : Provides bindings for the unmaintained libmcrypt.
:
: Package built for PHP 7.2.
名前 : php-pecl-mysql
アーキテクチャー : x86_64
バージョン : 1.0.0
リリース : 0.17.20160812git230a828.el7.remi.7.2
容量 : 129 k
リポジトリー : installed
提供元リポジトリー : remi-php72
要約 : MySQL database access functions
URL : http://pecl.php.net/package/mysql
ライセンス : PHP
説明 : This extension provides the mysql family of functions that were provided
: with PHP 3-5. These functions have been superseded by MySQLi and PDO_MySQL,
: which continue to be bundled with PHP 7.
:
: Although it should be possible to use this extension with PHP 7.0, you are
: strongly encouraged to port your code to use either MySQLi or PDO_MySQL,
: as this extension is not maintained and is available for historical reasons only.
:
: Package built for PHP 7.2.
名前 : php-xml
アーキテクチャー : x86_64
バージョン : 7.2.7
リリース : 1.el7.remi
容量 : 855 k
リポジトリー : installed
提供元リポジトリー : remi-php72
要約 : A module for PHP applications which use XML
URL : http://www.php.net/
ライセンス : PHP
説明 : The php-xml package contains dynamic shared objects which add support
: to PHP for manipulating XML documents using the DOM tree,
: and performing XSL transformations on XML documents.
名前 : php-xmlrpc
アーキテクチャー : x86_64
バージョン : 7.2.7
リリース : 1.el7.remi
容量 : 165 k
リポジトリー : installed
提供元リポジトリー : remi-php72
要約 : A module for PHP applications which use the XML-RPC protocol
URL : http://www.php.net/
ライセンス : PHP and BSD
説明 : The php-xmlrpc package contains a dynamic shared object that will add
: support for the XML-RPC protocol to PHP.

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

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

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

 command
# yum -y install --enablerepo=remi,remi-php72 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql

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

 log
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* epel: mirror.dmmlabs.jp
* extras: ftp.tsukuba.wide.ad.jp
* remi: ftp.riken.jp
* remi-php72: ftp.riken.jp
* remi-safe: ftp.riken.jp
* updates: ftp.tsukuba.wide.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ php.x86_64 0:7.2.7-1.el7.remi を インストール
---> パッケージ php-mbstring.x86_64 0:7.2.7-1.el7.remi を インストール
---> パッケージ php-mysqlnd.x86_64 0:7.2.7-1.el7.remi を インストール
---> パッケージ php-pdo.x86_64 0:7.2.7-1.el7.remi を インストール
---> パッケージ php-pecl-mcrypt.x86_64 0:1.0.1-6.el7.remi.7.2 を インストール
--> 依存性の処理をしています: libmcrypt.so.4()(64bit) のパッケージ: php-pecl-mcrypt-1.0.1-6.el7.remi.7.2.x86_64
---> パッケージ php-pecl-mysql.x86_64 0:1.0.0-0.17.20160812git230a828.el7.remi.7.2 を インストール
---> パッケージ php-xml.x86_64 0:7.2.7-1.el7.remi を インストール
---> パッケージ php-xmlrpc.x86_64 0:7.2.7-1.el7.remi を インストール
--> トランザクションの確認を実行しています。
---> パッケージ gd-last.x86_64 0:2.2.5-2.el7.remi を インストール
---> パッケージ libxcb.x86_64 0:1.12-1.el7 を インストール
--> 依存性の処理をしています: libXau.so.6()(64bit) のパッケージ: libxcb-1.12-1.el7.x86_64
---> パッケージ php-json.x86_64 0:7.2.7-1.el7.remi を インストール
--> トランザクションの確認を実行しています。
---> パッケージ fontpackages-filesystem.noarch 0:1.44-8.el7 を インストール
---> パッケージ jbigkit-libs.x86_64 0:2.0-11.el7 を インストール
---> パッケージ libXau.x86_64 0:1.0.8-2.1.el7 を インストール
---> パッケージ lyx-fonts.noarch 0:2.2.3-1.el7 を インストール
--> 依存性解決を終了しました。
依存性を解決しました
インストール中:
php x86_64 7.2.7-1.el7.remi remi-php72 3.2 M
php-gd x86_64 7.2.7-1.el7.remi remi-php72 76 k
php-mbstring x86_64 7.2.7-1.el7.remi remi-php72 621 k
php-mysqlnd x86_64 7.2.7-1.el7.remi remi-php72 231 k
php-pdo x86_64 7.2.7-1.el7.remi remi-php72 124 k
php-pecl-mcrypt x86_64 1.0.1-6.el7.remi.7.2 remi-php72 29 k
php-pecl-mysql x86_64 1.0.0-0.17.20160812git230a828.el7.remi.7.2 remi-php72 38 k
php-xml x86_64 7.2.7-1.el7.remi remi-php72 204 k
php-xmlrpc x86_64 7.2.7-1.el7.remi remi-php72 79 k
依存性関連でのインストールをします:
fontconfig x86_64 2.10.95-11.el7 base 229 k
fontpackages-filesystem noarch 1.44-8.el7 base 9.9 k
gd-last x86_64 2.2.5-2.el7.remi remi 133 k
jbigkit-libs x86_64 2.0-11.el7 base 46 k
libX11 x86_64 1.6.5-1.el7 base 606 k
libX11-common noarch 1.6.5-1.el7 base 164 k
libXau x86_64 1.0.8-2.1.el7 base 29 k
libXpm x86_64 3.5.12-1.el7 base 55 k
libargon2 x86_64 20161029-2.el7 epel 23 k
libjpeg-turbo x86_64 1.2.90-5.el7 base 134 k
libmcrypt x86_64 2.5.8-13.el7 epel 99 k
libpng x86_64 2:1.5.13-7.el7_2 base 213 k
libtiff x86_64 4.0.3-27.el7_3 base 170 k
libwebp x86_64 0.3.0-7.el7 base 170 k
libxcb x86_64 1.12-1.el7 base 211 k
libxslt x86_64 1.1.28-5.el7 base 242 k
lyx-fonts noarch 2.2.3-1.el7 epel 159 k
php-cli x86_64 7.2.7-1.el7.remi remi-php72 4.8 M
php-common x86_64 7.2.7-1.el7.remi remi-php72 1.1 M
php-json x86_64 7.2.7-1.el7.remi remi-php72 61 k
トランザクションの要約
インストール 9 パッケージ (+20 個の依存関係のパッケージ)
総ダウンロード容量: 13 M
インストール容量: 50 M
Downloading packages:
(1/29): fontpackages-filesystem-1.44-8.el7.noarch.rpm | 9.9 kB 00:00:00
(2/29): jbigkit-libs-2.0-11.el7.x86_64.rpm | 46 kB 00:00:00
(18/29): php-7.2.7-1.el7.remi.x86_64.rpm | 3.2 MB 00:00:03
(19/29): php-common-7.2.7-1.el7.remi.x86_64.rpm | 1.1 MB 00:00:01
(20/29): php-gd-7.2.7-1.el7.remi.x86_64.rpm | 76 kB 00:00:00
(21/29): php-json-7.2.7-1.el7.remi.x86_64.rpm | 61 kB 00:00:00
(22/29): php-cli-7.2.7-1.el7.remi.x86_64.rpm | 4.8 MB 00:00:05
(23/29): php-mysqlnd-7.2.7-1.el7.remi.x86_64.rpm | 231 kB 00:00:00
(24/29): php-xml-7.2.7-1.el7.remi.x86_64.rpm | 204 kB 00:00:00
(25/29): php-xmlrpc-7.2.7-1.el7.remi.x86_64.rpm | 79 kB 00:00:00
(26/29): php-pecl-mysql-1.0.0-0.17.20160812git230a828.el7.remi.7.2.x86_64.rpm | 38 kB 00:00:00
(27/29): php-mbstring-7.2.7-1.el7.remi.x86_64.rpm | 621 kB 00:00:00
(28/29): php-pecl-mcrypt-1.0.1-6.el7.remi.7.2.x86_64.rpm | 29 kB 00:00:00
(29/29): php-pdo-7.2.7-1.el7.remi.x86_64.rpm | 124 kB 00:00:00
--------------------------------------------------------------------------------------------------------
合計 1.7 MB/s | 13 MB 00:00:07
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 から鍵を取得中です。
Importing GPG key 0x352C64E5:
Userid : "Fedora EPEL (7) <epel@fedoraproject.org>"
Fingerprint: 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
Package : epel-release-7-11.noarch (@extras)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi から鍵を取得中です。
Importing GPG key 0x00F97F56:
Userid : "Remi Collet <RPMS@FamilleCollet.com>"
Fingerprint: 1ee0 4cce 88a4 ae4a a29a 5df5 004e 6f47 00f9 7f56
Package : remi-release-7.5-2.el7.remi.noarch (installed)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : libjpeg-turbo-1.2.90-5.el7.x86_64 1/29
インストール中 : libargon2-20161029-2.el7.x86_64 2/29
インストール中 : fontpackages-filesystem-1.44-8.el7.noarch 3/29
インストール中 : 2:libpng-1.5.13-7.el7_2.x86_64 4/29
インストール中 : lyx-fonts-2.2.3-1.el7.noarch 5/29
インストール中 : fontconfig-2.10.95-11.el7.x86_64 6/29
インストール中 : php-common-7.2.7-1.el7.remi.x86_64 7/29
インストール中 : php-json-7.2.7-1.el7.remi.x86_64 8/29
インストール中 : php-cli-7.2.7-1.el7.remi.x86_64 9/29
インストール中 : php-pdo-7.2.7-1.el7.remi.x86_64 10/29
インストール中 : php-mysqlnd-7.2.7-1.el7.remi.x86_64 11/29
インストール中 : libXau-1.0.8-2.1.el7.x86_64 12/29
インストール中 : libxcb-1.12-1.el7.x86_64 13/29
インストール中 : libxslt-1.1.28-5.el7.x86_64 14/29
インストール中 : php-xml-7.2.7-1.el7.remi.x86_64 15/29
インストール中 : libX11-common-1.6.5-1.el7.noarch 16/29
インストール中 : libX11-1.6.5-1.el7.x86_64 17/29
インストール中 : libXpm-3.5.12-1.el7.x86_64 18/29
インストール中 : libwebp-0.3.0-7.el7.x86_64 19/29
インストール中 : jbigkit-libs-2.0-11.el7.x86_64 20/29
インストール中 : libtiff-4.0.3-27.el7_3.x86_64 21/29
インストール中 : gd-last-2.2.5-2.el7.remi.x86_64 22/29
インストール中 : libmcrypt-2.5.8-13.el7.x86_64 23/29
インストール中 : php-pecl-mcrypt-1.0.1-6.el7.remi.7.2.x86_64 24/29
インストール中 : php-gd-7.2.7-1.el7.remi.x86_64 25/29
インストール中 : php-xmlrpc-7.2.7-1.el7.remi.x86_64 26/29
インストール中 : php-pecl-mysql-1.0.0-0.17.20160812git230a828.el7.remi.7.2.x86_64 27/29
インストール中 : php-7.2.7-1.el7.remi.x86_64 28/29
インストール中 : php-mbstring-7.2.7-1.el7.remi.x86_64 29/29
インストール:
php.x86_64 0:7.2.7-1.el7.remi
php-gd.x86_64 0:7.2.7-1.el7.remi
php-mbstring.x86_64 0:7.2.7-1.el7.remi
php-mysqlnd.x86_64 0:7.2.7-1.el7.remi
php-pdo.x86_64 0:7.2.7-1.el7.remi
php-pecl-mcrypt.x86_64 0:1.0.1-6.el7.remi.7.2
php-pecl-mysql.x86_64 0:1.0.0-0.17.20160812git230a828.el7.remi.7.2
php-xml.x86_64 0:7.2.7-1.el7.remi
php-xmlrpc.x86_64 0:7.2.7-1.el7.remi
依存性関連をインストールしました:
fontconfig.x86_64 0:2.10.95-11.el7 fontpackages-filesystem.noarch 0:1.44-8.el7
gd-last.x86_64 0:2.2.5-2.el7.remi jbigkit-libs.x86_64 0:2.0-11.el7
libX11.x86_64 0:1.6.5-1.el7 libX11-common.noarch 0:1.6.5-1.el7
libXau.x86_64 0:1.0.8-2.1.el7 libXpm.x86_64 0:3.5.12-1.el7
libargon2.x86_64 0:20161029-2.el7 libjpeg-turbo.x86_64 0:1.2.90-5.el7
libmcrypt.x86_64 0:2.5.8-13.el7 libpng.x86_64 2:1.5.13-7.el7_2
libtiff.x86_64 0:4.0.3-27.el7_3 libwebp.x86_64 0:0.3.0-7.el7
libxcb.x86_64 0:1.12-1.el7 libxslt.x86_64 0:1.1.28-5.el7
lyx-fonts.noarch 0:2.2.3-1.el7 php-cli.x86_64 0:7.2.7-1.el7.remi
php-common.x86_64 0:7.2.7-1.el7.remi php-json.x86_64 0:7.2.7-1.el7.remi
完了しました!

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

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

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

 command
# yum list installed | grep php

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

 log
php.x86_64 7.2.7-1.el7.remi @remi-php72
php-cli.x86_64 7.2.7-1.el7.remi @remi-php72
php-common.x86_64 7.2.7-1.el7.remi @remi-php72
php-gd.x86_64 7.2.7-1.el7.remi @remi-php72
php-json.x86_64 7.2.7-1.el7.remi @remi-php72
php-mbstring.x86_64 7.2.7-1.el7.remi @remi-php72
php-mysqlnd.x86_64 7.2.7-1.el7.remi @remi-php72
php-pdo.x86_64 7.2.7-1.el7.remi @remi-php72
php-pecl-mcrypt.x86_64 1.0.1-6.el7.remi.7.2 @remi-php72
php-pecl-mysql.x86_64 1.0.0-0.17.20160812git230a828.el7.remi.7.2
@remi-php72
php-xml.x86_64 7.2.7-1.el7.remi @remi-php72
php-xmlrpc.x86_64 7.2.7-1.el7.remi @remi-php72

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

3-4. php72 cliの動作確認

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

 command
$ php -v
PHP 7.2.7 (cli) (built: Jun 20 2018 08:21:26) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

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

4. phpの基本的な設定

項目3. の手順までで、php7.2系パッケージの導入とモジュールの設定までが完了しました。

PHPはこの状態でも動作しますが、基本的な設定を行うことをお勧めします。
本記事では運用するにあたって最低限、必要になる設定を行います。設定の前提は以下の通りです。

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

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

4-1. php.iniの変更

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

 command
# cp -p /etc/php.ini /etc/php.ini.org

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

 command
# vi /etc/php.ini

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

phpはデフォルトの設定ではhttpヘッダーにバージョンを表示します。

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

 code
expose_php = On

 code
expose_php = Off

に変更します。

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

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

 code
post_max_size = 8M

 code
post_max_size = 20M

に変更します。

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

 code
upload_max_filesize = 2M

 code
upload_max_filesize = 20M

に変更します。

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

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

 code
;date.timezone =

 code
date.timezone = "Asia/Tokyo"

に変更します。

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

以下の項目は日本語を利用するうえでの設定変更になります。
一般的な設定を紹介していますが、日本語の扱いは運用環境によって異なると思います。動作するアプリケーションに応じて、適宜、変更してください。

まずはmbstringで使用される言語のデフォルト値を定義するmbstring.languageを設定します。
1509行目のパラメーター

 code
;mbstring.language = Japanese

 code
mbstring.language = Japanese

に変更します。

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

 code
;mbstring.internal_encoding =

 code
mbstring.internal_encoding = UTF-8

に変更します。

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

 code
;mbstring.http_input =

 code
mbstring.http_input = UTF-8

に変更します。

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

 code
;mbstring.http_output =

 code
mbstring.http_output = pass

に変更します。

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

 code
;mbstring.encoding_translation = Off

 code
mbstring.encoding_translation = On

に変更します。

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

 code
;mbstring.detect_order = auto

 code
mbstring.detect_order = auto

に変更します。

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

 code
;mbstring.substitute_character = none

 code
mbstring.substitute_character = none

に変更します。
以上で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レポジトリを参照するように指定します。

 command
$ yum info --enablerepo=remi,remi-php72 php-fpm

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

 log
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* epel: ftp.kddilabs.jp
* extras: ftp.tsukuba.wide.ad.jp
* remi: ftp.riken.jp
* remi-php72: ftp.riken.jp
* remi-safe: ftp.riken.jp
* updates: ftp.tsukuba.wide.ad.jp
インストール済みパッケージ
名前 : php-fpm
アーキテクチャー : x86_64
バージョン : 7.2.7
リリース : 1.el7.remi
容量 : 5.1 M
リポジトリー : installed
提供元リポジトリー : remi-php72
要約 : PHP FastCGI Process Manager
URL : http://www.php.net/
ライセンス : PHP and Zend and BSD and MIT and ASL 1.0
説明 : PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI
: implementation with some additional features useful for sites of
: any size, especially busier sites.

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

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

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

 command
# yum -y install --enablerepo=remi,remi-php72 php-fpm

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

 log
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* epel: mirror.dmmlabs.jp
* extras: ftp.tsukuba.wide.ad.jp
* remi: ftp.riken.jp
* remi-php72: ftp.riken.jp
* remi-safe: ftp.riken.jp
* updates: ftp.tsukuba.wide.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ php-fpm.x86_64 0:7.2.7-1.el7.remi を インストール
--> 依存性解決を終了しました。
依存性を解決しました
インストール中:
php-fpm x86_64 7.2.7-1.el7.remi remi-php72 1.7 M
トランザクションの要約
インストール 1 パッケージ
総ダウンロード容量: 1.7 M
インストール容量: 5.1 M
Downloading packages:
php-fpm-7.2.7-1.el7.remi.x86_64.rpm | 1.7 MB 00:00:02
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : php-fpm-7.2.7-1.el7.remi.x86_64 1/1
検証中 : php-fpm-7.2.7-1.el7.remi.x86_64 1/1
インストール:
php-fpm.x86_64 0:7.2.7-1.el7.remi
完了しました!

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

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

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

 command
# yum list installed | grep php-fpm

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

 command
php-fpm.x86_64 7.2.7-1.el7.remi @remi-php72

上記のパッケージが表示されれば、インストール後の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の設定変更前に、ファイルをバックアップしておきます。具体的には以下の手順でコピーを行います。

 command
# cp -p /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.org

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

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

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

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

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

php-fpmを動作させるユーザーとグループについては、nginx側での設定に合わせる必要があります。

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

 code
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache

 code
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = www
; RPM: Keep a group allowed to write in log dir.
group = www

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

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

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

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

 code
;pm.max_children = 50
pm.max_children = 25

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

 code
; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
;pm.start_servers = 5
pm.start_servers = 10

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

 code
; The desired minimum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
;pm.min_spare_servers = 5
pm.min_spare_servers = 10

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

 code
; The desired maximum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
;pm.max_spare_servers = 35
pm.max_spare_servers = 20

pm.max_requestsは子プロセスが再起動するまでに実行するリクエスト数です。

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

 code
; The number of requests each child process should execute before respawning.
; This can be useful to work around memory leaks in 3rd party libraries. For
; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
; Default Value: 0
;pm.max_requests = 500
pm.max_requests = 500

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

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

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

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

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

 command
# systemctl start php-fpm

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

 command
$ systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset: disabled)
Active: active (running) since 木 2018-06-21 18:39:47 JST; 1 day 17h ago
Main PID: 2204 (php-fpm)
Status: "Processes active: 0, idle: 11, Requests: 4, slow: 0, Traffic: 0req/sec"
CGroup: /system.slice/php-fpm.service
tq2204 php-fpm: master process (/etc/php-fpm.conf)
tq2205 php-fpm: pool www
tq2206 php-fpm: pool www
tq2207 php-fpm: pool www
tq2208 php-fpm: pool www
tq2209 php-fpm: pool www
tq2210 php-fpm: pool www
tq2211 php-fpm: pool www
tq2212 php-fpm: pool www
tq2213 php-fpm: pool www
tq2214 php-fpm: pool www
mq2295 php-fpm: pool www
6月 21 18:39:46 www2 systemd[1]: Starting The PHP FastCGI Process Manager...
6月 21 18:39:47 www2 systemd[1]: Started The PHP FastCGI Process Manager.

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

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

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

 command
# systemctl enable php-fpm
Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.

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

 command
$ systemctl is-enabled php-fpm
enabled

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

8. nginxの設定変更

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

/etc/nginx/
|-- conf.d
|-- fastcgi_params
|-- koi-utf
|-- koi-win
|-- mime.types
|-- modules -> ../../usr/lib64/nginx/modules
|-- nginx.conf
|-- scgi_params
|-- sites-available
| |-- default.conf
| |-- www.testdom.com.conf
| |-- www.testdom2.com.conf
|-- sites-enabled
| |-- default.conf -> /etc/nginx/sites-available/default.conf
| |-- www.testdom.com.conf -> /etc/nginx/sites-available/www.testdom.com.conf
| `-- www.testdom2.com.conf -> /etc/nginx/sites-available/www.testdom2.com.con
|-- uwsgi_params
`-- win-utf

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

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

 command
# vi /etc/nginx/sites-available/www.testdom.com.conf

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

 code
server {
    listen 80;
    server_name testdom.com www.testdom.com;
    access_log /var/log/nginx/www.testdom.com-access.log main;
    error_log /var/log/nginx/www.testdom.com-error.log;
    root /home/www/www.testdom.com;
location / {
    index index.html index.htm;
    }
}

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

 code
index index.html index.htm

のindexパラメーターを

 code
index index.php index.html index.htm;

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

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

 code
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

追加する内容は

 code
location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }

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

 code
server {
    listen 80;
server_name testdom.com www.testdom.com;
access_log /var/log/nginx/www.testdom.com-access.log main;
error_log /var/log/nginx/www.testdom.com-error.log;
root /home/www/www.testdom.com;
 
location / {
index index.php index.html index.htm;
}
 
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

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

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

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

 command
# vi /etc/nginx/sites-available/www.testdom.com2.conf

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

 code
server {
listen 80;
server_name testdom2.com www.testdom2.com;
access_log /var/log/nginx/www.testdom2.com-access.log main;
error_log /var/log/nginx/www.testdom2.com-error.log;
root /home/www/www.testdom2.com;
 
location / {
index index.html index.htm;
}
}

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

 code
index index.html index.htm

のindexパラメーターを

 code
index index.php index.html index.htm;

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

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

 code
location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }

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

 code
server {
    listen 80;
    server_name testdom2.com www.testdom2.com;
    access_log /var/log/nginx/www.testdom2.com-access.log main;
    error_log /var/log/nginx/www.testdom2.com-error.log;
    root /home/www/www.testdom2.com;
 
location / {
    index index.php index.html index.htm;
    }
 
location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }
}

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

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

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

 command
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

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

8-4. 設定の有効化

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

 command
# systemctl restart 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を作成します。

 command
# vi /home/www/www.testdom.com/index.php

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

 command
<?php phpinfo(); ?>

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

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

 command
# vi /home/www/www.testdom2.com/index.php

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

 command
<?php phpinfo(); ?>

作成後、ファイルを保存します。これで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のインストール手順は別の記事

Open Source
centos-mariadb-install
MySQL互換のオープンソースDB MariaDB 10をインストールして利用する

こんにちは、レムシステム株式会社 ITインフラ担当の小村(@system_kom)です。 前回の記事でウェブサーバーであるhttpdとアプリケーションサーバーであるphpのインストールが完了しました。 今回は作成した環境にデータベースとして ...

で紹介しています。参考にしていただければ幸いです。
同じ環境でApacheとのパフォーマンスの違いがどの程度なのか、興味があるところだと思います。
環境が整い次第、パフォーマンスの比較を進めていきますので、また記事の更新を楽しみにいていただければ幸いです。

  • この記事を書いた人
rem-profile-photo

レムシステム

レムシステムはPC・サーバー・ネットワークでの業務効率化を主な業務としている会社です。全国に対応しています。

-CentOS, Nginx, PHP