徒然メモ

技術的なことを書いたり書かなかったり

nginx+php-fpmでPHPを動かす。その3

nginxのconfファイルを設定

まずは結論から。編集した個所は以下の通り

diff nginx.conf.default nginx.conf
===============================================

2c2
< #user  nobody;
---
> user  nginx;
45c45
<             index  index.html index.htm;
---
>             index  index.html index.htm index.php;
65,71c65,71
<         #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;
<         #}
---
>         location ~* .php$ {
>             root           html;
>             fastcgi_pass   127.0.0.1:9000;
>             fastcgi_index  index.php;
>             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
>             include        fastcgi_params;
>         }
===============================================

子プロセスをnginxユーザで動くようにコメントアウトし「nginx」に変更

index.phpもindex.htmlと同じように動くように追加

バックポートでphp-fpmに動いてもらうための設定をコメントアウト

通常のHTMLファイルと同じドキュメントルート配下にあるスクリプトを見に行くように「/scripts」から「$document_root」に変更。

以上でPHPが動くようになったはずです。

あとはnginxを起動させてブラウザにURLを入れて見れるか確認するだけです。

ドキュメントルート(今回の設定だと/usr/local/nginx/html)にphpinfo.phpを設置すると問題なく表示されるはずです。

nginxの起動について

nginxの起動方法については今回の手順では以下のコマンドで可能です。

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

停止するときは

/usr/local/nginx/sbin/nginx -s stop

で停止できます。

OSのリブート時や他のサービスと同様に「/etc/init.d」配下にスクリプトをおいて管理したい場合は頑張って自分で作るかepelのSRPMから拾ってくると楽ではないかなと思います。

今回私が「/etc/init.d」配下に設置したスクリプトについてはepelのSRPMから拝借しnginx本体のPATHとconfファイルのPATHを環境に合わせたものに変更しています。

設定時に困ったこと

最初設定を行ったときにnginx.confのPHPに関する項目をコメントアウトのみ行った状態でした。

その状態でドキュメントルートにphpinfoを表示させるファイルを設置しアクセスしましたが正常に表示されず以下のようなログが延々と出ていました。

[error] 27735#0: *8 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 172.16.1.83, server: localhost, request: "GET /phpinfo.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "{サーバのIPアドレス}"

この現象にドハマリしました。なぜかというとroot           html;という項目でドキュメントルートを設定し、fastcgi_param  SCRIPT_FILENAMEではドキュメントルートからのPATHだと勝手に思い込んでいました。

その為この設定のままドキュメントルート配下にscriptsのディレクトリを作りその中にphpinfoを表示させるスクリプトを設置したりしていました。

実際はサーバの絶対パスで「/script」というディレクトリを作る必要がありその配下にスクリプトファイルを設置しないといけませんでした。これに気づかずドハマリしました。

最終的には「ハイパフォーマンスHTTPサーバ Nginx入門」という書籍を参考に現在の設定に行きつきました。

同じような現象でお悩みの方はfastcgi_param  SCRIPT_FILENAMEの項目を{スクリプトファイルが置いてあるディレクトリの絶対パス}$fastcgi_script_name;で試されてみてはどうでしょうか。

ドキュメントルートとその配下のディレクトリでということであれば今回のように$document_rootを使うのもありかもしれませんね。

nginx+php-fpmでPHPを動かす。その2

PHPのインストール

    1. ソースのダウンロード

[bash]

cd /usr/local/src

wget http://jp2.php.net/get/php-5.4.8.tar.gz/from/jp1.php.net/mirror

[/bash]

    1. ダウンロードしたファイルの解凍

[bash]

tar zxvf php-5.4.8.tar.gz

cd php-5.4.8

[/bash]

    1. コンフィグオプションの確認

[bash]

./configure –help

`configure' configures this package to adapt to many kinds of systems.

Usage: ./configure [OPTION]… [VAR=VALUE]…

To assign environment variables (e.g., CC, CFLAGS…), specify them as VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration: -h, –help              display this help and exit –help=short        display options specific to this package –help=recursive    display the short help of all the included packages -V, –version           display version information and exit -q, –quiet, –silent   do not print checking...' messages --cache-file=FILE   cache test results in FILE [disabled] -C, --config-cache      alias for–cache-file=config.cache' -n, –no-create         do not create output files –srcdir=DIR        find the sources in DIR [configure dir or `..‘]

Installation directories: –prefix=PREFIX         install architecture-independent files in PREFIX [/usr/local] –exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX [PREFIX]

