= mod_fcgid = * https://httpd.apache.org/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. {{{#!highlight bash wget http://mirrors.up.pt/pub/apache//httpd/mod_fcgid/mod_fcgid-2.3.9.tar.bz2 tar xvif mod_fcgid-2.3.9.tar.bz2 cd mod_fcgid-2.3.9 ./configure.apxs make make install /usr/lib/httpd/modules/mod_fcgid.so # /etc/httpd/httpd.conf # LoadModule fcgid_module lib/httpd/modules/mod_fcgid.so }}} == 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 int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen); }}} {{{#!highlight bash cd /tmp/ wget https://slackbuilds.org/slackbuilds/14.2/libraries/fcgi.tar.gz tar xvzf fcgi.tar.gz cd fcgi wget https://sourceforge.net/projects/slackbuildsdirectlinks/files/fcgi/fcgi-2.4.0.tar.gz ./fcgi.SlackBuild installpkg /tmp/fcgi-2.4.0-i486-1_SBo.tgz }}} == fcgi_app.c == {{{#!highlight c /*compile: cc fcgi_app.c -o fcgi_app -lfcgi */ /* /usr/lib/libfcgi.so */ /* cp /tmp/fcgi_app /var/www/htdocs/localhostfcgi/app.fcgi */ #include void main(void) { int count = 0; while(FCGI_Accept() >= 0) { printf("Content-type: text/html\r\n"); printf("\r\n"); printf("Hello world!
\r\n"); printf("Request number %d.", count++); } exit(0); } }}} == /etc/httpd/vhosts.conf == * http://localhostfcgi/app.fcgi {{{#!highlight xml ServerName localhostfcgi FcgidInitialEnv name value DocumentRoot "/var/www/htdocs/localhostfcgi" ScriptAlias / /var/www/htdocs/localhostfcgi/ Options +ExecCGI Require local }}} == /etc/httpd/httpd.conf == {{{ LoadModule fcgid_module lib/httpd/modules/mod_fcgid.so SetHandler fcgid-script Options +ExecCGI }}} {{{#!highlight sh lsof | grep -i fcgi #app.fcgi 9803 apache 0u unix 0xe1dff440 0t0 59138 /var/run/fcgidsock/4840.1 type=STREAM netstat -a -n | grep fcgi #Active UNIX domain sockets (servers and established) #Proto RefCnt Flags Type State I-Node Path #unix 2 [ ACC ] STREAM LISTENING 59138 /var/run/fcgidsock/4840.1 lsof | grep -i fcgidsock #app.fcgi 9803 apache 0u unix 0xe1dff440 0t0 59138 /var/run/fcgidsock/4840.1 type=STREAM #x.fcgi 10044 apache 0u unix 0xe1dff700 0t0 108605 /var/run/fcgidsock/4840.7 type=STREAM }}}