[11] httpd – mod_perl

18 stycznia 2022 Wyłączono przez Adam [zicherka] Nogły

Zainstalujemy teraz [mod_perl], który uczyni skrypty Perla’a szybsze w działaniu.

[1] Zainstaluj [mod_Perl]

#zainstaluj z EPEL
[root@vlsr01 ~]# dnf --enablerepo=epel -y install mod_perl

[2] Skonfiguruj [PerlRun], który umieści zawsze interpreter Perl’a w pamięci RAM.

[root@vlsr01 ~]# mcedit /etc/httpd/conf.d/perl.conf

#linia 15: od komentuj (sprawdź ostrzeżenia w logach)
PerlSwitches -w
#linia 24 odkomentuj
PerlSwitches -T
#linie 30-36: od komentuj jak poniżej
Alias /perl /var/www/perl
<Directory /var/www/perl>
#pliki wykonywalne Perl’a w tym katalogu
SetHandler perl-script
# ustaw specyficzne ustawienia jeśli nie chcesz przetwarzać wszystkich plików jako CGI
AddHandler perl-script .cgi
#PerlResponseHandler ModPerl::Registry
#dodaj tą linię aby wskazać tryb PerlRun
PerlResponseHandler ModPerl::PerlRun
PerlOptions +ParseHeaders
Options +ExecCGI
</Directory>

#linie 44-49: od komentuj i dodaj jak poniżej (dla strony statusowej)
<Location /perl-status>
SetHandler perl-script
PerlResponseHandler Apache2::Status
#ustaw uprawnienia dostępu jakie chcesz
Require ip 127.0.0.1 192.168.0.0/16
#    Order deny,allow
#    Deny from all
#    Allow from .example.com
</Location>

[root@vlsr01 ~]# systemctl restart httpd

[3] Stwórz testowy skrypt Perl’a.

[root@vlsr01 ~]# mkdir /var/www/perl

[root@vlsr01 ~]# mcedit /var/www/perl/test-mod_perl.cgi

#!/usr/bin/perl

use strict;
use warnings;

print "Content-type: text/html\n\n";

my $a = 0;
&number();

sub number {
    $a++;
    print "numer \$a = $a \n";
}

[root@vlsr01 ~]# chmod 705 /var/www/perl/test-mod_perl.cgi
[root@vlsr01 ~]# curl -k https://www.zicher.lab/perl/test-mod_perl.cgi
numer $a = 1

[4] Skonfiguruj tryby rejestru, który ma wykonywać kody w pamięci RAM.

[root@vlsr01 ~]# mcedit /etc/httpd/conf.d/perl.conf

Alias /perl /var/www/perl
<Directory /var/www/perl>
#    SetHandler perl-script
    AddHandler perl-script .cgi
#włącz tę linię aby wykonywać kody w pamięci RAM
    PerlResponseHandler ModPerl::Registry
#zakomentuj
#    PerlResponseHandler ModPerl::PerlRun
    PerlOptions +ParseHeaders
    Options +ExecCGI
</Directory>

[root@vlsr01 ~]# systemctl restart httpd

[5] Dostęp do skryptu testowego, który jest przykładem w sekcji [3], następnie zmienna zwiększa się przez przeładowanie, ponieważ zmienna jest buforowana w pamięci RAM. Konieczna jest więc edycja kodu trybu Rejestru.

[root@vlsr01 ~]# curl -k https://www.zicher.lab/perl/test-mod_perl.cgi
numer $a = 1
[root@vlsr01 ~]# curl -k https://www.zicher.lab/perl/test-mod_perl.cgi
numer $a = 2
[root@vlsr01 ~]# curl -k https://www.zicher.lab/perl/test-mod_perl.cgi
numer $a = 3

[root@vlsr01 ~]# mcedit /var/www/perl/test-mod_perl.cgi

#!/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 "numer \$a = $a \n";
}

[root@vlsr01 ~]# curl -k https://www.zicher.lab/perl/test-mod_perl.cgi
numer $a = 1
[root@vlsr01 ~]# curl -k https://www.zicher.lab/perl/test-mod_perl.cgi
numer $a = 1
[root@vlsr01 ~]# curl -k https://www.zicher.lab/perl/test-mod_perl.cgi
numer $a = 1

[6] Można podejrzeć status [mod_perl] poprzez dostęp do [(adres IP lub nazwa hosta)/perl-status].