By default, make install' will install all the files in /usr/local/bin', /usr/local/lib' etc.  You can specify an installation prefix other than/usr/local' using --prefix', for instance–prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories: –bindir=DIR            user executables [EPREFIX/bin] –sbindir=DIR           system admin executables [EPREFIX/sbin] –libexecdir=DIR        program executables [EPREFIX/libexec] –sysconfdir=DIR        read-only single-machine data [PREFIX/etc] –sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com] –localstatedir=DIR     modifiable single-machine data [PREFIX/var] –libdir=DIR            object code libraries [EPREFIX/lib] –includedir=DIR        C header files [PREFIX/include] –oldincludedir=DIR     C header files for non-gcc [/usr/include] –datarootdir=DIR       read-only arch.-independent data root [PREFIX/share] –datadir=DIR           read-only architecture-independent data [DATAROOTDIR] –infodir=DIR           info documentation [DATAROOTDIR/info] –localedir=DIR         locale-dependent data [DATAROOTDIR/locale] –mandir=DIR            man documentation [DATAROOTDIR/man] –docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE] –htmldir=DIR           html documentation [DOCDIR] –dvidir=DIR            dvi documentation [DOCDIR] –pdfdir=DIR            pdf documentation [DOCDIR] –psdir=DIR             ps documentation [DOCDIR]

System types: –build=BUILD     configure for building on BUILD [guessed] –host=HOST       cross-compile to build programs to run on HOST [BUILD] –target=TARGET   configure for building compilers for TARGET [HOST]

Optional Features and Packages: –disable-option-checking  ignore unrecognized –enable/–with options –disable-FEATURE       do not include FEATURE (same as –enable-FEATURE=no) –enable-FEATURE[=ARG]  include FEATURE [ARG=yes] –with-PACKAGE[=ARG]    use PACKAGE [ARG=yes] –without-PACKAGE       do not use PACKAGE (same as –with-PACKAGE=no) –with-libdir=NAME      Look for libraries in …/NAME rather than …/lib –disable-rpath         Disable passing additional runtime library search paths –enable-re2c-cgoto     Enable -g flag to re2c to use computed goto gcc extension

SAPI modules:

–with-aolserver=DIR    Specify path to the installed AOLserver –with-apxs=FILE      Build shared Apache 1.x module. FILE is the optional pathname to the Apache apxs tool apxs –with-apache=DIR     Build Apache 1.x module. DIR is the top-level Apache build directory /usr/local/apache –enable-mod-charset      APACHE: Enable transfer tables for mod_charset (Rus Apache) –with-apxs2filter=FILE optional pathname to the Apache apxs tool apxs –with-apxs2=FILE     Build shared Apache 2.0 Handler module. FILE is the optional pathname to the Apache apxs tool apxs –with-apache-hooks=FILE al pathname to the Apache apxs tool apxs –with-apache-hooks-static=DIR he build directory /usr/local/apache ache) –with-caudium=DIR    Build PHP as a Pike module for use with Caudium. DIR is the Caudium server dir /usr/local/caudium/server –disable-cli           Disable building CLI version of PHP (this forces –without-pear) –with-continuity=DIR   Build PHP as Continuity Server module. DIR is path to the installed Continuity Server root –enable-embed=TYPE   EXPERIMENTAL: Enable building of embedded SAPI library TYPE is either ‘shared’ or ‘static’. TYPE=shared –enable-fpm              Enable building of the fpm SAPI executable –with-fpm-user=USER  Set the user for php-fpm to run as. (default: nobody) –with-fpm-group=GRP  Set the group for php-fpm to run as. For a system user, this should usually be set to match the fpm username (default: nobody) –with-isapi=DIR      Build PHP as an ISAPI module for use with Zeus –with-litespeed        Build PHP as litespeed module –with-milter=DIR     Build PHP as Milter application –with-nsapi=DIR        Build PHP as NSAPI module for Netscape/iPlanet/Sun Webserver –with-phttpd=DIR       Build PHP as phttpd module –with-pi3web=DIR     Build PHP as Pi3Web module –with-roxen=DIR        Build PHP as a Pike module. DIR is the base Roxen directory, normally /usr/local/roxen/server –enable-roxen-zts        ROXEN: Build the Roxen module using Zend Thread Safety –with-thttpd=SRCDIR    Build PHP as thttpd module –with-tux=MODULEDIR    Build PHP as a TUX module (Linux only) –with-webjames=SRCDIR  Build PHP as a WebJames module (RISC OS only) –disable-cgi           Disable building CGI version of PHP

