NAME
cgi-fcgi - bridge from CGI to FastCGI SYNOPSIS
cgi-fcgi -f cmdPath cgi-fcgi -bind -connect connName cgi-fcgi -start -connect connName appPath [nServers] cgi-fcgi -connect connName appPath [nServers] DESCRIPTION
cgi-fcgi is a CGI/1.1 program that communicates with an already-running FastCGI application in order to respond to an HTTP request. cgi-fcgi is also capable of starting a FastC- GI
application. When you invoke cgi-fcgi as cgi-fcgi -f cmdPath then cgi-fcgi opens the file at cmdPath and reads its arguments from that file. cgi-fcgi will skip lines that begin with the comment character #. The first non-comment line should contain valid arguments in one of the other three forms. The -f form of cgi-fcgi is designed for Unix systems whose exec(2) family of system calls supports the execution of command interpreter files. For instance, if a file with execute permission contains the text #! /bin/cgi-fcgi -f -connect /httpd/root/sock/app /httpd/root/bin/app the effect is the same as executing /bin/cgi-fcgi -connect /httpd/root/sock/app /httpd/root/bin/app When you invoke cgi-fcgi as cgi-fcgi -bind -connect connName the connName argument is either the path name of a Unix do- main listening socket or a host:port pair. If connName contains a colon, it is assumed to be host:port. cgi-fcgi performs a connect(2) using connName. If the connect succeeds, cgi- fcgi forwards the CGI environment variables and stdin data to the FastCGI application, and forwards the stdout and stderr data from the application to cgi-fcgi's stdout (most likely connected to a Web server). When the FastCGI application signals the end of its response, cgi-fcgi flushes its buffers and exits, and the Web server completes the http response. When you invoke cgi-fcgi as cgi-fcgi -start -connect connName appPath [nServers] then cgi-fcgi performs the function of starting one or more FastCGI application processes. The connName argument speci- fies either the path name of the Unix domain listening socket that cgi-fcgi will create, or is "localhost:NNN" where NNN is the port number of the TCP/IP listening socket that cgi-fcgi will create on the local machine. (cgi-fcgi will not create processes on remote machines.) After cgi-fcgi creates the listening socket, it forks nServers copies of a process running the executable file appPath. If nServers is omitted, the effect is as if the value ";1" had been specified. The processes share the single listen- ing socket. When you invoke cgi-fcgi as cgi-fcgi -connect connName appPath [nServers] cgi-fcgi performs -bind and then, if necssary, performs -start and repeats the -bind. That is, cgi-fcgi first operates as if the command had been cgi-fcgi -bind -connect connName If the connect fails, cgi-fcgi tries cgi-fcgi -start -connect connName appPath [nServers] and finally retries cgi-fcgi -bind -connect connName In this form, cgi-fcgi does not support TCP/IP connections. ENVIRONMENT VARIABLES
The usual CGI ones, but they are not interpreted by cgi-fc- gi. SEE ALSO
FGCI_accept(3) BUGS
cgi-fcgi doesn't generate useful HTTP responses in case of error, and it generates no response at all when run as start-fcgi. On Digital UNIX 3.0 systems the implementation of Unix Do- main sockets does not work when such sockets are stored on NFS file systems. Symptom: cgi-fcgi may core dump or may exit with status 38. Work-around: store sockets in local file systems (/tmp often works) or use TCP/IP. On AIX systems the implementation of listening sockets does not support socket sharing, and the standard FastCGI application libraries can't synchronize access to AIX lis- tening sockets. Work-around: Don't use the nServers argument on AIX. HISTORY
Copyright (c) 1996 Open Market, Inc. See the file "LICENSE.TERMS" for information on usage and redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. $Id: cgi-fcgi.1,v 1.1.1.1 1997/09/16 15:36:26 stanleyg Exp $