Provided by: libplack-perl_1.0039-1_all bug

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 => [ $port_or_socket ],
             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  either  a  FCGI::ProcManager subclass, or an actual FCGI::ProcManager-compatible object.  If
           you do not want a FCGI::ProcManager but instead run in a single process, set this to undef.

             use FCGI::ProcManager::Dynamic;
             Plack::Handler::FCGI->new(
                 manager => FCGI::ProcManager::Dynamic->new(...),
             );

       daemonize
           Daemonize the process.

       proc-title
           Specify process title

       keep-stderr
           Send psgi.errors to STDERR instead of to the FCGI error stream.

       backlog
           Maximum length of the queue of pending connections

   WEB SERVER CONFIGURATIONS
       In all cases, you will want to install FCGI and FCGI::ProcManager.  You may find it  most  convenient  to
       simply install Task::Plack which includes both of these.

       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  SERVER_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

       After installing "mod_fastcgi", you should add  the  "FastCgiExternalServer"  directive  to  your  Apache
       config:

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

         ## Then set up the location that you want to be handled by fastcgi:

         # EITHER from a given path
         Alias /myapp/ /tmp/myapp.fcgi/

         # OR at the root
         Alias / /tmp/myapp.fcgi/

       Now you can use plackup to listen to the socket that you've just configured in Apache.

         $  plackup -s FCGI --listen /tmp/myapp.sock psgi/myapp.psgi

       The  above  describes  the  "standalone"  method, which is usually appropriate.  There are other methods,
       described in more detail  at  "Standalone_server_mode"  in  Catalyst::Engine::FastCGI  (with  regards  to
       Catalyst, but which may be set up similarly for Plack).

       See   also   <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", mounting apps under the
       root  causes  wrong "SCRIPT_NAME" and "PATH_INFO" set. Also, mounting 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.

   Authorization
       Most  fastcgi  configuration  does  not  pass "Authorization" headers to "HTTP_AUTHORIZATION" environment
       variable    by    default    for    security    reasons.    Authentication     middleware     such     as
       Plack::Middleware::Auth::Basic  or Catalyst::Authentication::Credential::HTTP requires the variable to be
       set up. Plack::Handler::FCGI supports extracting the "Authorization"  environment  variable  when  it  is
       configured that way.

       Apache2 with mod_fastcgi:

         --pass-header Authorization

       mod_fcgid:

         FcgiPassHeader Authorization

   Server::Starter
       This  plack  handler  supports Server::Starter as a superdaemon.  Simply launch plackup from start_server
       with a path option.  The listen option is ignored when launched from Server::Starter.

         start_server --path=/tmp/socket -- plackup -s FCGI app.psgi

SEE ALSO

       Plack

perl v5.20.2                                       2015-12-06                          Plack::Handler::FCGI(3pm)