The Simple Common Gateway Interface (SCGI) is a standard for communication between web servers and application servers on the back end. It has several performance advantages over CGI. This chapter describes configuration of Lighttpd to use SCGI to communicate with a Woof! application server on the back end. The process of running Woof! as a SCGI application server is described in the chapter Running as an SCGI server.
SCGI is a standard part of the Lighttpd distribution although you may need to enable it as shown below.
This scenario makes the following assumptions:
The next step is to install Woof! for Lighttpd and SCGI using the installer script.
~/woof-dist> tclsh scripts/installer.tcl install lighttpd scgi -installdir /var/myapp
The above command will create the Woof! directory structure under /var/myapp. In particular, the /var/myapp/public will contain the publically accessible directory tree that will be the document root for the dedicated web server. The file scgi_server.tcl in that directory implements the Woof! CGI interface. The other files in the directory, including subdirectories, are intended to be directly served by Lighttpd without going through Woof! as detailed below.
Since this is the only application on the server, the document root for Lighttpd must be changed to point to the Woof! public directory by editing lighttpd.conf.
server.document-root = "/var/myapp/public"
Note that the document root points to the public subdirectory, not the Woof! root directory. By default, Lighttpd will now look under the /var/myapp/public directory to locate URL resources.
Next, SCGI has to be configured and enabled in Lighttpd. First, look for the definition of server.modules and add mod_scgi to enable SCGI. The definition will look similar to the following depending on what other modules you have configured:
server.modules = (
"mod_access"
"mod_scgi",
"mod_accesslog" )
Next we add the following SCGI configuration.
$HTTP["url"] !~ "\.[^.]+$" {
scgi.server = (
"/" =>
( "127.0.0.1" =>
(
"host" => "127.0.0.1",
"port" => 9999,
"fix-root-scriptname" => "enable",
"check-local" => "disable"
)
)
)
}
The first line enables SCGI only if the requested URL does not have an extension. The purpose of this is to serve stylesheets and images directly without going through SCGI and Woof!. There are better ways of doing this in Lighttpd 1.5 but that has not released as yet.
The remaining lines configure the host and port that the Woof! SCGI server is running on.
The setting of the variable fix-root-scriptname
is required for some versions of Lighttpd to fix a
bug
in Lighttpd when it is running a SCGI server rooted at /.
The Woof! SCGI server script that handles connections passed by Apache needs to be started whenever Apache runs. This step is actually independent of the web server and is described in Running as an SCGI server.
NOTE: Lighttpd has a mechanism to start the SCGI server through the bin-path attribute in the scgi.server definition. This mechanism will not work with the Woof! SCGI server as Lighttpd in this case will create the listening socket and pass it to the created process as file descriptor 0. Woof! on the other hand expects to create the socket itself.
Once the steps described there are done, configuration is complete. You can now move on to completing the installation.
Using SCGI as described above is not possible in a shared hosting environment if your service provider is not willing to add the SCGI module to the web server configuration. TBD - Document the cgi2scgi adapter
Woof! Version: 0.4, Server: Apache, Interface: CGI, Tcl: 8.6b1.1