ApacheではPHPが初めから組み込まれているので、複雑な設定を行わなくてもPHPを使用できる。一方、NginxではPhp-fpmを使用するため、いくつかの設定が必要である。fpmとはFastCGI Process Managerの略で、FastCGIの実装のひとつである。LinuxMintの環境で使用する方法を解説する。
MySQLを加えた場合、全体像としては以下のようになる。
以下のコマンドでインストールする。
$ apt update;
$ apt apt-get install php php-fpm
コマンド以外の方法で、ソフトウェアの管理ウィンドウからインストールする手順は以下の通り(Linux Mint)。
スタートメニュー>システム管理>ソフトウェアの管理で「ソフトウェアの管理」ウィンドウを開く
プログラミング>PHP>PHP>インストール
プログラミング>PHP>PHP-fpm>インストール
PHPの設定等はphp -v, php -i, apt show phpの3つのコマンドで確認する。
Php-fpnは$ php-fpm7.2 -vコマンドで確認する。「7.2」はバージョンである。php-fpmはプログラム名がphp-fpm7.2、サービス名がphp7.2-fpmで紛らわしい。いくつか確認してみよう。パッケージ情報からバージョンを確認するにはapt-cache show php-fpmコマンドを使用する。結果を示す。
Package: php-fpm
Architecture: all
Version: 1:7.2+60ubuntu1
Priority: optional
Section: universe/php
Source: php-defaults (60ubuntu1)
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 12
Depends: php7.2-fpm
Filename: pool/universe/p/php-defaults/php-fpm_7.2+60ubuntu1_all.deb
Size: 3172
MD5sum: 250d2ddeff0bd0e144d31c2b31c59ea5
SHA1: 77e6ca7796344f7228f5f976ec007ef6a12e3d50
SHA256: 0af85be31b24b501c28fd6fe7393bd24f25165d295ce51ea3aa47faeebda5b4c
Description-en: server-side, HTML-embedded scripting language (FPM-CGI binary) (default)
This package provides the Fast Process Manager interpreter that runs
as a daemon and receives Fast/CGI requests.
.
PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
open source general-purpose scripting language that is especially suited
for web development and can be embedded into HTML.
.
This package is a dependency package, which depends on Ubuntu's default
PHP version (currently 7.2).
Description-md5: de001fb3c65e3b3953054ccc3798817a
「Depends: php7.2-fpm」の部分でバージョンを確認できる。次にsystemdによるサービスの起動を確認するため、/lib/systemd/system/php-fpm.service(/etc/systemd/system/multi-user.target.wantsディレクトリなどからリンクされている)の内容を示す。
[Unit]
Description=The PHP 7.2 FastCGI Process Manager
Documentation=man:php-fpm7.2(8)
After=network.target
[Service]
Type=notify
PIDFile=/run/php/php7.2-fpm.pid
ExecStart=/usr/sbin/php-fpm7.2 --nodaemonize --fpm-config /etc/php/7.2/fpm/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
ExecStartではphp-fpm7.2プログラムを起動することを確認できる。
fpmの設定ファイルは/etc/php/7.2/fpm/pool.d/www.confである。Apache用になっているので、Nginx用に変更する。
user = nginx
group = nginx
listen = /run/php/php7.2-fpm.sock
listen.owner = nginx
listen.group = nginx
設定を反映するにはsudo systemctl restart php7.2-fpmコマンドを実行する。user,groupはすでに作成されているユーザ、グループから指定する。間違っている場合は、「systemctl status php7.2-fpm」コマンドで「ERROR: [pool www] cannot get uid for user 'nginx1'」などのエラーが出る。
この設定ファイルではlistenで示されたパス(/run/phpディレクトリ)にUnixソケットファイルが作成される。/run/phpディレクトリにはphp7.2-fpm.pidファイルも作成されるが、これは/etc/php/7.2/fpm/php-fpm.confファイルの「pid = /run/php/php7.2-fpm.pid」の行で設定される項目である。これら/run/phpディレクトリはNginxで使用されるファイルである。sudo systemctl restart php7.2-fpmで設定を更新しよう。
続いてNginxを設定する。/etc/nginx/nginx.confファイルでの変更箇所を示す。変更は1行のみ。
user nginx;
nginxのところはもともとwww-dataである。これを変えない場合は以下のようなブラウザでエラーページが表示される。
続いて、/etc/nginx/conf.d/default.confファイルファイルでの変更箇所を示す。
server {
listen 80 default_server;
location / {
root /usr/share/nginx/html;
index index.php;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
rootが2箇所あるが、これがウェブページを置くトップディレクトリになる。
また、Php-fpmの起動によって作成されたUnixソケットにfastcgi_pass unix:/run/php/php7.2-fpm.sock;でパスを合わせている。間違った場合は「An error occured.」エラーページが表示される。
これで一通りの設定は完了である。設定を反映させるため、sudo systemctl restart nginxコマンドでnginxサービスを再起動しよう。
簡単な表示テストを行う。/usr/share/nginx/htmlディレクトリにindex.phpファイルを作成する。内容は以下のとおり。
<?php
phpinfo();
ウェブブラウザでlocalhostにアクセスするとinfoページが表示されることを確認しよう。
設定ファイルやディレクトリなどかなり出てきたのでまとめておこう。
/lib/systemd/system/php-fpm.service (systemdファイル。pidの確認など。変更はなし)
/etc/php/7.2/fpm/pool.d/www.conf (Php-fpmの設定。user,group,listenソケットの設定)
/run/php/ (Php-fpm起動中、php7.2-fpm.sockソケットとphp7.2-fpm.pidファイルが現れるディレクトリ)
/etc/nginx/nginx.conf (Nginxの設定。ソケットユーザ名)
/etc/nginx/conf.d/default.conf (Nginxのサーバ設定。HTMLとPHPファイルのルート、ソケットパス)
/usr/share/nginx/html (Webページファイルのルートディレクトリ。Nginxのサーバ設定による)