General settings:

–enable-gcov           Enable GCOV code coverage (requires LTP) - FOR DEVELOPERS ONLY!! –enable-debug          Compile with debugging symbols –with-layout=TYPE      Set how installed files will be laid out.  Type can be either PHP or GNU [PHP] –with-config-file-path=PATH Set the path in which to look for php.ini [PREFIX/lib] –with-config-file-scan-dir=PATH Set the path where to scan for configuration files –enable-sigchild       Enable PHP’s own SIGCHLD handler –enable-libgcc         Enable explicitly linking against libgcc –disable-short-tags    Disable the short-form <? start tag by default –enable-dmalloc        Enable dmalloc –disable-ipv6          Disable IPv6 support –enable-dtrace         Enable DTrace support –enable-fd-setsize     Set size of descriptor sets

Extensions:

–with-EXTENSION=shared[,PATH]

NOTE: Not all extensions can be build as ‘shared’.

Example: –with-foobar=shared,/usr/local/foobar/

o Builds the foobar extension as shared extension. o foobar package install prefix is /usr/local/foobar/

–disable-all   Disable all extensions which are enabled by default

–with-regex=TYPE       regex library type: system, php. TYPE=php WARNING: Do NOT use unless you know what you are doing! –disable-libxml        Disable LIBXML support –with-libxml-dir=DIR   LIBXML: libxml2 install prefix –with-openssl=DIR    Include OpenSSL support (requires OpenSSL >= 0.9.6) –with-kerberos=DIR     OPENSSL: Include Kerberos support –with-pcre-regex=DIR   Include Perl Compatible Regular Expressions support. DIR is the PCRE install prefix BUNDLED –without-sqlite3=DIR Do not include SQLite3 support. DIR is the prefix to SQLite3 installation directory. –with-zlib=DIR       Include ZLIB support (requires zlib >= 1.0.9) –with-zlib-dir=<DIR>   Define the location of zlib install directory –enable-bcmath         Enable bc style precision math functions –with-bz2=DIR        Include BZip2 support –enable-calendar       Enable support for calendar conversion –disable-ctype         Disable ctype functions –with-curl=DIR       Include cURL support –with-curlwrappers     EXPERIMENTAL: Use cURL for url streams –enable-dba            Build DBA with bundled modules. To build shared DBA extension use –enable-dba=shared –with-qdbm=DIR         DBA: QDBM support –with-gdbm=DIR         DBA: GDBM support –with-ndbm=DIR         DBA: NDBM support –with-db4=DIR          DBA: Oracle Berkeley DB 4.x or 5.x support –with-db3=DIR          DBA: Oracle Berkeley DB 3.x support –with-db2=DIR          DBA: Oracle Berkeley DB 2.x support –with-db1=DIR          DBA: Oracle Berkeley DB 1.x support/emulation –with-dbm=DIR          DBA: DBM support –with-tcadb=DIR        DBA: Tokyo Cabinet abstract DB support –without-cdb=DIR       DBA: CDB support (bundled) –disable-inifile         DBA: INI support (bundled) –disable-flatfile        DBA: FlatFile support (bundled) –disable-dom           Disable DOM support –with-libxml-dir=DIR   DOM: libxml2 install prefix –with-enchant=DIR     Include enchant support. GNU Aspell version 1.1.3 or higher required. –enable-exif           Enable EXIF (metadata from images) support –disable-fileinfo      Disable fileinfo support –disable-filter        Disable input filter support –with-pcre-dir           FILTER: pcre install prefix –enable-ftp            Enable FTP support –with-openssl-dir=DIR  FTP: openssl install prefix –with-gd=DIR         Include GD support.  DIR is the GD library base install directory BUNDLED –with-vpx-dir=DIR     GD: Set the path to libvpx install prefix –with-jpeg-dir=DIR     GD: Set the path to libjpeg install prefix –with-png-dir=DIR      GD: Set the path to libpng install prefix –with-zlib-dir=DIR     GD: Set the path to libz install prefix –with-xpm-dir=DIR      GD: Set the path to libXpm install prefix –with-freetype-dir=DIR GD: Set the path to FreeType 2 install prefix –with-t1lib=DIR        GD: Include T1lib support. T1lib version >= 5.0.0 required –enable-gd-native-ttf    GD: Enable TrueType string function –enable-gd-jis-conv      GD: Enable JIS-mapped Japanese font support –with-gettext=DIR    Include GNU gettext support –with-gmp=DIR        Include GNU MP support –with-mhash=DIR      Include mhash support –disable-hash          Disable hash support –without-iconv=DIR   Exclude iconv support –with-imap=DIR       Include IMAP support. DIR is the c-client install prefix ix –with-imap-ssl=DIR     IMAP: Include SSL support. DIR is the OpenSSL install prefix –with-interbase=DIR  Include InterBase support.  DIR is the InterBase base install directory /usr/interbase –enable-intl           Enable internationalization support –with-icu-dir=DIR      Specify where ICU libraries and headers can be found –disable-json          Disable JavaScript Object Serialization support –with-ldap=DIR       Include LDAP support –with-ldap-sasl=DIR    LDAP: Include Cyrus SASL support –enable-mbstring       Enable multibyte string support –disable-mbregex         MBSTRING: Disable multibyte regex support –disable-mbregex-backtrack MBSTRING: Disable multibyte regex backtrack check –with-libmbfl=DIR      MBSTRING: Use external libmbfl.  DIR is the libmbfl base install directory BUNDLED refix. If DIR is not set, the bundled oniguruma will be used –with-mcrypt=DIR     Include mcrypt support –with-mssql=DIR      Include MSSQL-DB support.  DIR is the FreeTDS home directory /usr/local/freetds –with-mysql=DIR      Include MySQL support.  DIR is the MySQL base directory, if no DIR is passed or the value is mysqlnd the MySQL native driver will be used r. If unspecified, the default locations are searched –with-zlib-dir=DIR     MySQL: Set the path to libz install prefix –with-mysqli=FILE    Include MySQLi support.  FILE is the path to mysql_config.  If no value or mysqlnd is passed as FILE, the MySQL native driver will be used –enable-embedded-mysqli  MYSQLi: Enable embedded support Note: Does not work with MySQL native driver! E. Use –with-oci8=instantclient,/path/to/instant/client/lib to use an Oracle Instant Client installation –with-adabas=DIR     Include Adabas D support /usr/local –with-sapdb=DIR      Include SAP DB support /usr/local –with-solid=DIR      Include Solid support /usr/local/solid –with-ibm-db2=DIR    Include IBM DB2 support /home/db2inst1/sqllib –with-ODBCRouter=DIR Include ODBCRouter.com support /usr –with-empress=DIR    Include Empress support $EMPRESSPATH (Empress Version >= 8.60 required) –with-empress-bcs=DIR Include Empress Local Access support $EMPRESSPATH (Empress Version >= 8.60 required) –with-birdstep=DIR   Include Birdstep support /usr/local/birdstep –with-custom-odbc=DIR Include user defined ODBC support. DIR is ODBC install base directory /usr/local. Make sure to define CUSTOM_ODBC_LIBS and have some odbc.h in your include dirs. f.e. you should define following for Sybase SQL Anywhere 5.5.00 on QNX, prior to running this configure script: CPPFLAGS=“-DODBC_QNX -DSQLANY_BUG” LDFLAGS=-lunix CUSTOM_ODBC_LIBS=“-ldblib -lodbc” –with-iodbc=DIR      Include iODBC support /usr/local –with-esoob=DIR      Include Easysoft OOB support /usr/local/easysoft/oob/client –with-unixODBC=DIR   Include unixODBC support /usr/local –with-dbmaker=DIR    Include DBMaker support –enable-pcntl          Enable pcntl support (CLI/CGI only) –disable-pdo           Disable PHP Data Objects support –with-pdo-dblib=DIR    PDO: DBLIB-DB support.  DIR is the FreeTDS home directory –with-pdo-firebird=DIR PDO: Firebird support.  DIR is the Firebird base install directory /opt/firebird –with-pdo-mysql=DIR    PDO: MySQL support. DIR is the MySQL base directory If no value or mysqlnd is passed as DIR, the MySQL native driver will be used –with-zlib-dir=DIR       PDO_MySQL: Set the path to libz install prefix –with-pdo-oci=DIR      PDO: Oracle OCI support. DIR defaults to $ORACLE_HOME. Use –with-pdo-oci=instantclient,prefix,version for an Oracle Instant Client SDK. For example on Linux with 11.2 RPMs use: –with-pdo-oci=instantclient,/usr,11.2 With 10.2 RPMs use: –with-pdo-oci=instantclient,/usr,10.2.0.4 –with-pdo-odbc=flavour,dir PDO: Support for ‘flavour’ ODBC driver. include and lib dirs are looked for under ‘dir’.

