using fastcgi with apache http server 2...using fastcgi with apache http server 2.4 je trawick the...
TRANSCRIPT
![Page 1: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/1.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
1/97
Using FastCGI with Apache HTTP Server 2.4
Jeff Trawick
http://emptyhammock.com/
April 8, 2014
![Page 2: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/2.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
2/97
Revisions
2014-04-10Add Require expr ... to /www/tools/
configuration in More classic CGI configurationslide to resolve a potential security hole. Thankyou Eric Covener!
![Page 3: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/3.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
3/97
Get these slides...
http://emptyhammock.com/projects/info/slides.html
![Page 4: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/4.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
4/97
Table of Contents
1 The world of FastCGI
2 FastCGI with Apache httpd 2.4
3 Choosing
4 mod fcgid
5 mod proxy fcgi
6 mod authnz fcgi
7 Other tools
8 PHP Applications and FastCGI
9 Future
![Page 5: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/5.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
5/97
Introduction — Who am I?
I’ve worked at
several large corporations, for over two decadesmy own one-person company, Emptyhammock, for thelast two years
I’ve worked on
several products which were primarily based on orotherwise included Apache HTTP Serverlower-level networking productsweb applications
I’ve developed or maintained some of the FastCGIsupport in the Apache HTTP Server project.
![Page 6: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/6.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
6/97
The world of FastCGI
![Page 7: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/7.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
7/97
FastCGI
A protocol for communicating between a web server andpersistent application processes which can handle any ofseveral different phases of requests.
Implemented for most web servers.
Implemented for most programming languages and anumber of frameworks.
![Page 8: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/8.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
7/97
FastCGI
A protocol for communicating between a web server andpersistent application processes which can handle any ofseveral different phases of requests.
Implemented for most web servers.
Implemented for most programming languages and anumber of frameworks.
![Page 9: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/9.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
7/97
FastCGI
A protocol for communicating between a web server andpersistent application processes which can handle any ofseveral different phases of requests.
Implemented for most web servers.
Implemented for most programming languages and anumber of frameworks.
![Page 10: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/10.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
8/97
Fast CGI
Inputs and outputs are similar to CGI:
environment variablesCONTENT LENGTH, SCRIPT NAME, etc.
input stream for request body
output stream for response headers and body
output stream for log messages
But binary encoded on a stream socket or pipe (Windows).FastCGI process waits repeatedly for new connections.
![Page 11: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/11.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
8/97
Fast CGI
Inputs and outputs are similar to CGI:
environment variablesCONTENT LENGTH, SCRIPT NAME, etc.
input stream for request body
output stream for response headers and body
output stream for log messages
But binary encoded on a stream socket or pipe (Windows).FastCGI process waits repeatedly for new connections.
![Page 12: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/12.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
8/97
Fast CGI
Inputs and outputs are similar to CGI:
environment variablesCONTENT LENGTH, SCRIPT NAME, etc.
input stream for request body
output stream for response headers and body
output stream for log messages
But binary encoded on a stream socket or pipe (Windows).FastCGI process waits repeatedly for new connections.
![Page 13: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/13.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
8/97
Fast CGI
Inputs and outputs are similar to CGI:
environment variablesCONTENT LENGTH, SCRIPT NAME, etc.
input stream for request body
output stream for response headers and body
output stream for log messages
But binary encoded on a stream socket or pipe (Windows).FastCGI process waits repeatedly for new connections.
![Page 14: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/14.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
8/97
Fast CGI
Inputs and outputs are similar to CGI:
environment variablesCONTENT LENGTH, SCRIPT NAME, etc.
input stream for request body
output stream for response headers and body
output stream for log messages
But binary encoded on a stream socket or pipe (Windows).FastCGI process waits repeatedly for new connections.
![Page 15: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/15.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
9/97
Raw CGI
int main(int argc, char **argv)
{
extern char **environ;
/* environ is {"CONTENT_LENGTH=105",
"SCRIPT_NAME=/path/to/foo.fcgi", etc. } */
const char *cl_str;
if ((cl_str = getenv("CONTENT_LENGTH")) {
read(FILENO_STDIN,,); /* request body */
}
write(STDOUT_FILENO,,); /* response headers
* and body */
write(STDERR_FILENO,,); /* to web server log */
}
![Page 16: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/16.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
10/97
Raw FastCGI
int main(int argc, char **argv)
{
socket(); bind(); listen();
while (1) {
int cl = accept();
read(cl, buf);
|00000 0101000100080000 0001000000000000 ........ ........|
|00010 0104000100190000 090e485454505f48 ........ ..HTTP_H|
|00020 4f53543132372e30 2e302e313a383038 OST127.0 .0.1:808|
|00030 3101040001002000 000f0f485454505f 1..... . ...HTTP_|
|00040 555345525f414745 4e54417061636865 USER_AGE NTApache|
|00050 42656e63682f322e 3301040001001000 Bench/2. 3.......|
|00060 000b03485454505f 4143434550542a2f ...HTTP_ ACCEPT*/|
write(cl, buf);
|00000 01060001041a0600 436f6e74656e742d ........ Content-|
|00010 547970653a207465 78742f706c61696e Type: te xt/plain|
|00020 0a0a787878787878 7878787878787878 ..xxxxxx xxxxxxxx|
|00030 7878787878787878 7878787878787878 xxxxxxxx xxxxxxxx|
close(cl);
}
}
![Page 17: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/17.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
11/97
Raw FastCGI
How the datastream is defined:
version — 1 byte, always 1
type — 1 byte, stuff like begin-request, abort-request,params, stdin-data, stdout-data, etc.
request id — 2 byte request identifier
content length — 2 byte length of bundled data
padding length — 1 byte length of padding data
the data (0–64k bytes)
the padding (0–255 bytes)
|0101000100080000 0001000000000000 ........ ........|
|0104000100190000 090e485454505f48 ........ ..HTTP_H|
![Page 18: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/18.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
12/97
Programming support
After all, nobody would want to reinvent that protocol.
FastCGI protocol libraries are available for use with Perl,Python, Ruby, C, etc., often based on the C library fromOpen Market.Code to the API to implement a FastCGI application.With some APIs, a properly coded FastCGI app will alsowork as plain CGI.
PHP supports it transparently.
Some frameworks support it transparently.
![Page 19: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/19.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
13/97
Perl example, moving from CGI to FastCGI
CGI-only Perl script:
use CGI;
my $q = CGI->new;
$mode = $q->param(’mode’);
print $q->header(-type => ’text/html’);
print $q->start_html(’hello, world’),
$q->h1(’hello, world’),
$q->end_html;
}
Dual-mode CGI/FastCGI Perl script:
use CGI::Fast;
while (my $q = CGI::Fast->new) {
$mode = $q->param(’mode’);
print $q->header(-type => ’text/html’);
print $q->start_html(’hello, world’),
$q->h1(’hello, world’),
$q->end_html;
}
But beware of unintentionally saved state.
![Page 20: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/20.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
13/97
Perl example, moving from CGI to FastCGI
CGI-only Perl script:
use CGI;
my $q = CGI->new;
$mode = $q->param(’mode’);
print $q->header(-type => ’text/html’);
print $q->start_html(’hello, world’),
$q->h1(’hello, world’),
$q->end_html;
}
Dual-mode CGI/FastCGI Perl script:
use CGI::Fast;
while (my $q = CGI::Fast->new) {
$mode = $q->param(’mode’);
print $q->header(-type => ’text/html’);
print $q->start_html(’hello, world’),
$q->h1(’hello, world’),
$q->end_html;
}
But beware of unintentionally saved state.
![Page 21: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/21.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
13/97
Perl example, moving from CGI to FastCGI
CGI-only Perl script:
use CGI;
my $q = CGI->new;
$mode = $q->param(’mode’);
print $q->header(-type => ’text/html’);
print $q->start_html(’hello, world’),
$q->h1(’hello, world’),
$q->end_html;
}
Dual-mode CGI/FastCGI Perl script:
use CGI::Fast;
while (my $q = CGI::Fast->new) {
$mode = $q->param(’mode’);
print $q->header(-type => ’text/html’);
print $q->start_html(’hello, world’),
$q->h1(’hello, world’),
$q->end_html;
}
But beware of unintentionally saved state.
![Page 22: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/22.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
14/97
Web server support for FastCGI applications
Available for most web servers, including Apache httpd,IIS, Lighttpd, nginx, iPlanet, and others
Typically implemented as a shared library (plug-inmodule) which can be loaded if the feature is desired
![Page 23: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/23.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
15/97
History
The FastCGI protocol was originally developed in1995–1996 for a web server from Open Market, perhapsin response to the NSAPI programming model whichallowed for C language plug-ins for the Netscape (nowiPlanet once again) web server.
http://www.fastcgi.com/devkit/doc/fcgi-spec.html
One web server implementation of particular interest, alsofrom Open Market: mod fastcgi 1.0 for Apache 1.0 in1996
See the August 28, 1996 issue of Apache Week.
![Page 24: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/24.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
16/97
What happened after that?
FastCGI was great for converting existing CGIs (oftenPerl) and drastically improving performance.
But:
Native web server APIs were exploited more and more,either for existing scripting languages like Perl or newlanguages like PHP.
Apache httpd modules took off. Web developers anddeployers became accustomed to native code plug-ins.
(Surplus of C programmers?)
![Page 25: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/25.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
16/97
What happened after that?
FastCGI was great for converting existing CGIs (oftenPerl) and drastically improving performance.
But:
Native web server APIs were exploited more and more,either for existing scripting languages like Perl or newlanguages like PHP.
Apache httpd modules took off. Web developers anddeployers became accustomed to native code plug-ins.
(Surplus of C programmers?)
![Page 26: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/26.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
17/97
Native module drawbacks
Overall resource use often larger when app runs in theweb server, especially for prefork model
memoryconnections to database, LDAP, etc.
Resources are often left behind on any thread/processthat occasionally runs the application — underutilized.
Introduces instability into server (these modules can beat least as complicated as the core server)
Collisions between requirements of different modules
Generally unable to support multiple script interpreterversions
Potential lack of thread safety, or expensive locking
![Page 27: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/27.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
17/97
Native module drawbacks
Overall resource use often larger when app runs in theweb server, especially for prefork model
memoryconnections to database, LDAP, etc.
Resources are often left behind on any thread/processthat occasionally runs the application — underutilized.
Introduces instability into server (these modules can beat least as complicated as the core server)
Collisions between requirements of different modules
Generally unable to support multiple script interpreterversions
Potential lack of thread safety, or expensive locking
![Page 28: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/28.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
17/97
Native module drawbacks
Overall resource use often larger when app runs in theweb server, especially for prefork model
memoryconnections to database, LDAP, etc.
Resources are often left behind on any thread/processthat occasionally runs the application — underutilized.
Introduces instability into server (these modules can beat least as complicated as the core server)
Collisions between requirements of different modules
Generally unable to support multiple script interpreterversions
Potential lack of thread safety, or expensive locking
![Page 29: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/29.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
17/97
Native module drawbacks
Overall resource use often larger when app runs in theweb server, especially for prefork model
memoryconnections to database, LDAP, etc.
Resources are often left behind on any thread/processthat occasionally runs the application — underutilized.
Introduces instability into server (these modules can beat least as complicated as the core server)
Collisions between requirements of different modules
Generally unable to support multiple script interpreterversions
Potential lack of thread safety, or expensive locking
![Page 30: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/30.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
17/97
Native module drawbacks
Overall resource use often larger when app runs in theweb server, especially for prefork model
memoryconnections to database, LDAP, etc.
Resources are often left behind on any thread/processthat occasionally runs the application — underutilized.
Introduces instability into server (these modules can beat least as complicated as the core server)
Collisions between requirements of different modules
Generally unable to support multiple script interpreterversions
Potential lack of thread safety, or expensive locking
![Page 31: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/31.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
18/97
But with FastCGI
Often the required application thread/process count is afraction of that of the web server (so resources not leftbehind on threads/processes occasionally used).
A particular application usually can’t introduce instabilityinto the server, so basic services and other applicationsare unaffected.
Different applications can use different libraries,interpreter versions, framework versions, etc.
Independent start/stop of web server and application
Independent identity or chroot env vs. web server andother applications
![Page 32: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/32.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
18/97
But with FastCGI
Often the required application thread/process count is afraction of that of the web server (so resources not leftbehind on threads/processes occasionally used).
A particular application usually can’t introduce instabilityinto the server, so basic services and other applicationsare unaffected.
Different applications can use different libraries,interpreter versions, framework versions, etc.
Independent start/stop of web server and application
Independent identity or chroot env vs. web server andother applications
![Page 33: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/33.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
18/97
But with FastCGI
Often the required application thread/process count is afraction of that of the web server (so resources not leftbehind on threads/processes occasionally used).
A particular application usually can’t introduce instabilityinto the server, so basic services and other applicationsare unaffected.
Different applications can use different libraries,interpreter versions, framework versions, etc.
Independent start/stop of web server and application
Independent identity or chroot env vs. web server andother applications
![Page 34: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/34.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
18/97
But with FastCGI
Often the required application thread/process count is afraction of that of the web server (so resources not leftbehind on threads/processes occasionally used).
A particular application usually can’t introduce instabilityinto the server, so basic services and other applicationsare unaffected.
Different applications can use different libraries,interpreter versions, framework versions, etc.
Independent start/stop of web server and application
Independent identity or chroot env vs. web server andother applications
![Page 35: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/35.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
18/97
But with FastCGI
Often the required application thread/process count is afraction of that of the web server (so resources not leftbehind on threads/processes occasionally used).
A particular application usually can’t introduce instabilityinto the server, so basic services and other applicationsare unaffected.
Different applications can use different libraries,interpreter versions, framework versions, etc.
Independent start/stop of web server and application
Independent identity or chroot env vs. web server andother applications
![Page 36: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/36.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
19/97
Relative cost of threads
Threads that serve application requests are moreexpensive than threads that service static files or proxyrequests elsewhere.
If you run the application request on web server threads,you turn cheap threads into expensive threads.
If you run the application request on threads in dedicatedapplication processes, you have lower resourceconsumption since you’ll have fewer expensive threads.
![Page 37: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/37.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
19/97
Relative cost of threads
Threads that serve application requests are moreexpensive than threads that service static files or proxyrequests elsewhere.
If you run the application request on web server threads,you turn cheap threads into expensive threads.
If you run the application request on threads in dedicatedapplication processes, you have lower resourceconsumption since you’ll have fewer expensive threads.
![Page 38: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/38.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
19/97
Relative cost of threads
Threads that serve application requests are moreexpensive than threads that service static files or proxyrequests elsewhere.
If you run the application request on web server threads,you turn cheap threads into expensive threads.
If you run the application request on threads in dedicatedapplication processes, you have lower resourceconsumption since you’ll have fewer expensive threads.
![Page 39: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/39.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
20/97
Ummm, why are there fewer application threads?
Some requests don’t run the application (static files,pings, etc.)
When the application thread isn’t a web server thread:The application often isn’t invoked until after all or muchof the request is received by a server thread, and theapplication is relinquished before all of the response issent to the client.
Some isolation from slower clients, for better utilization ofthe expensive threads
![Page 40: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/40.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
20/97
Ummm, why are there fewer application threads?
Some requests don’t run the application (static files,pings, etc.)
When the application thread isn’t a web server thread:The application often isn’t invoked until after all or muchof the request is received by a server thread, and theapplication is relinquished before all of the response issent to the client.
Some isolation from slower clients, for better utilization ofthe expensive threads
![Page 41: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/41.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
20/97
Ummm, why are there fewer application threads?
Some requests don’t run the application (static files,pings, etc.)
When the application thread isn’t a web server thread:The application often isn’t invoked until after all or muchof the request is received by a server thread, and theapplication is relinquished before all of the response issent to the client.
Some isolation from slower clients, for better utilization ofthe expensive threads
![Page 42: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/42.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
21/97
Criticisms of FastCGI
generally troublesome implementations
just switch from mod fastcgi to mod fcgid or httpd toLighttpd or ...
more or different configuration required for theapplication
![Page 43: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/43.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
21/97
Criticisms of FastCGI
generally troublesome implementations
just switch from mod fastcgi to mod fcgid or httpd toLighttpd or ...
more or different configuration required for theapplication
![Page 44: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/44.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
22/97
Concerns for some special situations
Protocol is complex enough that unsanitized input couldexpose bugs in non-mainstream protocol support in appbut also in server
Care needed with TCP to protect access
Instant auth: Just set REMOTE USERThrow garbage at the TCP port, see what happens
AF UNIX has filesystem permissions and is system-only.
![Page 45: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/45.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
22/97
Concerns for some special situations
Protocol is complex enough that unsanitized input couldexpose bugs in non-mainstream protocol support in appbut also in server
Care needed with TCP to protect access
Instant auth: Just set REMOTE USERThrow garbage at the TCP port, see what happens
AF UNIX has filesystem permissions and is system-only.
![Page 46: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/46.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
23/97
Competitors
HTTP — If you use HTTP you can interoperate withalmost anything. But if you use HTTP you have a lot toimplement to be able to interoperate with what peoplewill throw at you.
SCGI — http://python.ca/scgi/protocol.txt
about 100 lines, so easy to implement yourself if existinglibrary support isn’t available or suitablecommonly used FastCGI capabilities, plus sendfileOne unfortunate omission: doesn’t provide a way forrouting stderr messages (integration into web server logs).
![Page 47: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/47.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
24/97
Competitors
CGI — why not, if load isn’t an issue?
AJP — not just for Java application servers
custom
These have varying infrastructure to help with processmanagement and protocol.
(And of course mod foo and JVM or CLR-based interpreters.)
![Page 48: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/48.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
25/97
Non-competitors
providers of APIs
Modules such as mod wsgi or mod php provide an APIrather than implement a well-known wire protocol such asFastCGI, HTTP, or SCGI.This can use FastCGI or other protocols. IOW, WSGI andPSGI are not competitors to FastCGI.
![Page 49: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/49.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
26/97
So when would I run the application inside httpd
Very lightweight interpreter (e.g., Lua)
Very light load that isn’t expected to increase (e.g., somenon-Internet-facing special-purpose application)
I know that I can continue to run the application insidehttpd even if the server as a whole scales up or switchesto a different MPM
![Page 50: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/50.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
26/97
So when would I run the application inside httpd
Very lightweight interpreter (e.g., Lua)
Very light load that isn’t expected to increase (e.g., somenon-Internet-facing special-purpose application)
I know that I can continue to run the application insidehttpd even if the server as a whole scales up or switchesto a different MPM
![Page 51: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/51.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
26/97
So when would I run the application inside httpd
Very lightweight interpreter (e.g., Lua)
Very light load that isn’t expected to increase (e.g., somenon-Internet-facing special-purpose application)
I know that I can continue to run the application insidehttpd even if the server as a whole scales up or switchesto a different MPM
![Page 52: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/52.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
27/97
FastCGI with Apache httpd 2.4
![Page 53: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/53.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
28/97
Primary FastCGI modules for Apache httpd 2.4
Several modules are available from the Apache HTTP Serverproject, and others are in use as well.
These can be compared based on support for key features:
Application process management
Communication mechanism
Supported FastCGI application roles
![Page 54: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/54.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
29/97
Application process management support
Can the module manage the lifecycle of FastCGI applicationprocesses, based on load and the web server lifecycle?
A module might only interact with processes it created.
A module might only interact with sockets owned byprocesses it doesn’t know about,
A module might support both models.
![Page 55: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/55.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
30/97
Communication mechanism support
What types of IPC are supported for communication with theapplication?
A module may or may not support TCP sockets.
A module may or may not support Unix sockets (on Unix,of course).
A module may or may not support local pipes (only onWindows in practice).
![Page 56: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/56.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
31/97
FastCGI role support
The FastCGI specification defines several different roles that aFastCGI application may implement:
responder roleGenerating the response body in a mannersimilar to CGI (the typical requirement)
authorizer roleDeciding whether or not the user is authorizedto access the requested resource. This generallyis implemented with httpd-specific extensions forthe three Apache httpd AAA phases.
filter roleGenerating the response body based on an extrastream of input data.
![Page 57: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/57.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
32/97
Primary FastCGI modules for Apache httpd 2.4
fcgid fastcgi proxy fcgi authnz fcgi
Manages appprocesses?
Yes Yes No No
Works withother processes?
No Yes Yes Yes
TCP? No Yes Yes Yes
Local socketsor pipes?
Yes Yes Yes(Unix)
No
Responders? Yes Yes Yes No
AAA? Yes Yes No Yes (plusproviders)
Filters? No No No No
![Page 58: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/58.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
33/97
Other FastCGI modules for Apache httpd 2.4
Kean Johnston has mentioned his work-in-progress,mod extfcgi, a couple of times on the httpd developermailing list, but it is not yet available.The unique feature planned is support for the FastCGIFILTER role.
your module here
![Page 59: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/59.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
34/97
About mod authnz fcgi...
This is not currently part of 2.4 releases; it must beobtained from httpd trunk and built separately fromhttpd.
http://svn.apache.org/viewvc/httpd/httpd/
trunk/modules/aaa/mod_authnz_fcgi.c?view=co
apxs -ci mod authnz fcgi.c
Is it production ready? It has been tested by multiple parties,but it has not been formally reviewed for merging into the2.4.x branch. I requested that last week.
![Page 60: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/60.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
35/97
About mod fastcgi...
http://www.fastcgi.com/
The latest semi-official code is a snapshot created in2009; the last release was 2.4.6 in 2007.
A reasonably-complete patch to add support for httpd2.4 is available from a third party at https://github.com/ByteInternet/libapache-mod-fastcgi.
Why is mod fastcgi still interesting? Feature set /migration headaches...
We won’t mention mod fastcgi further.
I hate that, but there hasn’t been a consolidation of patches differentpeople are using for one issue or another, resulting in frustration andwasted effort.
![Page 61: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/61.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
36/97
Choosing among the contenders
![Page 62: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/62.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
37/97
Choosing
After kicking mod fastcgi to the curb, choosing amongFastCGI implementations is very simple:
If you want something to manage the application processlifecycle in conjunction with httpd, use mod fcgid.
If you want different or more flexible application processlifecycle management, use mod proxy fcgi forresponders and use mod authnz fcgi for authorizers.
![Page 63: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/63.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
38/97
mod fcgid
mod fcgid has
mostly nice facilities for managing processes
monitoring of processes via mod status reports
mod fcgid is missing
load balancing to FastCGI processes in the usual sense
support for FastCGI apps which can handle multipleconcurrent requests or include their own processmanagement
![Page 64: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/64.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
39/97
mod proxy fcgi
Key considerations:
Pair it with mod authnz fcgi if you need to supportAUTHORIZER role
Does not currently support multiple requests perconnection (i.e., you’ll have lots of connectionestablishment, lots of sockets in certain states)
As a scheme handler for mod proxy, it shares manyfeatures with the rest of the mod proxy family, including
Load balancingI/O parametersBalancer manager
Unix socket support is a recent addition
![Page 65: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/65.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
40/97
mod authnz fcgi
Notable features beyond those typically implemented:
Supports combined authn/authz like in the FastCGI spec
Supports the modern provider configuration mechanism
Supports application delivery of the response body with afailed authn check
![Page 66: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/66.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
41/97
mod authnz fcgi limitations
Notable limitations beyond those mentioned earlier:
Does not share connections with mod proxy fcgi
Does not interoperate with mod authn socache
Does not support multiple requests per connection
Does not support the httpd access control phase
![Page 67: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/67.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
42/97
Configuration of ASF FastCGI modules
![Page 68: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/68.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
43/97
Configuration of ASF FastCGI modules — mod fcgid
![Page 69: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/69.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
44/97
Simple CGI and FastCGI configuration
Start with CGI:
Alias /fastcgi/ \
/home/trawick/ApacheCon/inst/fastcgi/
<Location /fastcgi>
Options +ExecCGI
SetHandler cgi-script
</Location>
IOW, enable the ExecCGI option and set the handlerappropriately. (ScriptAlias kind-of does that)Change the handler name to fcgid-script (mod fcgid).
![Page 70: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/70.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
45/97
More classic CGI configuration
<Location /myapp/>
AddHandler prettify txt
Action prettify /tools/prettify.pl
</Location>
<Directory /www/tools/>
Require expr %{reqenv:REDIRECT_HANDLER} == ’prettify’
Options +ExecCGI
SetHandler cgi-script
</Directory>
Again, change the handler name to fcgid-script (mod fcgid).
Note the check for the expected handler; this ensuresthat scripts in that directory are not accessible exceptvia the action configured for resources in other locations.
![Page 71: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/71.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
46/97
mod fcgid — Is that all?
It might be, unless...
default timeouts or other I/O settings aren’t okayconnect timeout, read/write timeout, hang detection
default process management isn’t okaylimits on numbers of processes, rules for shrinking thepool
minor protocol adjustments, environment variables, etc.
Additional configuration is likely except for sites with onlyrelatively simple FastCGI applications.
![Page 72: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/72.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
46/97
mod fcgid — Is that all?
It might be, unless...
default timeouts or other I/O settings aren’t okayconnect timeout, read/write timeout, hang detection
default process management isn’t okay
limits on numbers of processes, rules for shrinking thepool
minor protocol adjustments, environment variables, etc.
Additional configuration is likely except for sites with onlyrelatively simple FastCGI applications.
![Page 73: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/73.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
46/97
mod fcgid — Is that all?
It might be, unless...
default timeouts or other I/O settings aren’t okayconnect timeout, read/write timeout, hang detection
default process management isn’t okaylimits on numbers of processes, rules for shrinking thepool
minor protocol adjustments, environment variables, etc.
Additional configuration is likely except for sites with onlyrelatively simple FastCGI applications.
![Page 74: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/74.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
46/97
mod fcgid — Is that all?
It might be, unless...
default timeouts or other I/O settings aren’t okayconnect timeout, read/write timeout, hang detection
default process management isn’t okaylimits on numbers of processes, rules for shrinking thepool
minor protocol adjustments, environment variables, etc.
Additional configuration is likely except for sites with onlyrelatively simple FastCGI applications.
![Page 75: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/75.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
46/97
mod fcgid — Is that all?
It might be, unless...
default timeouts or other I/O settings aren’t okayconnect timeout, read/write timeout, hang detection
default process management isn’t okaylimits on numbers of processes, rules for shrinking thepool
minor protocol adjustments, environment variables, etc.
Additional configuration is likely except for sites with onlyrelatively simple FastCGI applications.
![Page 76: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/76.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
47/97
Hung process detection
By default, if a request does not complete within five minutesthe application will be terminated.No way to disable. Fixme.
# my report generates output over a long period of
# time; don’t kill it
FcgidBusyTimeout 3600
# kill anything that doesn’t respond within 30
# seconds
FcgidBusyTimeout 30
![Page 77: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/77.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
48/97
I/O timeouts (hung process?)
By default, if no data can be read or written within 40seconds, the application will be terminated.
# my report generates output over a long period of
# time; don’t kill it
FcgidBusyTimeout 3600
# oh, and there are long pauses between generation
# of any output
FcgidIOTimeout 300
![Page 78: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/78.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
49/97
Process management
Simple stuff:
FcgidMaxProcesses — global limit on number ofprocesses
FcgidMaxProcessesPerClass — limit on number ofprocesses per application
FcgidIdleTimeout — termination after idle for this long
FcgidMaxRequestsPerProcess — termination afterhandling this many requests
FcgidProcessLifetime — termination after alive for thislong
![Page 79: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/79.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
50/97
Tuning of process management algorithms
Spawn score: internal calculation which represents processactivity for a FastCGI application; used to determine if a newinstance (process) can be created.
# Set this high. If actual score is higher for an app,
# more instances can’t be created.
FcgidSpawnScoreUpLimit 7000
![Page 80: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/80.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
51/97
Tuning of process management algorithms
Spawn score: internal calculation which represents processactivity for a FastCGI application; used to determine if a newinstance (process) can be created.
FcgidSpawnScoreUpLimit 7000
# Default value. Each process creation adds this to the
# score.
FcgidSpawnScore 1
![Page 81: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/81.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
52/97
Tuning of process management algorithms
Spawn score: internal calculation which represents processactivity for a FastCGI application; used to determine if a newinstance (process) can be created.
FcgidSpawnScoreUpLimit 7000
FcgidSpawnScore 1
# By default, termination increases the score. But why?
# If a process goes away, create additional headroom for
# creating a replacement.
FcgidTerminationScore -1
![Page 82: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/82.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
53/97
Tuning of process management algorithms
Spawn score: internal calculation which represents processactivity for a FastCGI application; used to determine if a newinstance (process) can be created.
FcgidSpawnScoreUpLimit 7000
FcgidSpawnScore 1
FcgidTerminationScore -1
# Subtracted from the score each second.
FcgidTimeScore 3
![Page 83: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/83.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
54/97
Ugly tuning of process management algorithms
mod fcgid scans for certain conditions at configurableintervals. The default values for the intervals are quite highfor some — 120 seconds.
# Scan for processes which have exceeded idle timeout every
# second.
FcgidIdleScanInterval 0
![Page 84: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/84.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
55/97
Ugly tuning of process management algorithms
mod fcgid scans for certain conditions at configurableintervals. The default values for the intervals are quite highfor some — 120 seconds.
FcgidIdleScanInterval 0
# Scan for processes which need to be terminated every second.
FcgidErrorScanInterval 0
![Page 85: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/85.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
56/97
Ugly tuning of process management algorithms
mod fcgid scans for certain conditions at configurableintervals. The default values for the intervals are quite highfor some — 120 seconds.
FcgidIdleScanInterval 0
FcgidErrorScanInterval 0
# Scan for zombie processes every second.
# (Why don’t we just call waitpid() to see if any children
# exited?)
FcgidZombieScanInterval 0
![Page 86: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/86.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
57/97
Request body limits
mod fcgid is very aggressive in isolating the applicationfrom slow clients, to the extent that it will first read therequest body before sending to the application.
FcgidMaxRequestLen limits the amount of body thatwill be spooled; the request fails (500) if the bodyexceeds this amount.The default limit is 128K.
Set this lower if you can.
Don’t trust the common WordPress configuration instructionsthat tell you to increase this to the max (denial of service),but be aware that you may need to increase it to handle largeruploads with WordPress or any other application.
Unfortunately this is a strike against cheaper web serverthreads.
![Page 87: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/87.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
57/97
Request body limits
mod fcgid is very aggressive in isolating the applicationfrom slow clients, to the extent that it will first read therequest body before sending to the application.FcgidMaxRequestLen limits the amount of body thatwill be spooled; the request fails (500) if the bodyexceeds this amount.
The default limit is 128K.
Set this lower if you can.
Don’t trust the common WordPress configuration instructionsthat tell you to increase this to the max (denial of service),but be aware that you may need to increase it to handle largeruploads with WordPress or any other application.
Unfortunately this is a strike against cheaper web serverthreads.
![Page 88: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/88.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
57/97
Request body limits
mod fcgid is very aggressive in isolating the applicationfrom slow clients, to the extent that it will first read therequest body before sending to the application.FcgidMaxRequestLen limits the amount of body thatwill be spooled; the request fails (500) if the bodyexceeds this amount.The default limit is 128K.
Set this lower if you can.
Don’t trust the common WordPress configuration instructionsthat tell you to increase this to the max (denial of service),but be aware that you may need to increase it to handle largeruploads with WordPress or any other application.
Unfortunately this is a strike against cheaper web serverthreads.
![Page 89: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/89.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
58/97
Wrappers
a command which will run for certain requests — bycontainer or extension
typically is outside of the web space
typically is a script which encapsulates command-lineparameters and environment settings such as envvars andulimits
<Location /phpapp/>
AddHandler fcgid-script .php
Options +ExecCGI
FcgidWrapper /usr/local/bin/php-wrapper .php
</Location>
![Page 90: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/90.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
59/97
Command-specific options
Most directives apply to every app in a certain container(vhost or per-dir).FcgidCmdOptions allows many directives to be applied for asingle specific command.
FcgidCmdOptions /path/to/info.pl \
IdleTimeout 30 \
InitialEnv VHOST=www2.example.com \
IOTimeout 5 \
MaxRequestsPerProcess 10000
![Page 91: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/91.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
60/97
mod fcgid’s server status support
Jeff, this is where you show the sample server-status page.
![Page 92: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/92.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
61/97
Configuration of ASF FastCGI modules — mod proxy fcgi
![Page 93: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/93.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
62/97
Simplest mod proxy fcgi
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
ProxyPass /app/ fcgi://127.0.0.1:10080/
Not so interesting; just replace “http” in the usual patternwith “fcgi”. There’s no need for ProxyPassReverse.
![Page 94: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/94.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
63/97
Add load balancing
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
ProxyPass /app/ balancer://app-pool/
<Proxy balancer://app-pool/>
BalancerMember fcgi://127.0.0.1:10080
BalancerMember fcgi://127.0.0.1:10081
</Proxy>
Again, just replace “http” with “fcgi”.
![Page 95: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/95.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
64/97
Use Unix sockets instead
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
ProxyPass /app/ unix:/var/run/FCGI/hello|fcgi://127.0.0.1/
![Page 96: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/96.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
65/97
Add load balancing (again)
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
ProxyPass /app/ balancer://app-pool/
<Proxy balancer://app-pool/>
BalancerMember unix:/var/run/FCGI/hello1|fcgi://127.0.0.1/
BalancerMember unix:/var/run/FCGI/hello2|fcgi://127.0.0.1/
</Proxy>
![Page 97: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/97.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
66/97
Proxy examples showing important protocol data
We’ll use this configuration with a Perl FastCGI script thatspits out important variables:
ProxyPass /app1/ fcgi://127.0.0.1:10101/
ProxyPass /app2/ unix:/tmp/app2|fcgi://127.0.0.1:10102/
ProxyPass /app1a/ fcgi://127.0.0.1:10101/
<Location /app1a/>
SetEnvIf Request_URI "." proxy-fcgi-pathinfo
</Location>
![Page 98: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/98.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
67/97
The script
This is essentially printenv for FastCGI, that only printscertain variables.
#!/usr/bin/perl
use CGI::Fast;
my %dumpme = ("SCRIPT_NAME" => 1, ...);
while (my $q = CGI::Fast->new) {
print "Content-Type: text/plain\r\n\r\n";
foreach my $env (keys %ENV) {
print "env $env = $ENV{$env}\n"
if $dumpme{$env};
}
}
![Page 99: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/99.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
68/97
Running the script
$ spawn-fcgi -n -a 127.0.0.1 -p 10101 ./showenv.pl
...
$ spawn-fcgi -n -s /tmp/app2 ./showenv.pl
...
![Page 100: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/100.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
69/97
http://127.0.0.1:8080/app1/a/b/c?a=true
env SCRIPT_NAME = /app1/a/b/c
env FCGI_ROLE = RESPONDER
env GATEWAY_INTERFACE = CGI/1.1
env SERVER_PORT = 8080
env REQUEST_URI = /app1/a/b/c?a=true
env SERVER_ADDR = 127.0.0.1
env HTTP_HOST = 127.0.0.1:8080
env REQUEST_SCHEME = http
env QUERY_STRING = a=true
![Page 101: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/101.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
70/97
http://127.0.0.1:8080/app2/a/b/c?a=true
env SCRIPT_NAME = /app2/a/b/c
env FCGI_ROLE = RESPONDER
env GATEWAY_INTERFACE = CGI/1.1
env SERVER_PORT = 8080
env REQUEST_URI = /app2/a/b/c?a=true
env SERVER_ADDR = 127.0.0.1
env HTTP_HOST = 127.0.0.1:8080
env REQUEST_SCHEME = http
env QUERY_STRING = a=true
![Page 102: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/102.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
71/97
http://127.0.0.1:8080/app1a/a/b/c?a=true
env SCRIPT_NAME = /app1a
env FCGI_ROLE = RESPONDER
env GATEWAY_INTERFACE = CGI/1.1
env SERVER_PORT = 8080
env REQUEST_URI = /app1a/a/b/c?a=true
env SERVER_ADDR = 127.0.0.1
env HTTP_HOST = 127.0.0.1:8080
env PATH_INFO = /a/b/c
env REQUEST_SCHEME = http
env QUERY_STRING = a=true
![Page 103: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/103.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
72/97
Configuration of ASF FastCGI modules — mod authnz fcgi
![Page 104: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/104.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
73/97
FastCGI AUTHORIZER
This example uses the provider interface for collaboration withother providers in more complex configurations.
This is for a standard AUTHORIZER that will perform theequivalent of authentication and authorization. (It will not seeFCGI APACHE ROLE.)
AuthnzFcgiDefineProvider authnz FooAuthnz fcgi://localhost:10103/
<Location /protected/>
AuthType Basic
AuthName "Restricted"
AuthBasicProvider FooAuthnz
Require FooAuthnz
</Location>
The mod authnz fcgi documentation has extensive examples, including
FastCGI script source code which shows what information will be
available.
![Page 105: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/105.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
74/97
Managing external processes
(if you’re not using mod fcgid)
![Page 106: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/106.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
75/97
Types of tools
A couple of tools shown here only get the applicationprocesses started. They aren’t any help by themselves if theprocesses terminate unexpectedly.
A couple of other tools shown here can be used to controllifecycle (potentially with the system lifecycle) and ensureavailability by reacting when the processes terminateunexpectedly.
![Page 107: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/107.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
76/97
fcgistarter
It only supports TCP/IP sockets, and only on Unix.
In general this implements a rather basic subset offeatures in spawn-fcgi (from the Lighttpd folks).
On the bright side, it is bundled with httpd 2.4, and isthus always available for testing.
$ fcgistarter -c $PWD/TestAuthn.pl -p 10000
The path to the application is resolved after changingdirectory to /, so a fully-qualified path is required.
![Page 108: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/108.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
77/97
spawn-fcgi
Notable features beyond fcgistarter:
Unix socket support
pid file support
no-fork mode for use with higher-level programs likedaemontools
chroot, set user, set group, and other identity-relatedfeatures
and better diagnostics messages
$ spawn-fcgi -p 10000 TestAuthn.pl
![Page 109: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/109.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
78/97
daemontools
Relatively popular for managing FastCGI applications
Create a service script for the application thatdaemontools can use to up application andframework-specific envvars and start the application.
Use svc command to handle lifecycle (-u for up, -d fordown).
Example /etc/service/SERVICE-NAME/run:
#!/bin/sh
export PERL5LIB=/home/trawick/perl5/lib/perl5
cd /tmp
exec 2>&1
exec spawn-fcgi -p 10000 -u trawick -n \
/home/trawick/bin/TestAuthn.pl
![Page 110: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/110.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
79/97
supervisor a.k.a. supervisord
Broadly similar to daemontools
Can create sockets
Knows about FastCGI in particular and groups ofprocesses listening on the same socket
Example VIRTUALENV-ROOT/etc/supervisord.conf:
[supervisord]
[fcgi-program:testauthn]
command=/home/trawick/bin/TestAuthn.pl
socket=tcp://localhost:10001
process_name=%(program_name)s_%(process_num)02d
numprocs=4
user=trawick
environment=PERL5LIB=/home/trawick/perl5/lib/perl5
directory=/tmp
![Page 111: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/111.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
80/97
PHP-FPM
Part of modern PHP distributions
Configurable management of PHP FastCGI processes
php-fpm is alternative to php-cgi
pid = /var/log/httpd/php-fpm.pid
error_log = /var/log/httpd/php_error_log
log_level = debug
listen = 127.0.0.1:8081
pm = dynamic
pm.max_children = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 0
user = george
group = ringo
![Page 112: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/112.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
81/97
API/protocol adapters
![Page 113: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/113.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
82/97
API/protocol adapters
Web applications written to some standard API may need an adapterto create a FastCGI protocol endpoint.
A Django example, using flup for WSGI under the covers:
$ ./manage.py runfcgi host=127.0.0.1 port=8000
A Perl example, using plackup for PSGI:
$ plackup -s FCGI --listen /var/run/FCGI/hello hello.psgi
You’ll probably need to use this in conjunction with a moregeneral process management tool for reliability and lifecyclemanagement.
![Page 114: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/114.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
83/97
PHP Applications and FastCGI
![Page 115: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/115.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
84/97
PHP and FastCGI
Not at all uncommon...
FastCGI has long been required or recommended for PHP with
nginx
Lighttpd
Zeus
IIS
Can work fine with Apache httpd too
![Page 116: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/116.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
84/97
PHP and FastCGI
Not at all uncommon...
FastCGI has long been required or recommended for PHP with
nginx
Lighttpd
Zeus
IIS
Can work fine with Apache httpd too
![Page 117: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/117.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
85/97
PHP with mod fcgid
PHP FastCGI processes did exit after 500 requests
Now that is disabled by default with PHP-FPM
If you need to use the feature:
Synchronize mod fcgid and PHP limits to avoid 500 error.
In PHP wrapper:
PHP_FCGI_MAX_REQUESTS=10000
In PHP-FPM configuration:
pm.max_requests = 10000
In fcgid configuration:
FcgidMaxRequestsPerProcess 10000
![Page 118: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/118.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
85/97
PHP with mod fcgid
PHP FastCGI processes did exit after 500 requests
Now that is disabled by default with PHP-FPM
If you need to use the feature:
Synchronize mod fcgid and PHP limits to avoid 500 error.
In PHP wrapper:
PHP_FCGI_MAX_REQUESTS=10000
In PHP-FPM configuration:
pm.max_requests = 10000
In fcgid configuration:
FcgidMaxRequestsPerProcess 10000
![Page 119: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/119.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
85/97
PHP with mod fcgid
PHP FastCGI processes did exit after 500 requests
Now that is disabled by default with PHP-FPM
If you need to use the feature:
Synchronize mod fcgid and PHP limits to avoid 500 error.
In PHP wrapper:
PHP_FCGI_MAX_REQUESTS=10000
In PHP-FPM configuration:
pm.max_requests = 10000
In fcgid configuration:
FcgidMaxRequestsPerProcess 10000
![Page 120: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/120.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
85/97
PHP with mod fcgid
PHP FastCGI processes did exit after 500 requests
Now that is disabled by default with PHP-FPM
If you need to use the feature:
Synchronize mod fcgid and PHP limits to avoid 500 error.
In PHP wrapper:
PHP_FCGI_MAX_REQUESTS=10000
In PHP-FPM configuration:
pm.max_requests = 10000
In fcgid configuration:
FcgidMaxRequestsPerProcess 10000
![Page 121: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/121.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
86/97
mod fcgid PHP limitation
PHP FastCGI process management ineffective (wasted)with mod fcgid, which routes only single concurrentrequests to the socket of a process which it has spawned.
PHP-FPM: If you need to use this for other reasons,leave PHP child process management disabled:
pm static
pm.max_children 0
PHP-CGI:
PHP_FCGI_CHILDREN=0
![Page 122: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/122.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
87/97
mod fcgid PHP limitation
But:
With PHP process management, single cache can beused concurrently by many processes.
Without PHP child process management, PHP opcodecaches are not very effective. Cache is serially reusedwithin single process when the same fcgid-spawnedprocess handles another request.
![Page 123: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/123.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
87/97
mod fcgid PHP limitation
But:
With PHP process management, single cache can beused concurrently by many processes.
Without PHP child process management, PHP opcodecaches are not very effective. Cache is serially reusedwithin single process when the same fcgid-spawnedprocess handles another request.
![Page 124: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/124.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
88/97
mod fcgid PHP difference
PHP flags in .htaccess files — no longer respected whenyou move from mod php to FastCGI
on Windows, mod php strips the drive letter fromSCRIPT NAME; mod fcgid doesn’t
![Page 125: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/125.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
89/97
mod fcgid PHP example with PHP-CGI
.conf:
LoadModule fcgid_module modules/mod_fcgid.so
FcgidMaxRequestsPerProcess 5000
# Uncomment the following line if cgi.fix_pathinfo is set to 1 in
# php.ini:
# FcgidFixPathinfo 1
Alias /php/ /home/trawick/myhg/apache/documents/AC2012EU/php/
<Directory /home/trawick/myhg/apache/documents/AC2012EU/php/>
Options +ExecCGI
AddHandler fcgid-script .php
FcgidWrapper /home/trawick/myhg/apache/documents/AC2012EU/php-wrapper.sh .php
Require all granted
</Directory>
![Page 126: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/126.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
90/97
mod fcgid PHP example with PHP-CGI
Wrapper script:
#!/bin/sh
export PHPRC=/home/trawick/myhg/\
apache/documents/AC2012EU/
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=0
exec /usr/bin/php-cgi
and be sure to make this script executable
![Page 127: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/127.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
91/97
PHP and mod proxy fcgi
General considerations:
Use PHP-FPM — no limitations like you have withmod fcgid.
With most recent httpd 2.4.x on Unix, use Unix socketsfor better speed.
Details of configuration:
http://wiki.apache.org/httpd/PHP-FPM.
![Page 128: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/128.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
92/97
The future
![Page 129: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/129.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
93/97
Concern about mod fcgid
My 2¢...
mod fcgid’s inability to route more than one concurrentrequest per spawned process affects its viability for PHPdeployments, a traditional area of strength.
mod fcgid is not currently getting sufficient love to keepup with bug reports, or resolve long-standing limitations.A couple of more interested developers is required to keepmod fcgid moving forward.
![Page 130: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/130.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
94/97
A potentially interesting path...
Hypothetical mod XXX that can manage applicationprocesses
Process lifetime fits within that of httpdConfigured in .confSets up listening sockets or pipes if neededSame implementation, same configuration mechanism forcommand-line, ports, envvars, etc. regardless of protocol
Other modules, such as mod proxy, should be able tosymbolically reference the addresses of applicationsmanaged by mod XXX to avoid duplicating that aspectof the configuration.
![Page 131: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/131.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
95/97
A potentially interesting path...
Or...
mod XXX can issue commands to a more generalpurpose process manager like daemontools or supervisordto bring up the application processes with server startupand vice versa on server termination.
Since in this case mod XXX would not own theconfiguration for the application processes, othermod proxy or other httpd modules probably wouldn’t beable to symbolically reference aspects of theconfiguration.
![Page 132: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/132.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
96/97
More information about the ASF modules
Documentation:
http://httpd.apache.org/mod_fcgid/mod/mod_
fcgid.html
http://httpd.apache.org/docs/2.4/mod/mod_
proxy_fcgi.html
http://httpd.apache.org/docs/trunk/mod/mod_
authnz_fcgi.html
http://wiki.apache.org/httpd/PHP-FPM
Mailing lists:
User support:http://httpd.apache.org/userslist.html
Development:http://httpd.apache.org/lists.html#http-dev
![Page 133: Using FastCGI with Apache HTTP Server 2...Using FastCGI with Apache HTTP Server 2.4 Je Trawick The world of FastCGI FastCGI with Apache httpd 2.4 Choosing mod fcgid mod proxy fcgi](https://reader034.vdocuments.mx/reader034/viewer/2022051510/5fecc9ee8f59254dca4072da/html5/thumbnails/133.jpg)
Using FastCGIwith ApacheHTTP Server
2.4
Jeff Trawick
The world ofFastCGI
FastCGI withApache httpd2.4
Choosing
mod fcgid
mod proxy fcgi
mod authnz fcgi
Other tools
PHPApplicationsand FastCGI
Future
97/97
More general information
ApacheCon NA 2010 preso with more information onmod fcgid and (versus) mod fastcgi: http://people.
apache.org/~trawick/AC2010-FastCGI.pdf
ApacheCon EU 2012 preso with information oninterfacing with more types of external applicationprocesses: http://people.apache.org/~trawick/
AC2012EU-Apps.pdf