mod_fcgid
mod_fcgid is a high performance alternative to mod_cgi or mod_cgid, which starts a sufficient number instances of the CGI program to handle concurrent requests, and these programs remain running to handle further incoming requests.
1 wget http://mirrors.up.pt/pub/apache//httpd/mod_fcgid/mod_fcgid-2.3.9.tar.bz2
2 tar xvif mod_fcgid-2.3.9.tar.bz2
3 cd mod_fcgid-2.3.9
4 ./configure.apxs
5 make
6 make install
7 /usr/lib/httpd/modules/mod_fcgid.so
8 # /etc/httpd/httpd.conf
9 # LoadModule fcgid_module lib/httpd/modules/mod_fcgid.so
10
fcgi library
https://opensource.apple.com/source/FastCGI/FastCGI-4/fcgi/doc/fastcgi-whitepaper/fastcgi.htm
https://opensource.apple.com/source/FastCGI/FastCGI-4/fcgi/doc/fcgi-spec.html#S2
The key piece of initial state in a FastCGI process is a listening socket, through which it accepts connections from a Web server. A FastCGI application calls accept() on the socket referred to by file descriptor FCGI_LISTENSOCK_FILENO to accept a new transport connection.
- man 2 getpeername
GETPEERNAME(2) Linux Programmer's Manual GETPEERNAME(2) NAME getpeername - get name of connected peer socket SYNOPSIS #include <sys/socket.h> int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
fcgi_app.c
1 /*compile: cc fcgi_app.c -o fcgi_app -lfcgi */
2 /* /usr/lib/libfcgi.so */
3 /* cp /tmp/fcgi_app /var/www/htdocs/localhostfcgi/app.fcgi */
4
5 #include <fcgi_stdio.h>
6 void main(void)
7 {
8 int count = 0;
9 while(FCGI_Accept() >= 0) {
10 printf("Content-type: text/html\r\n");
11 printf("\r\n");
12 printf("Hello world!<br>\r\n");
13 printf("Request number %d.", count++);
14 }
15 exit(0);
16 }
/etc/httpd/vhosts.conf
/etc/httpd/httpd.conf
LoadModule fcgid_module lib/httpd/modules/mod_fcgid.so SetHandler fcgid-script Options +ExecCGI
1 lsof | grep -i fcgi
2 #app.fcgi 9803 apache 0u unix 0xe1dff440 0t0 59138 /var/run/fcgidsock/4840.1 type=STREAM
3
4 netstat -a -n | grep fcgi
5 #Active UNIX domain sockets (servers and established)
6 #Proto RefCnt Flags Type State I-Node Path
7 #unix 2 [ ACC ] STREAM LISTENING 59138 /var/run/fcgidsock/4840.1
8
9 lsof | grep -i fcgidsock
10 #app.fcgi 9803 apache 0u unix 0xe1dff440 0t0 59138 /var/run/fcgidsock/4840.1 type=STREAM
11 #x.fcgi 10044 apache 0u unix 0xe1dff700 0t0 108605 /var/run/fcgidsock/4840.7 type=STREAM
12