‘flavour’ can be one of:  ibm-db2, iODBC, unixODBC, generic If ‘,dir’ part is omitted, default for the flavour you have selected will used. e.g.:

–with-pdo-odbc=unixODBC

will check for unixODBC under /usr/local. You may attempt to use an otherwise unsupported driver using the “generic” flavour.  The syntax for generic ODBC support is:

–with-pdo-odbc=generic,dir,libname,ldflags,cflags

.so –with-pdo-pgsql=DIR    PDO: PostgreSQL support.  DIR is the PostgreSQL base install directory or the path to pg_config –without-pdo-sqlite=DIR PDO: sqlite 3 support.  DIR is the sqlite base install directory BUNDLED –with-pgsql=DIR      Include PostgreSQL support.  DIR is the PostgreSQL base install directory or the path to pg_config –disable-phar          Disable phar support –disable-posix         Disable POSIX-like functions –with-pspell=DIR     Include PSPELL support. GNU Aspell version 0.50.0 or higher required –with-libedit=DIR    Include libedit readline replacement (CLI/CGI only) –with-readline=DIR   Include readline support (CLI/CGI only) –with-recode=DIR     Include recode support –disable-session       Disable session support –with-mm=DIR           SESSION: Include mm support for session storage –enable-shmop          Enable shmop support –disable-simplexml     Disable SimpleXML support –with-libxml-dir=DIR     SimpleXML: libxml2 install prefix –with-snmp=DIR       Include SNMP support –with-openssl-dir=DIR  SNMP: openssl install prefix –enable-soap           Enable SOAP support –with-libxml-dir=DIR     SOAP: libxml2 install prefix –enable-sockets        Enable sockets support –with-sybase-ct=DIR  Include Sybase-CT support.  DIR is the Sybase home directory /home/sybase –enable-sysvmsg        Enable sysvmsg support –enable-sysvsem        Enable System V semaphore support –enable-sysvshm        Enable the System V shared memory support –with-tidy=DIR       Include TIDY support –disable-tokenizer     Disable tokenizer support –enable-wddx           Enable WDDX support –with-libxml-dir=DIR     WDDX: libxml2 install prefix –with-libexpat-dir=DIR   WDDX: libexpat dir for XMLRPC-EPI (deprecated) –disable-xml           Disable XML support –with-libxml-dir=DIR     XML: libxml2 install prefix –with-libexpat-dir=DIR   XML: libexpat install prefix (deprecated) –disable-xmlreader     Disable XMLReader support –with-libxml-dir=DIR     XMLReader: libxml2 install prefix –with-xmlrpc=DIR     Include XMLRPC-EPI support –with-libxml-dir=DIR     XMLRPC-EPI: libxml2 install prefix –with-libexpat-dir=DIR   XMLRPC-EPI: libexpat dir for XMLRPC-EPI (deprecated) –with-iconv-dir=DIR      XMLRPC-EPI: iconv dir for XMLRPC-EPI –disable-xmlwriter     Disable XMLWriter support –with-libxml-dir=DIR     XMLWriter: libxml2 install prefix –with-xsl=DIR        Include XSL support.  DIR is the libxslt base install directory (libxslt >= 1.1.0 required) –enable-zip            Include Zip read/write support –with-zlib-dir=DIR     ZIP: Set the path to libz install prefix –with-pcre-dir           ZIP: pcre install prefix –enable-mysqlnd        Enable mysqlnd explicitly, will be done implicitly when required by other extensions –disable-mysqlnd-compression-support Disable support for the MySQL compressed protocol in mysqlnd –with-zlib-dir=DIR       mysqlnd: Set the path to libz install prefix

