Rip the stuff out of Engine::FastCGI in master
[catagits/Catalyst-Manual.git] / lib / Catalyst / Manual / Deployment / Apache / FastCGI.pod
index a53af03..4640be2 100644 (file)
@@ -14,6 +14,105 @@ the L<FCGI> module from cpan.
 Important Note! If you experience difficulty properly rendering pages,
 try disabling Apache's mod_deflate (Deflate Module), e.g. 'a2dismod deflate'.
 
+=head2 Apache 1.x, 2.x
+
+Apache requires the mod_fastcgi module.  The same module supports both
+Apache 1 and 2.
+
+There are three ways to run your application under FastCGI on Apache: server,
+static, and dynamic.
+
+=head3 Standalone server mode
+
+    FastCgiExternalServer /tmp/myapp.fcgi -socket /tmp/myapp.socket
+    Alias /myapp/ /tmp/myapp.fcgi/
+
+    # Or, run at the root
+    Alias / /tmp/myapp.fcgi/
+
+    # Optionally, rewrite the path when accessed without a trailing slash
+    RewriteRule ^/myapp$ myapp/ [R]
+
+
+The FastCgiExternalServer directive tells Apache that when serving
+/tmp/myapp to use the FastCGI application listenting on the socket
+/tmp/mapp.socket.  Note that /tmp/myapp.fcgi B<MUST NOT> exist --
+it's a virtual file name.  With some versions of C<mod_fastcgi> or
+C<mod_fcgid>, you can use any name you like, but some require that the
+virtual filename end in C<.fcgi>.
+
+It's likely that Apache is not configured to serve files in /tmp, so the
+Alias directive maps the url path /myapp/ to the (virtual) file that runs the
+FastCGI application. The trailing slashes are important as their use will
+correctly set the PATH_INFO environment variable used by Catalyst to
+determine the request path.  If you would like to be able to access your app
+without a trailing slash (http://server/myapp), you can use the above
+RewriteRule directive.
+
+=head3 Static mode
+
+The term 'static' is misleading, but in static mode Apache uses its own
+FastCGI Process Manager to start the application processes.  This happens at
+Apache startup time.  In this case you do not run your application's
+fastcgi.pl script -- that is done by Apache. Apache then maps URIs to the
+FastCGI script to run your application.
+
+    FastCgiServer /path/to/myapp/script/myapp_fastcgi.pl -processes 3
+    Alias /myapp/ /path/to/myapp/script/myapp_fastcgi.pl/
+
+FastCgiServer tells Apache to start three processes of your application at
+startup.  The Alias command maps a path to the FastCGI application. Again,
+the trailing slashes are important.
+
+=head3 Dynamic mode
+
+In FastCGI dynamic mode, Apache will run your application on demand,
+typically by requesting a file with a specific extension (e.g. .fcgi).  ISPs
+often use this type of setup to provide FastCGI support to many customers.
+
+In this mode it is often enough to place or link your *_fastcgi.pl script in
+your cgi-bin directory with the extension of .fcgi.  In dynamic mode Apache
+must be able to run your application as a CGI script so ExecCGI must be
+enabled for the directory.
+
+    AddHandler fastcgi-script .fcgi
+
+The above tells Apache to run any .fcgi file as a FastCGI application.
+
+Here is a complete example:
+
+    <VirtualHost *:80>
+        ServerName www.myapp.com
+        DocumentRoot /path/to/MyApp
+
+        # Allow CGI script to run
+        <Directory /path/to/MyApp>
+            Options +ExecCGI
+        </Directory>
+
+        # Tell Apache this is a FastCGI application
+        <Files myapp_fastcgi.pl>
+            SetHandler fastcgi-script
+        </Files>
+    </VirtualHost>
+
+Then a request for /script/myapp_fastcgi.pl will run the
+application.
+
+For more information on using FastCGI under Apache, visit
+L<http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html>
+
+=head3 Authorization header with mod_fastcgi or mod_cgi
+
+By default, mod_fastcgi/mod_cgi do not pass along the Authorization header,
+so modules like C<Catalyst::Plugin::Authentication::Credential::HTTP> will
+not work.  To enable pass-through of this header, add the following
+mod_rewrite directives:
+
+    RewriteCond %{HTTP:Authorization} ^(.+)
+    RewriteRule ^(.*)$ $1 [E=HTTP_AUTHORIZATION:%1,PT]
+
+
 =head4 2. Configure your application
 
     # Serve static content directly