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.