PEAR:

–with-pear=DIR         Install PEAR in DIR [PREFIX/lib/php] –without-pear          Do not install PEAR

Zend:

–with-zend-vm=TYPE     Set virtual machine dispatch method. Type is one of “CALL”, “SWITCH” or “GOTO” TYPE=CALL –enable-maintainer-zts Enable thread safety - for code maintainers only!! –disable-inline-optimization If building zend_execute.lo fails, try this switch –enable-zend-signals   Use zend signal handling

TSRM:

–with-tsrm-pth=pth-config Use GNU Pth –with-tsrm-st          Use SGI’s State Threads –with-tsrm-pthreads    Use POSIX threads (default)

Libtool:

–enable-shared=PKGS  build shared libraries default=yes –enable-static=PKGS  build static libraries default=yes –enable-fast-install=PKGS  optimize for fast installation default=yes –with-gnu-ld           assume the C compiler uses GNU ld default=no –disable-libtool-lock  avoid locking (might break parallel builds) –with-pic              try to use only PIC/non-PIC objects default=use both –with-tags=TAGS      include additional configurations automatic

Some influential environment variables: CC          C compiler command CFLAGS      C compiler flags LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS        libraries to pass to the linker, e.g. -l<library> CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP         C preprocessor YACC        The Yet Another C Compiler' implementation to use. Defaults to the first program found out of:bison -y', byacc',yacc'. YFLAGS      The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. CXX         C++ compiler command CXXFLAGS    C++ compiler flags CXXCPP      C++ preprocessor

Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations.

