2012年12月17日月曜日

Gentoo + nginx + FastCGI PHP で高速PHP環境を構築する

FPM-PHPを設定したPHPをインストールする

FPM(FastCGI Process Manager)なPHPをインストールする、Gentooの場合はUSEフラグをセットしてください


USEフラグの確認、その他のディストリビューションの方はそのようにやってください
karky7 ~ # equery u dev-lang/php
...
...
 - - fpm                 : Enable the FastCGI Process Manager SAPI
...
...
 - - xsl                 : Check/Support flag for XSL library (version 1)
 + - zip                 : Enable ZIP file support
 + + zlib                : Adds support for zlib (de)compression
karky7 ~ #


FPMのUSEフラグを有効にしてPHPをインストール
karky7 ~ # USE="fpm" emerge php
...
>>> Emerging (1 of 1) dev-lang/php-5.4.6
...
...


FPMのPHPのバージョンを確認、もし複数ある場合はeselectでセットしてください
karky7 ~ # eselect php list fpm
[1]   php5.4 *
karky7 ~ #


FPM-PHPの設定をする、このあたりは後でお好みで調整してください
karky7 ~ # diff /etc/php/fpm-php5.4/php-fpm.conf /etc/php/fpm-php5.4/php-fpm.conf.ORG
99c99
< listen = 0.0.0.0:9000
---
> listen = 127.0.0.1:9000
160c160
< pm.start_servers = 20
---
> ;pm.start_servers = 20
karky7 ~ #


PHPの設定をする、とくに設定はいらないのですが、タイムゾーン系のエラーが出るので調整しておく、後はお好みで設定してください
karky7 ~ # cp /etc/php/fpm-php5.4/php.ini /etc/php/fpm-php5.4/php.ini.ORG
karky7 ~ # emasc /etc/php/fpm-php5.4/php.ini
-su: emasc: command not found
karky7 ~ # emacs /etc/php/fpm-php5.4/php.ini
karky7 ~ # diff /etc/php/fpm-php5.4/php.ini /etc/php/fpm-php5.4/php.ini.ORG
919c919
< date.timezone = Asia/Tokyo
---
> ;date.timezone =
karky7 ~ #


FPM-PHPをポート8989で動かす
karky7 ~ # /etc/init.d/php-fpm start
 * Starting PHP FastCGI Process Manager ...                         [ ok ]
karky7 ~ # netstat -l | grep 8989
tcp        0      0 *:8989                  *:*                     LISTEN
karky7 ~ #


nginxをインストールする

結構フラグがいっぱいあるので調べましょう、#A君は英語が読めないのでスルーします
karky7 ~ # emerge -pv nginx
...
...
[ebuild  N     ] dev-libs/geoip-1.4.8  USE="ipv6 -perl-geoipupdate -static-libs" 1,790 kB
[ebuild  N     ] www-servers/nginx-1.2.1  USE="http http-cache ipv6 pcre ssl -aio -debug -libatomic -pcre-jit (-selinux) -vim-syntax" NGINX_MODULES_HTTP="access auth_basic autoindex browser charset empty_gif fastcgi geo gzip limit_req limit_zone map memcached proxy referer rewrite scgi split_clients ssi upstream_ip_hash userid uwsgi -addition -cache_purge -dav -degradation -fancyindex -flv -geoip -gzip_static -headers_more -image_filter -mp4 -passenger -perl -push -random_index -realip -secure_link -slowfs_cache -stub_status -sub -upload -upload_progress -xslt" NGINX_MODULES_MAIL="-imap -pop3 -smtp" 702 kB
karky7 ~ #


nginxを設定する、fastcgi_passでバックグラウンドのFPM-PHPへ転送する、その他のパラメータはFPM-PHPへ渡すパラメータなどの設定になる
karky7 ~ # cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.ORG
karky7 ~ # emacs /etc/nginx/nginx.conf
karky7 ~ # diff /etc/nginx/nginx.conf /etc/nginx/nginx.conf.ORG
49c49
<               listen *;
---
>               listen 127.0.0.1;
51,57d50
<
<               location ~* \.php$ {
<                        fastcgi_pass 127.0.0.1:8989;
<                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
<                        fastcgi_param PATH_INFO $fastcgi_script_name;
<                        include fastcgi_params;
<               }
karky7 ~ #


nginxを起動する、ポート80で動作していることを確認
karky7 ~ # /etc/init.d/nginx start
 * Checking nginx' configuration ...               [ ok ]
 * Starting nginx ...                              [ ok ]
karky7 ~ #
karky7 ~ # netstat -ln | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
karky7 ~ #


FPM-PHPが動作するか確認する

phpinfo()をDocumentRootへ配置、ブラウザからアクセスしてみる
karky7 ~ # echo '<?php phpinfo() ?>' > /var/www/localhost/htdocs/fpm-php.php
karky7 ~ #


「Server API」「FPM/FastCGI」になってるね



今度は動作検証とかApacheとどのくらい違うのか調べてみたい、Djangoもこれでイケるらしいのでもうちょっと調べてみるとする
まぁ、最後はYesodやりたいのだが...

0 件のコメント:

コメントを投稿