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

Scientific Linux 6.3 に 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-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy

APC は、PHP 中間コードをキャッシュおよび最適化するための無料でオープンな PHP オペコードキャッシャーです。他の PHP オペコードキャッシャー、例えば eAccelerator や Xcache に似ています。PHP ページの速度を向上させるために、これらのいずれかをインストールすることを強く推奨します。

APC は以下のようにインストールできます:

yum install php-pecl-apc

次に、/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

… /var/log/php-fpm/www-error.log で PHP スクリプトをブラウザで呼び出すときに、/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; [...] |

仮想ホストは /etc/nginx/conf.d ディレクトリ内の server {} コンテナで定義されています。デフォルトの vhost ( /etc/nginx/conf.d/default.conf ) を以下のように変更します:

vi /etc/nginx/conf.d/default.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$ { root /usr/share/nginx/html; try_files $uri =404; 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$ {} ステanza です。これを有効にするためにコメントを解除します。root 行をウェブサイトのドキュメントルート (例: root /usr/share/nginx/html;) に変更してください。ゼロデイ攻撃を防ぐために、try_files $uri =404; 行を追加しました (http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP および http://forum.nginx.org/read.php?2,88845,page=3 を参照してください)。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 reload

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

vi /etc/nginx/conf.d/default.conf

| [...] location ~ \.php$ { root /usr/share/nginx/html; try_files $uri =404; 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

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

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