Report bugs to the package provider.


[/bash]

    1. コンフィグ

[bash] ./configure –program-prefix= –prefix=/usr –exec-prefix=/usr –bindir=/usr/bin –sbindir=/usr/sbin –sysconfdir=/etc –datadir=/usr/share –includedir=/usr/include –libdir=/usr/lib –libexecdir=/usr/libexec –localstatedir=/var –sharedstatedir=/usr/com –mandir=/usr/share/man –infodir=/usr/share/info –cache-file=../config.cache –with-config-file-path=/etc –with-config-file-scan-dir=/etc/php.d –disable-debug –with-pic –disable-rpath –with-bz2 –with-curl –with-freetype-dir=/usr –with-png-dir=/usr –enable-gd-native-ttf –without-gdbm - –with-gettext –with-gmp –with-iconv –with-jpeg-dir=/usr –with-openssl –with-pspell –with-pcre-regex=/usr –with-zlib –with-layout=GNU –enable-exif –enable-ftp –enable-sockets –enable-sysvsem –enable-sysvshm –enable-sysvmsg –with-kerberos –with-unixODBC=shared,/usr –enable-shmop –enable-calendar –with-libxml-dir=/usr –enable-pcntl –with-imap=shared –with-imap-ssl –enable-mbstring=shared –enable-mbregex –with-gd=shared –enable-bcmath=shared –enable-dba=shared –with-db4=/usr –with-xmlrpc=shared –with-mysql=shared,/usr –with-mysqli=shared,/usr/lib/mysql/mysql_config –enable-dom=shared –with-snmp=shared,/usr –enable-soap=shared –with-xsl=shared,/usr –enable-xmlreader=shared –enable-xmlwriter=shared –enable-pdo=shared –with-pdo-odbc=shared,unixODBC,/usr –with-pdo-mysql=shared –with-pdo-sqlite=shared,/usr –enable-fpm –with-fpm-user=nginx –with-fpm-group=nginx [/bash]

※注意点 コンフィグオプションについてはmysqlに関するもの、「--enable-fpm」 「--with-fpm-user=nginx」「--with-fpm-group=nginx」以外については 仕様目的に合わせたオプションを付けてください。必用なモジュールがぬけていたりすると PHPの再コンパイルが必要になりますのでご注意ください。 またライブラリが足りないなどのエラーが出て際は適宜yum等でインストールしてください
    1. コンパイル

