Nginx 設定 · 3 min read · Jan 31, 2026

CentOS 6.2 に Nginx と PHP5 (および PHP-FPM) と MySQL サポートをインストールする - ページ 2

5 PHP5 のインストール

Nginx で PHP5 を PHP-FPM を通じて動作させることができます (PHP-FPM (FastCGI プロセスマネージャ) は、特に忙しいサイトに役立つ追加機能を備えた代替 PHP FastCGI 実装です)。次のように、php-cli や MySQL を PHP スクリプトから使用するために必要な php-mysql などの PHP5 モジュールと一緒に php-fpm をインストールできます:

yum install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-eaccelerator php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy

次に、/etc/php.ini を開いて cgi.fix_pathinfo=0 を設定します:

vi /etc/php.ini

| [...] ; cgi.fix_pathinfo は CGI に対して *実際の* PATH_INFO/PATH_TRANSLATED サポートを提供します。PHP の ; 以前の動作は PATH_TRANSLATED を SCRIPT_FILENAME に設定し、PATH_INFO が何であるかを理解しませんでした。 ; PATH_INFO についての詳細は cgi スペックを参照してください。これを 1 に設定すると、PHP CGI は ; スペックに準拠するようにパスを修正します。ゼロに設定すると、PHP は以前のように動作します。 ; デフォルトは 1 です。スクリプトを修正して PATH_TRANSLATED ではなく SCRIPT_FILENAME を使用する必要があります。 ; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |

(なぜこれを行う必要があるのかを知るには http://wiki.nginx.org/Pitfalls をお読みください。)

その上、次のようなエラーを避けるために:

[08-Aug-2011 18:07:08] PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CEST/2.0/DST' instead in /usr/share/nginx/html/info.php on line 2

…ブラウザで PHP スクリプトを呼び出すときに /var/log/php-fpm/www-error.log に表示される場合、/etc/php.ini で date.timezone を設定する必要があります:

| [...] [Date] ; 日付関数で使用されるデフォルトのタイムゾーンを定義します ; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone date.timezone = "Europe/Berlin" [...] |

システムの正しいタイムゾーンを確認するには、次のコマンドを実行します:

cat /etc/sysconfig/clock
[root@server1 nginx]# cat /etc/sysconfig/clock  
ZONE="Europe/Berlin"  
[root@server1 nginx]#

次に、php-fpm のシステム起動リンクを作成し、起動します:

chkconfig --levels 235 php-fpm on  
/etc/init.d/php-fpm start

PHP-FPM はポート 9000 で FastCGI サーバを実行するデーモンプロセスです (init スクリプトは /etc/init.d/php-fpm です)。

6 nginx の設定

nginx の設定は /etc/nginx/nginx.conf にあり、今開きます:

vi /etc/nginx/nginx.conf

設定は理解しやすいです (詳細についてはここを参照してください: http://wiki.codemongers.com/NginxFullExample とここ: http://wiki.codemongers.com/NginxFullExample2)

まず (これはオプションです)、ワーカープロセスの数を増やし、keepalive_timeout を適切な値に設定できます:

| [...] worker_processes 4; [...] keepalive_timeout 2; [...] |

仮想ホストは server {} コンテナ内で定義されます。デフォルトの vhost (同じく /etc/nginx/nginx.conf にあります) を次のように修正します:

| [...] server { listen 80; server_name _; #charset koi8-r; #access_log logs/host.access.log main; location / { root /usr/share/nginx/html; index index.php index.html index.htm; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } # サーバエラーページを静的ページ /50x.html にリダイレクトします # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # PHP スクリプトを 127.0.0.1:80 でリッスンしている Apache にプロキシします # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # PHP スクリプトを 127.0.0.1:9000 でリッスンしている FastCGI サーバに渡します # location ~ \.php$ { try_files $uri =404; root /usr/share/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; } # .htaccess ファイルへのアクセスを拒否します。Apache のドキュメントルートが # nginx のものと一致する場合 # location ~ /\.ht { deny all; } } [...] |

servername ; はこれをデフォルトのキャッチオール vhost にします (もちろん、ここに www.example.com のようなホスト名を指定することもできます)。

location / 部分では、index 行に index.php を追加しました。root /usr/share/nginx/html; はドキュメントルートが /usr/share/nginx/html ディレクトリであることを意味します。

PHP にとって重要な部分は location ~ .php$ {} スタンスです。これを有効にするにはコメントを解除してください。root 行をウェブサイトのドキュメントルート (例: root /usr/share/nginx/html;) に変更してください。fastcgi_param 行を fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; に変更することを確認してください。そうしないと、PHP インタープリタはブラウザで呼び出す PHP スクリプトを見つけることができません ($document_root は /usr/share/nginx/html に変換されます。これは私たちがドキュメントルートとして設定したものです)。

PHP-FPM はデフォルトで 127.0.0.1 のポート 9000 でリッスンしているため、nginx に 127.0.0.1:9000 に接続するように指示します。fastcgi_pass 127.0.0.1:9000; の行です。また、PHP-FPM を Unix ソケットを使用するように設定することも可能です - これは第 7 章で説明します。

ファイルを保存して nginx をリロードします:

/etc/init.d/nginx reload

次に、ドキュメントルート /usr/share/nginx/html に次の PHP ファイルを作成します…

vi /usr/share/nginx/html/info.php

| |

今、ブラウザでそのファイルを呼び出します (例: http://192.168.0.100/info.php):

ご覧の通り、PHP5 は動作しており、Server API 行に示されているように FPM/FastCGI を通じて動作しています。さらに下にスクロールすると、MySQL モジュールを含む、すでに PHP5 で有効になっているすべてのモジュールが表示されます:

7 PHP-FPM を Unix ソケットを使用するように設定

デフォルトでは PHP-FPM は 127.0.0.1 のポート 9000 でリッスンしています。TCP のオーバーヘッドを回避するために、PHP-FPM を Unix ソケットを使用するように設定することも可能です。これを行うには、/etc/php-fpm.d/www.conf を開きます…

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

…そして listen 行を次のように変更します:

| [...] ;listen = 127.0.0.1:9000 listen = /tmp/php5-fpm.sock [...] |

次に PHP-FPM を再起動します:

/etc/init.d/php-fpm restart

次に、nginx の設定とすべての vhosts を確認し、行 fastcgi_pass 127.0.0.1:9000; を fastcgi_pass unix:/tmp/php5-fpm.sock; に変更します。例えば、次のように:

vi /etc/nginx/nginx.conf

| [...] location ~ \.php$ { try_files $uri =404; root /usr/share/nginx/html; fastcgi_pass unix:/tmp/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } [...] |

最後に nginx をリロードします:

/etc/init.d/nginx reload

8 リンク

著者について

ファルコ・ティメは、Timme Hosting (超高速 nginx ウェブホスティング) のオーナーです。彼は HowtoForge のリードメンテイナー (2005 年から) であり、ISPConfig のコア開発者の一人です (2000 年から)。また、彼は O’Reilly の書籍「Linux システム管理」にも貢献しています。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。