Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

catalyst::manual::deployment::nginx::fastcgi(3pm) [debian man page]

Catalyst::Manual::Deployment::nginx::FastCGI(3pm)	User Contributed Perl Documentation	 Catalyst::Manual::Deployment::nginx::FastCGI(3pm)

NAME
Catalyst::Manual::Deployment::nginx::FastCGI - Deploying Catalyst with nginx nginx Catalyst runs under nginx via FastCGI in a similar fashion as the lighttpd standalone server. nginx does not have its own internal FastCGI process manager, so you must run the FastCGI service separately. Configuration To configure nginx, you must configure the FastCGI parameters and also the socket your FastCGI daemon is listening on. It can be either a TCP socket or a Unix file socket. The server configuration block should look roughly like: server { listen $port; location / { 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 SCRIPT_NAME ''; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; 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; # Adjust the socket for your applications! fastcgi_pass unix:$docroot/myapp.socket; } } It is the standard convention of nginx to include the fastcgi_params in a separate file (usually something like "/etc/nginx/fastcgi_params") and simply include that file. If you include the "/etc/nginx/fastcgi_params" that comes with your distribution, e.g. Debian, you need to adjust a couple of parameters for PSGI compatibility, use something like this: include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_NAME ''; fastcgi_param PATH_INFO $fastcgi_script_name; Non-root configuration If you properly specify the PATH_INFO and SCRIPT_NAME parameters your application will be accessible at any path. The SCRIPT_NAME variable is the prefix of your application, and PATH_INFO would be everything in addition. As an example, if your application is rooted at /myapp, you would configure: rewrite ^/myapp$ /myapp/ permanent; location /myapp/ { include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_NAME /myapp/; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_pass unix:/tmp/myapp.socket; } $fastcgi_script_name would be "/myapp/path/of/the/action". Catalyst will process this accordingly and setup the application base as expected. This behavior is somewhat different from Apache and lighttpd, but is still functional. Note that the rewrite may not be needed with newer versions of nginx, and the paths must be exactly as specified - the trailing slash in the location block and the SCRIPT_NAME are important. SSL Make sure that nginx passes this to your fastcgi. To ensure this, you need the following in your nginx config for the SSL vhost: fastcgi_param HTTPS on MORE INFO
For more information on nginx, visit: <http://nginx.net> AUTHORS
Catalyst Contributors, see Catalyst.pm COPYRIGHT
This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself. perl v5.14.2 2012-05-03 Catalyst::Manual::Deployment::nginx::FastCGI(3pm)

Check Out this Related Man Page

Plack::Handler::FCGI(3pm)				User Contributed Perl Documentation				 Plack::Handler::FCGI(3pm)

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 a FCGI::ProcManager sub-class daemonize Daemonize the process. proc-title Specify process title keep-stderr Send STDERR to STDOUT instead of the webserver backlog Maximum length of the queue of pending connections WEB SERVER CONFIGURATIONS In all cases, you will want to install FCGI and FGCI::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", 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 perl v5.14.2 2012-06-21 Plack::Handler::FCGI(3pm)
Man Page