Plack::Server::FCGI(3)

SYNOPSIS
    my $server = Plack::Server::FCGI->new(
        nproc  => $num_proc,
        listen => $listen,
        detach => 1,
    );
    $server->run($app);

Starts the FastCGI server. If $listen is set, then it specifies a location to listen for FastCGI requests;

  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

pidfile
    Specify a filename for the pid file

manager
    Specify a FCGI::ProcManager sub-class

detach
    Detach from console

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

Host in the root path:

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

Or in the non-root path over TCP:

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

Plack::Server::FCGI has a workaround for lighttpd's weird "SCRIPT_NAME" and "PATH_INFO" setting when you set check-local to "disable" so both configurations (root or non-root) should work fine.