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を使うのもありかもしれませんね。