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 startPHP-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 reload8 リンク
- nginx: http://nginx.org/
- nginx Wiki: http://wiki.nginx.org/
- PHP: http://www.php.net/
- PHP-FPM: http://php-fpm.org/
- MySQL: http://www.mysql.com/
- CentOS: http://www.centos.org/
著者について
ファルコ・ティメは、Timme Hosting (超高速 nginx ウェブホスティング) のオーナーです。彼は HowtoForge のリードメンテイナー (2005 年から) であり、ISPConfig のコア開発者の一人です (2000 年から)。また、彼は O’Reilly の書籍「Linux システム管理」にも貢献しています。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。