Vous êtes sur la page 1sur 11

Apache FastCGI Tutorial

Release 0.9

Sbastien Lugan

April 10, 2011

CONTENTS

1 2

Prerequisites Server conguration 2.1 Installation of Apache, FastCGI module and libraries 2.2 Conguration of Apache web server . . . . . . . . . 2.3 Starting the FastCGI TCP server . . . . . . . . . . . 2.4 Killing the FastCGI TCP server . . . . . . . . . . .

1 3 3 3 4 4 5 5 5 7

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

Setting-up the FastCGI development environment 3.1 Installation of FastCGI library and headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Example FastCGI script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Testing your Apache FastCGI server

ii

CHAPTER

ONE

PREREQUISITES
This document assumes that you are currently running a Debian-based distribution, such as Debian Squeeze. The instructions given in this documentation should work with any other Debian-based distribution (other Debian releases, Ubuntu, etc.) as well but this has not been tested. Please refer to the documentation provided with your distribution if needed.

Apache FastCGI Tutorial, Release 0.9

Chapter 1. Prerequisites

CHAPTER

TWO

SERVER CONFIGURATION
2.1 Installation of Apache, FastCGI module and libraries
The following packages must be installed: apache2-mpm-prefork Apache web server itself libapache2-mod-fastcgi Apache FastCGI module libfcgi FastCGI library spawn-fcgi FastCGI process spawner Step 1 install the required packages:
# aptitude install apache2-mpm-prefork libapache2-mod-fastcgi libfcgi spawn-fcgi Note: selecting "libfcgi0ldbl" instead of the virtual package "libfcgi" The following NEW packages will be installed: apache2-mpm-prefork apache2-utils{a} apache2.2-bin{a} apache2.2-common{a} libapache2-mod-fastcgi libapr1{a} libaprutil1{a} libaprutil1-dbd-sqlite3{a} libaprutil1-ldap{a} libfcgi0ldbl spawn-fcgi 0 packages upgraded, 11 newly installed, 0 to remove and 0 not upgraded. Need to get 2405 kB of archives. After unpacking 7971 kB will be used. Do you want to continue? [Y/n/?] Y

Step 2 ensure that the Apache server is now running:


# service apache2 status Apache2 is running (pid 1628).

2.2 Conguration of Apache web server


Add the following line to your /etc/apache2/mods-available/fastcgi.conf conguration le:
FastCGIExternalServer /var/www/myFCGI -host localhost:3000

where /var/www is your DocumentRoot. Please note that /var/www/myFCGI does not need to (and actually should not) exist in your lesystem. Unlike CGI, FastCGI uses network or UNIX domain sockets to connect to the FastCGI script, not les. This directive simply indicates to the web server the location of the requests which should be handled by the FastCGI script (here: http://your.web.server/myFCGI). For example, if your original le looks like that:

Apache FastCGI Tutorial, Release 0.9

<IfModule mod_fastcgi.c> AddHandler fastcgi-script .fcgi #FastCgiWrapper /usr/lib/apache2/suexec FastCgiIpcDir /var/lib/apache2/fastcgi </IfModule>

You should change it into:


<IfModule mod_fastcgi.c> AddHandler fastcgi-script .fcgi #FastCgiWrapper /usr/lib/apache2/suexec FastCgiIpcDir /var/lib/apache2/fastcgi FastCGIExternalServer /var/www/myFCGI -host localhost:3000 </IfModule>

Dont forget to reload Apache:


# apache2ctl graceful

Your Apache web server will then connect the following URL http://your.web.server/myFCGI to a FastCGI TCP server running on localhost, port 3000.

2.3 Starting the FastCGI TCP server


Assuming that your FastCGI script is /home/httpd/fcgi-scripts/tiny-fcgi, enter the following command:
# spawn-fcgi -p 3000 -f /home/httpd/fcgi-scripts/tiny-fcgi spawn-fcgi: child spawned successfully: PID: 1818

Please note the PID of the spawned child.

2.4 Killing the FastCGI TCP server


Simply kill the spawned child. As for the previous example, the command to issue would be:
# kill 1818

Chapter 2. Server conguration

CHAPTER

THREE

SETTING-UP THE FASTCGI DEVELOPMENT ENVIRONMENT


3.1 Installation of FastCGI library and headers
The following packages must be installed: libfcgi FastCGI library libfcgi-dev FastCGI header les Install the required packages:
# aptitude install libfcgi libfcgi-dev Note: selecting "libfcgi0ldbl" instead of the virtual package "libfcgi" The following NEW packages will be installed: libfcgi-dev libfcgi0ldbl 0 packages upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 0 B/315 kB of archives. After unpacking 958 kB will be used.

3.2 Example FastCGI script


Lets consider the following trivial tiny-fcgi.c example:
#include <stdlib.h> #include <fcgi_stdio.h> int main(int argc, char **argv) { int count = 0; while(FCGI_Accept() >= 0) printf("Content-type: text/html\r\n" "\r\n" "<html><head><title>FastCGI Hello!</title></head>\n" "<body><h1>FastCGI Hello!</h1>\n" "Request number %d running on host <i>%s</i></body></html>\n", ++count, getenv("SERVER_NAME")); return 0; }

and its associated trivial Makefile:


CPPFLAGS=-std=c99 -pedantic -Wall -O3 LDFLAGS=-s -lfcgi

Apache FastCGI Tutorial, Release 0.9

Compile the script:


$ make tiny-fcgi cc -std=c99 -pedantic -Wall -O3 -s -lfcgi tiny-fcgi.c -o tiny-fcgi

and check it:


$ ./tiny-fcgi Content-type: text/html <html><head><title>FastCGI Hello!</title></head> <body><h1>FastCGI Hello!</h1> Request number 1 running on host <i>(null)</i></body></html>

You can now upload this le to your FastCGI server (e.g. in /home/httpd/fcgi-scripts/tiny-fcgi).

Chapter 3. Setting-up the FastCGI development environment

CHAPTER

FOUR

TESTING YOUR APACHE FASTCGI SERVER


Simply point your web browser to your FastCGI URL (e.g.: http://your.web.server/myFCGI). You can also use curl (you might need to install the curl package) to check your installation from a terminal:
$ curl http://localhost/myFCGI <html><head><title>FastCGI Hello!</title></head> <body><h1>FastCGI Hello!</h1> Request number 1 running on host <i>localhost</i></body></html> $ curl http://localhost/myFCGI <html><head><title>FastCGI Hello!</title></head> <body><h1>FastCGI Hello!</h1> Request number 2 running on host <i>localhost</i></body></html> $ curl http://localhost/myFCGI <html><head><title>FastCGI Hello!</title></head> <body><h1>FastCGI Hello!</h1> Request number 3 running on host <i>localhost</i></body></html>

(please note that the request number is increasing, since the very same process is answering all of the requests) Congratulations: your Apache FastCGI installation is working!

Vous aimerez peut-être aussi