GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages


Manual Reference Pages  -  PLACK::HANDLER::FCGI (3)

.ds Aq ’

NAME

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

CONTENTS

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 <B>NOTB> have the trailing slash. If you really need to have one, you should consider using Plack::Middleware::LighttpdScriptNameFix to fix the wrong <B>PATH_INFOB> 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
Search for    or go to Top of page |  Section 3 |  Main Index


perl v5.20.3 PLACK::HANDLER::FCGI (3) 2015-06-03

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.