先日の

/etc/nginx/nginx.conf

に以下を他の location ディレクティブと同列に配置してみるとする。 ex) 例えば location / { … } と同列に。

1
2
3
4
5
6
7
        location ~ \.php$ {
            root   /path/to/example.com/DocumentRoot;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
  • /etc/nginx/fastcgi_params
  • /etc/nginx/fastcgi.conf

と関連するファイルがある。

差分を見てみると

1
2
3
4
5
6
7
8
9
diff -u /etc/nginx/fastcgi.conf /etc/nginx/fastcgi_params
--- /etc/nginx/fastcgi.conf     2011-04-22 19:33:27.000000000 +0900
+++ /etc/nginx/fastcgi_params   2011-04-14 02:52:13.000000000 +0900
@@ -1,5 +1,4 @@

-fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
 fastcgi_param  QUERY_STRING       $query_string;
 fastcgi_param  REQUEST_METHOD     $request_method;
 fastcgi_param  CONTENT_TYPE       $content_type;

fastcgi_param SCRIPT_FILENAMEの記述有無だけのようだ。 今回は nginx.conf へ

1
2
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;

がすでに記述されているため問題ないってこった。 httpd.conf 的に考えると

1
ScriptAlias /cgi-bin/ "$document_root/cgi-bin/"

1
2
3
4
<Directory "$document_root/"
    Options +ExecCGI
    ...
</Directory>

のような違いだろうか、と考えた。 さてさてこの状態で

1
/usr/local/nginx/sbin/nginx -s reload

と決め

/path/to/example.com/DocumentRoot/fastcgitest.php

1
2
<?php
phpinfo();

を配置し、以下へブラウザでアクセスしたところで、

表示はされねえ。

FcgiExampleJa - Nginx CommunityFastCGIプロセスを生成する にはこうある。

1
2
3
4
5
ApacheやLighttpdと違い、NginxはFCGIプロセスを自動的には生成しません。
そのためFCGIプロセスは別途実行させる必要があります。 
FCGIを実行するにはいくつか方法がありますが、幸運なことに PHP5 には環境変数 PHP_FCGI_CHILDREN で指定しただけ自動的に生成してくれる機能があります。
このため、単純に "php -b 127.0.0.1:9000" と手動で実行したり、
以下のような init script をつくるだけで大丈夫です。 

へー、つって当該ページ下部のスクリプトをみると、よくある起動スクリプトなんですけど、 ちっとばかし別件作業が発生するようです。

start-stop-daemonってなんぞや

実行すると指定したプログラムをデーモン化ができちゃうってわけっすね。

を参考にした。一番簡単だったのは start-stop-daemonをCentOSで使う - りっぷる開発記録さんの手順でした。コンパイルしてパス通ってるところに配置しろってわけです。 僕も例に習って /usr/sbin/start-stop-daemon としています。

であとは件の起動スクリプトを /etc/init.d/php-fcgi なんて感じで設定して、

1
/etc/init.d/php-fcgi start

とすれば、 http://exmaple.com/fastcgitest.php

で phpinfo(); 出力が確認できるようになります。