[bash] make ; make test [/bash]

  1. インストール [bash] make install [/bash]
  2. 設定ファイルの設置と編集php.iniをサンプルからコピーして設置する。 本番環境で推奨されるの「php.ini-production」と開発環境で推奨される 「php.ini-development」の2つがあるが今回は前者をつかう。 [bash] cp -p php.ini-production /etc/php.ini [/bash]
    date.timezoneを"Asia/Tokyo"に指定。
    [bash] vim /etc/php.ini ======================================================== date.timezone = "Asia/Tokyo" ======================================================== [bash] diff /etc/php.ini php.ini-production ======================================================== 919c919 < ;date.timezone = --- > date.timezone = "Asia/Tokyo" ======================================================== [/bash]
    mysqlのモジュールを読み込ませるための設定ファイルを追加
    [bash] mkdir /etc/php.d vim /etc/php.d/mysql.ini ======================================================== extension=mysql.so ======================================================== [/bash]
    php-fpm起動スクリプトの設置
    [bash] cp -p /usr/local/src/php-5.4.8/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm chmod 700 /etc/rc.d/init.d/php-fpm ls -l /etc/php-fpm.conf [/bash]
  3. コマンドで確認 [bash] php -v ======================================================== PHP 5.4.8 (cli) (built: Nov  3 2012 19:00:43) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies ======================================================== [/bash]
    この表示がでればとりあえずOK
  4. php-fpmの起動 [bash] /etc/init.d/php-fpm startps axuwwww |grep php-fpm ======================================================== root     25361  0.0  0.4  23164  2496 ?        Ss   14:23   0:00 php-fpm: master process (/etc/php-fpm.conf) nginx    25363  0.0  3.6  34296 18540 ?        S    14:23   0:05 php-fpm: pool www nginx    25382  0.0  3.7  35344 19252 ?        S    14:25   0:04 php-fpm: pool www nginx    25404  0.0  3.8  35920 19984 ?        S    14:25   0:04 php-fpm: pool www ======================================================== [/bash]
    3つくらいプロセスがあればOK親プロセスはroot子プロセスはnginxユーザで上がっているはず。
    [bash] netstat -nltpu ======================================================== Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      25361/php-fpm       ←これがあればとりあえずはOK tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      25293/mysqld tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      25638/nginx tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1666/sshd tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1698/sendmail udp        0      0 0.0.0.0:38659               0.0.0.0:*                               1801/avahi-daemon udp        0      0 0.0.0.0:5353                0.0.0.0:*                               1801/avahi-daemon ======================================================== [/bash]
    9000番ポートでphp-fpmがLISTENしていればOK 裏で動くものなのでローカルのみでLISTENしてればよい。
    その3へつづく

