A FastCGI abban különbözik a CGI-től, hogy amíg a CGI egy kérésre egy folyamatot hoz létre a szerveren, a FastCGI újbóli futásra képes, újbóli betöltődés nélkül, ezáltal több kérést tud kiszolgálni egységnyi idő alatt, tehát nagyobb teljesítményt lehet vele elérni. Részletek itt https://en.wikipedia.org/wiki/FastCGI.
Ha ilyet szeretnénk fejleszteni, először is installánunk kell az alapból nem telepített FastCGI Apache modul-t. Modul leírás itt https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html. Ez az alábbi módon lehetséges.
root@gergo1:~# apt-get install libapache2-mod-fcgid
Majd nézzük a /etc/apache2/mods-enabled/fcgid.conf
configurációs file tartlamát.
<IfModule mod_fcgid.c> FcgidConnectTimeout 20 <IfModule mod_mime.c> AddHandler fcgid-script .fcgi </IfModule> </IfModule>
Ezután hozzuk létre az első, perl nyelvű counter.pl.fcgi
programocskát a cgi-bin
könyvtárunkban.
#!/usr/bin/perl use FCGI; my $count = 0; my $request = FCGI::Request(); while($request->Accept() >= 0) { print("Content-type: text/html\r\n\r\n", ++$count); }
Látható, hogy az FCGI kérés többször lefuthat. Ha ezt az oldalt pl. hétszer frissítjük böngészőben a http://localhost/cgi-bin/counter.pl.fcgi cím alatt, akkor egy 7-es számot fog kiírni. 🙂
Megjegyzem, ha nincs az FCGI modul telepítve a perl-en belül, akkor a cpan paranccsal tudjuk ezt megtenni. A CPAN a perl csomagkezelője https://www.cpan.org/.
Most nézzük a mod_perl
implementációt is! Először is szükségünk lesz az Apache modulra.
root@gergo1:~# apt-get -y install libapache2-mod-perl
Ezután nézzük meg a /etc/apache2/conf-available/mod_perl.conf konfigurációs állományt.
# create new # for example, set PerlRun mode under the "/var/www/perl" PerlSwitches -w PerlSwitches -T Alias /perl /var/www/perl <Directory /var/www/perl> AddHandler perl-script .cgi .pl PerlResponseHandler ModPerl::PerlRun PerlOptions +ParseHeaders Options +ExecCGI </Directory> <Location /perl-status> SetHandler perl-script PerlResponseHandler Apache2::Status Require ip 127.0.0.1 10.0.0.0/24 </Location>
Majd az “élesítő” parancsokat.
root@gergo1:~# a2enconf mod_perl
Enabling conf mod_perl.
To activate the new configuration, you need to run:
systemctl reload apache2
root@gergo1:~# systemctl reload apache2
Végül írjuk meg a perl programunkat counter-mod_perl.cgi
néven.
#!/usr/bin/perl use strict; use warnings; print "Content-type: text/html\n\n"; my $a = 0; &number($a); sub number { my($a) = @_; $a++; print "number \$a = $a"; }
Ez a kis programocska a http://localhost/perl/counter-mod_perl.cgi cím alatt annyit ír ki, hogy number $a = 1. 🙂
A dokumentáció szerint (https://perl.apache.org/start/index.html) egy pici változtatással 100x-os sebességnövekedést érhetünk el a script-nél (https://perl.apache.org/start/tips/registry.html). Ezt meg is fogjuk mérni a következő fejezetben! 🙂
Alias /perl /var/www/perl <Directory /var/www/perl> AddHandler perl-script .cgi .pl # comment out PerlRun mode and add Registry mode like follows #PerlResponseHandler ModPerl::PerlRun PerlResponseHandler ModPerl::Registry PerlOptions +ParseHeaders Options +ExecCGI </Directory>
A mod_perl implementáció esetén az Apache szerverünk a kódot a memóriában tartja, és ott “fordítja”, ezért gyorsabb.