ちょっとnginxでFastCGIを使ってみたくなってnginx with fastCGIのドキュメントを読んでみた。
spawn-fcgiを使ってがんばるみたいなドキュメントしかなくてよくわからない。
そういえばplackでできたようなと思ってcpanを調べてみるとそれらしきモジュールがあった。
1. まずはドキュメント通りにnginx設定ファイルを用意。
nginx.conf
worker_processes 1; events { worker_connections 1024; } http { server { location / { set $script ""; set $path_info $uri; fastcgi_pass unix:/tmp/fcgi.sock; fastcgi_param SCRIPT_NAME $script; fastcgi_param PATH_INFO $path_info; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param REQUEST_URI $request_uri; fastcgi_param SEREVR_PROTOCOL $server_protocol; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; } } }
2. FastCGIスクリプトを用意。(ドキュメントのコードにlistenするport or socketと立ち上げるプロセス数をオプションで取れるようにしただけ)
hello.psgi
use strict; use warnings; use Getopt::Long; use Plack::Handler::FCGI; my $port_or_sock = "/tmp/fcgi.sock"; my $num_proc = 1; GetOptions("listen=s" => \$port_or_sock, "nproc=i" => \$num_proc); my $app = sub { return [ 200, ['Content-Type' => 'text/html'], ["Hello, World!!!"] ]; }; my $server = Plack::Handler::FCGI->new( nproc => $num_proc, listen => [ $port_or_sock ], detach => 1, ); $server->run($app);
3. nginxを起動する
$ sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
4. FastCGIスクリプトをplackupで起動する
$ plackup -s FCGI --listen /tmp/fcgi.sock --daemonize \ --nproc 32 /usr/local/nginx/fcgi/hello.psgi
たったこれだけでhttp://localhost/を見るとHello, World!!!が表示される。
うーむ、FastCGIの知識ゼロでここまで簡単に使えちゃうとはPlack恐るべし。