nginx+php-fpmでPHPを動かす。その1

  1. 前提

    • OS CentOS 5.8
    • PHP 5.4.8
    • nginx 1.3.8
    • 外部レポジトリ(epelやrpmforge等)を使わない
    • 以下のパッケージをあらかじめ入れておく。 [bash] yum install gcc pcre* zlib* openssl* gd* libpng* libjpeg* GeoIP* libxml* libxslt* mysql* zlib* bzip* curl* db4* gmp* freetype* libc-client-devel unixODBC-* sqlite* pspell*  pspell-devel  net-snmp* [/bash]
  2. Nginxのインストール
    1. ソースファイルのダウンロード[bash] cd /usr/local/src/ wget http://nginx.org/download/nginx-1.3.8.tar.gz [/bash]
    2. ダウンロードしたファイルの解凍 [bash] tar zxvf nginx-1.3.8.tar.gz [/bash]
    3. コンフィグオプションの確認 [bash] cd nginx-1.3.8 ./configure --help ================================================================= --help                             print this message --prefix=PATH                      set installation prefix --sbin-path=PATH                   set nginx binary pathname --conf-path=PATH                   set nginx.conf pathname --error-log-path=PATH              set error log pathname --pid-path=PATH                    set nginx.pid pathname --lock-path=PATH                   set nginx.lock pathname --user=USER                        set non-privileged user for worker processes --group=GROUP                      set non-privileged group for worker processes --builddir=DIR                     set build directory --with-rtsig_module                enable rtsig module --with-select_module               enable select module --without-select_module            disable select module --with-poll_module                 enable poll module --without-poll_module              disable poll module --with-file-aio                    enable file AIO support --with-ipv6                        enable IPv6 support --with-http_ssl_module             enable ngx_http_ssl_module --with-http_realip_module          enable ngx_http_realip_module --with-http_addition_module        enable ngx_http_addition_module --with-http_xslt_module            enable ngx_http_xslt_module --with-http_image_filter_module    enable ngx_http_image_filter_module --with-http_geoip_module           enable ngx_http_geoip_module --with-http_sub_module             enable ngx_http_sub_module --with-http_dav_module             enable ngx_http_dav_module --with-http_flv_module             enable ngx_http_flv_module --with-http_mp4_module             enable ngx_http_mp4_module --with-http_gunzip_module          enable ngx_http_gunzip_module --with-http_gzip_static_module     enable ngx_http_gzip_static_module --with-http_random_index_module    enable ngx_http_random_index_module --with-http_secure_link_module     enable ngx_http_secure_link_module --with-http_degradation_module     enable ngx_http_degradation_module --with-http_stub_status_module     enable ngx_http_stub_status_module --without-http_charset_module      disable ngx_http_charset_module --without-http_gzip_module         disable ngx_http_gzip_module --without-http_ssi_module          disable ngx_http_ssi_module --without-http_userid_module       disable ngx_http_userid_module --without-http_access_module       disable ngx_http_access_module --without-http_auth_basic_module   disable ngx_http_auth_basic_module --without-http_autoindex_module    disable ngx_http_autoindex_module --without-http_geo_module          disable ngx_http_geo_module --without-http_map_module          disable ngx_http_map_module --without-http_split_clients_module disable ngx_http_split_clients_module --without-http_referer_module      disable ngx_http_referer_module --without-http_rewrite_module      disable ngx_http_rewrite_module --without-http_proxy_module        disable ngx_http_proxy_module --without-http_fastcgi_module      disable ngx_http_fastcgi_module --without-http_uwsgi_module        disable ngx_http_uwsgi_module --without-http_scgi_module         disable ngx_http_scgi_module --without-http_memcached_module    disable ngx_http_memcached_module --without-http_limit_conn_module   disable ngx_http_limit_conn_module --without-http_limit_req_module    disable ngx_http_limit_req_module --without-http_empty_gif_module    disable ngx_http_empty_gif_module --without-http_browser_module      disable ngx_http_browser_module --without-http_upstream_ip_hash_module disable ngx_http_upstream_ip_hash_module --without-http_upstream_least_conn_module disable ngx_http_upstream_least_conn_module --without-http_upstream_keepalive_module disable ngx_http_upstream_keepalive_module --with-http_perl_module            enable ngx_http_perl_module --with-perl_modules_path=PATH      set Perl modules path --with-perl=PATH                   set perl binary pathname --http-log-path=PATH               set http access log pathname --http-client-body-temp-path=PATH  set path to store http client request body temporary files --http-proxy-temp-path=PATH        set path to store http proxy temporary files --http-fastcgi-temp-path=PATH      set path to store http fastcgi temporary files --http-uwsgi-temp-path=PATH        set path to store http uwsgi temporary files --http-scgi-temp-path=PATH         set path to store http scgi temporary files --without-http                     disable HTTP server --without-http-cache               disable HTTP cache --with-mail                        enable POP3/IMAP4/SMTP proxy module --with-mail_ssl_module             enable ngx_mail_ssl_module --without-mail_pop3_module         disable ngx_mail_pop3_module --without-mail_imap_module         disable ngx_mail_imap_module --without-mail_smtp_module         disable ngx_mail_smtp_module --with-google_perftools_module     enable ngx_google_perftools_module --with-cpp_test_module             enable ngx_cpp_test_module --add-module=PATH                  enable an external module --with-cc=PATH                     set C compiler pathname --with-cpp=PATH                    set C preprocessor pathname --with-cc-opt=OPTIONS              set additional C compiler options --with-ld-opt=OPTIONS              set additional linker options --with-cpu-opt=CPU                 build for the specified CPU, valid values: pentium, pentiumpro, pentium3, pentium4, athlon, opteron, sparc32, sparc64, ppc64 --without-pcre                     disable PCRE library usage --with-pcre                        force PCRE library usage --with-pcre=DIR                    set path to PCRE library sources --with-pcre-opt=OPTIONS            set additional build options for PCRE --with-pcre-jit                    build PCRE with JIT compilation support --with-md5=DIR                     set path to md5 library sources --with-md5-opt=OPTIONS             set additional build options for md5 --with-md5-asm                     use md5 assembler sources --with-sha1=DIR                    set path to sha1 library sources --with-sha1-opt=OPTIONS            set additional build options for sha1 --with-sha1-asm                    use sha1 assembler sources --with-zlib=DIR                    set path to zlib library sources --with-zlib-opt=OPTIONS            set additional build options for zlib --with-zlib-asm=CPU                use zlib assembler sources optimized for the specified CPU, valid values: pentium, pentiumpro --with-libatomic                   force libatomic_ops library usage --with-libatomic=DIR               set path to libatomic_ops library sources --with-openssl=DIR                 set path to OpenSSL library sources --with-openssl-opt=OPTIONS         set additional build options for OpenSSL --with-debug                       enable debug logging ================================================================= [/bash]
    4. 一通りいりそうなモジュールを組み込んでconfig [bash] ./configure --with-poll_module --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module --with-http_perl_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module [/bash] ※注意点 ここでモジュールを組み込み忘れて後から必要となった場合は再コンパイルが必要となるので注意!! その為コンフィグオプションをよく確認すること。
    5. コンパイル [bash] make [/bash]
    6. インストール [bash] make install [/bash] 以上でnginxのインストールは完了。 その2へつづきます。