The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

mod_speedycgi - SpeedyCGI Apache module

DESCRIPTION

mod_speedycgi is a module for the Apache web server that interfaces to SpeedyCGI. mod_speedycgi is not required in order to run SpeedyCGI under Apache -- it's only a performance improvement. mod_speedycgi saves the web-server from having to fork/exec the speedy binary for each request.

mod_speedycgi only replaces the front-end portion of SpeedyCGI. The back-end (where perl runs) remains the same. No perl code runs within the web server itself - each perl cgi-bin continues to run in its own separate process.

INSTALLATION

You will need to have:

  • The SpeedyCGI sources, already compiled and installed (do not run "make clean").

  • The Apache 1.3.6 sources

A script is provided ("make_apache.pl") to do the apache build for you. Type "perl make_apache.pl" to use it.

If you want to install manually, do the following:

  1. Locate the path for:

        SpeedyCGI sources              (referred to as "/speedy_src")
        Apache sources                 (referred to as "/apache_src")
        Apache installation directory  (referred to as "/apache_inst")
  2. Make the speedycgi modules directory:

        mkdir /apache_src/src/modules/speedycgi
  3. Create a Makefile.tmpl file in /apache_src/src/modules/speedycgi directory that contains these lines:

        EXTRA_INCLUDES=-I/speedy_src/libspeedy
    
        #Dependencies
    
        $(OBJS) $(OBJS_PIC): Makefile
    
        # DO NOT REMOVE
  4. Extract the libspeedy.a object files into the apache sources: Make a note of the object files that were extracted -- you will need this list in step-7 below.

        cd /apache_src/src/modules/speedycgi
        ar xv /speedy_src/libspeedy/blib/arch/auto/libspeedy/libspeedy.a
  5. Copy over the mod_speedycgi.c source code:

        cp /speedy_src/apache/mod_speedycgi.c .
  6. Configure Apache:

        cd /apache_src
        ./configure --prefix=/apache_inst \
            --activate-module=src/modules/speedycgi/libspeedycgi.a \
            --disable-shared=speedycgi
  7. Fix the speedycgi Makefile.

        Edit /apache_src/src/modules/speedycgi/Makefile and change the "OBJS="
        line so it contains "mod_speedycgi.o", plus all the .o files that
        were extracted in step 4 above.
  8. Run "make" to build apache.

        cd /apache_src
        make
  9. If all looks good, install Apache with:

        make install

CONFIGURATION

You can configure mod_speedycgi to either use a certain path on the web server (similar to the way /cgi-bin works) or use files with a certain extension (similar to the way .cgi files work).

Path Configuration

In this example, the /speedy path will be setup so that scripts run under that path will use SpeedyCGI.

Add these lines near the top of your httpd.conf ("/apache_inst" is the Apache installation directory):

    Alias /speedy/ "/apache_inst/cgi-bin/"
    <Location /speedy>
        SetHandler speedycgi-script
        Options ExecCGI
        allow from all
    </Location>

If you still have the "printenv" cgi-bin script that was shipped with Apache, you should be able to test with

    http://yourwebsite/speedy/printenv

You may have to "chmod a+x printenv" to make it executable.

File Extension Configuration

In the example below, all scripts ending with ".speedy" will be set up to run under SpeedyCGI:

Add these lines near the top of your httpd.conf:

    AddHandler speedycgi-script .speedy
    <Location />
        Options ExecCGI
    </Location>

You can test by creating a small "test.speedy" script in your htdocs directory. That file should contain:

    print "Content-type: text/html\n\nMy pid is $$\n";

Make sure to "chmod a+x test.speedy", then test with the URL

    http://yourwebsite/test.speedy

Options

SpeedyCGI options can also be added to httpd.conf file. Type "perldoc CGI::SpeedyCGI" for details.

Warning

Following the above instructions may compromise the security of your web site. The security risks associated with SpeedyCGI are similar to those of regular CGI. If you don't understand the security implications of the changes above then don't make them.