本日も乙

ただの自己満足な備忘録。

nginxとPHP-FPMを連携させる

前回の記事でnginxをソースからインストールしましたが、HTMLファイルしか実行できません。 PHPを実行するためには、PHP-FPMを組み込んでnginxと連携させる必要がありますので今回はその辺りをすすめます。

PHP-FPMのインストール

PHPをソースからインストールしている場合、configureオプションに「--enable-fpm」を追加してリコンパイルしてインストールします。PHPのconfigureオプションはこちらが参考になるかと思います。 もし、インストールPHPのConfigureオプションが分からない場合は、以下のコマンドを実行することで調べることができます。

$ php -i | grep "Configure Command"
Configure Command =>  './configure'  '--prefix=/usr/local/php-5.4.10' '--enable-bcmath' '--enable-calendar' '--enable-gd-jis-conv' '--enable-gd-native-ttf' '--enable-intl' '--enable-mbstring' '--enable-mbregex' '--enable-pcntl' '--enable-soap' '--with-curl' '--with-freetype-dir' '--with-gettext' '--with-gd' '--with-jpeg-dir' '--with-libxml-dir' '--with-mcrypt' '--with-mhash' '--with-mysql=mysqlnd' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-openssl' '--with-pcre-dir' '--with-pear' '--with-png-dir' '--with-readline' '--with-xsl' '--with-zlib'
$ ./configure ...(オプション)

$ make
$ make test
$ sudo make install

# php-fpmコマンドのパスが通っていない場合はシンボリックリンクを貼る
$ sudo ln -s /usr/local/php-5.4.10/sbin/php-fpm /usr/sbin/php-fpm

インストールできたか確認します。

$ php-fpm -v

PHP 5.4.0 (fpm-fcgi) (built: May  4 2012 00:08:14)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

PHP-FPMの設定

自動起動の設定

ダウンロードしたPHPディレクトリにPHP-FPMの起動スクリプトがあるので、コピーして設定します。

$ sudo cp /usr/local/src/php-5.4.10/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
$ sudo chmod 755 /etc/init.d/php-fpm

起動スクリプトを一部修正します。

# /etc/init.d/php-fpm

- php_fpm_PID=${prefix}/var/run/php-fpm.pid
+ php_fpm_PID=/var/run/php-fpm.pid

自動起動の設定を行います。

$ sudo chkconfig --add php-fpm
$ sudo chkconfig php-fpm on
$ chkconfig --list php-fpm
php-fpm           0:off   1:off   2:on    3:on    4:on    5:on    6:off

PHP-FPM単体の設定

デフォルトの設定ファイルがあるのでコピーして設定します。

$ cd /usr/local/php-5.4.10/etc
$ sudo cp -a php-fpm.conf.default php-fpm.conf
# /usr/local/php-5.4.10/etc/php-fpm.conf

# pidファイルを指定
; pid = run/php-fpm.pid
pid = /var/run/php-fpm.pid

# PHP-FPMのエラーログ先を指定
; error_log = log/php-fpm.log
error_log = /var/log/php-fpm/php-fpm.log

# 実行ユーザを指定
; user = nobody
user = nginx

# 実行ユーザグループを指定
; group = nobody
group = nginx

ログディレクトリを作成します。

$ sudo mkdir /var/log/php-fpm

nginxの設定

nginx.confを編集します。

# /etc/nginx/nginx.conf

http {
…(省略)
    server {
    …(省略)

        # 下記追加
        location ~ \.php$ {
            root           /etc/nginx/html;  # 絶対パスで書く
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    …(省略)
    }
}

PHP-FPM、nginxを起動

$ sudo service php-fpm start
Starting php-fpm  done

$ sudo service nginx restart
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Stopping nginx:                                            [  OK  ]
Starting nginx:                                            [  OK  ]

PHP実行確認

/etc/nginx/html に以下のPHPスクリプトを設置し、http://localhost/test.php を実行して「Hello, World!」と表示されれば完了となります。

// /etc/nginx/html/test.php

<?php

echo 'Hello, World!';

$ wget -q -O - http://localhost/test.php
Hello, World!

最後に

前回と今回でnginxのインストールとPHPとの連携ができました。 nginxでリバースプロキシができると色々便利なことができるのでまた機会があれば記事にしたいと思います。