Plack::Handler::FCGI.3pm

Langue: en

Version: 2010-05-14 (ubuntu - 24/10/10)

Section: 3 (Bibliothèques de fonctions)

NAME

Plack::Handler::FCGI - FastCGI handler for Plack

SYNOPSIS

   # Run as a standalone daemon
   plackup -s FCGI --listen /tmp/fcgi.sock --daemonize --nproc 10
 
   # Run from your web server like mod_fastcgi
   #!/usr/bin/env plackup -s FCGI
   my $app = sub { ... };
 
   # Roll your own
   my $server = Plack::Handler::FCGI->new(
       nproc  => $num_proc,
       listen => $listen,
       detach => 1,
   );
   $server->run($app);
 
 

DESCRIPTION

This is a handler module to run any PSGI application as a standalone FastCGI daemon or a .fcgi script.

OPTIONS

listen
     listen => '/path/to/socket'
     listen => ':8080'
 
 

Listen on a socket path, hostname:port, or :port.

port
listen via TCP on port on all interfaces (Same as "listen => ":$port"")
leave-umask
Set to 1 to disable setting umask to 0 for socket open
nointr
Do not allow the listener to be interrupted by Ctrl+C
nproc
Specify a number of processes for FCGI::ProcManager
pid
Specify a filename for the pid file
manager
Specify a FCGI::ProcManager sub-class
daemonize
Daemonize the process.
keep-stderr
Send STDERR to STDOUT instead of the webserver

WEB SERVER CONFIGURATIONS

nginx

This is an example nginx configuration to run your FCGI daemon on a Unix domain socket and run it at the server's root URL (/).

   http {
     server {
       listen 3001;
       location / {
         set $script "";
         set $path_info $uri;
         fastcgi_pass unix:/tmp/fastcgi.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;
       }
     }
   }
 
 

If you want to host your application in a non-root path, then you should mangle this configuration to set the path to "SCRIPT_NAME" and the rest of the path in "PATH_INFO".

See <http://wiki.nginx.org/NginxFcgiExample> for more details.

Apache mod_fastcgi

You can use "FastCgiExternalServer" as normal.

   FastCgiExternalServer /tmp/myapp.fcgi -socket /tmp/fcgi.sock
 
 

See <http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html#FastCgiExternalServer> for more details.

lighttpd

To host the app in the root path, you're recommended to use lighttpd 1.4.23 or newer with "fix-root-scriptname" flag like below.

   fastcgi.server = ( "/" =>
      ((
        "socket" => "/tmp/fcgi.sock",
        "check-local" => "disable"
        "fix-root-scriptname" => "enable",
      ))
 
 

If you use lighttpd older than 1.4.22 where you don't have "fix-root-scriptname", mouting apps under the root causes wrong "SCRIPT_NAME" and "PATH_INFO" set. Also, mouting under the empty root ("") or a path that has a trailing slash would still cause weird values set even with "fix-root-scriptname". In such cases you can use Plack::Middleware::LighttpdScriptNameFix to fix it.

To mount in the non-root path over TCP:

   fastcgi.server = ( "/foo" =>
      ((
        "host" = "127.0.0.1"
        "port" = "5000"
        "check-local" => "disable"
      ))
 
 

It's recommended that your mount path does NOT have the trailing slash. If you really need to have one, you should consider using Plack::Middleware::LighttpdScriptNameFix to fix the wrong PATH_INFO values set by lighttpd.

SEE ALSO

Plack