Izrada hit-critical web site-ova koristeći mod_perl
description
Transcript of Izrada hit-critical web site-ova koristeći mod_perl
![Page 1: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/1.jpg)
Izrada hit-critical web site-ova koristeći mod_perl
Vlatko KošturjakHULK Našice & HrOpen
HrOpen
![Page 2: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/2.jpg)
Što koristiti?
ApachePerlmod_perl
![Page 3: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/3.jpg)
Zašto Apache?
Po NetCraft-u jedan od najzastupljenijih web servera
izrazito nadogradiv i konfigurabilanraspoloživ za gotovo sve platformeotvoren izvorni kodbesplatanteško da će nestati
![Page 4: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/4.jpg)
Zašto PERL?
Izrazito brzIzrazito nadogradivObjektanMoćanPortabilanRaspoloživ izvorni kod
![Page 5: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/5.jpg)
Zašto mod_perl?
kompajliranje on-demandmogućnost pisanja Apache modula
mogućnost pisanja handlera za svaki dio korisničkog zahtjeva
mogućnost skriptne konfiguracijebrzina uz fleksibilnost
![Page 6: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/6.jpg)
Instalacija Apache-a i mod_perl-a
Pomoću paketa na Linux distribucijama pomoću paketa
(deb, rpm, …) na *BSD-ovima pomoću paketnih
programa (pkg_add)Iz izvornog kodaPomoću Apache Toolbox-a
![Page 7: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/7.jpg)
Instalacija na već postojećem Apache-u
Instaliranje kao tipičnog PERL modulaPerl Makefile.pl makemake testmake install
![Page 8: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/8.jpg)
Kako Apache radi?
WEB preglednikWEB
poslužitelj(APACHE)
Zahtjev
Odgovor
![Page 9: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/9.jpg)
Pogled u međusobnu komunikaciju
GET /index.php3 HTTP/1.1Host: www.linux.hr
HTTP/1.1 200 OKDate: Tue, 13 March 2001 13:16:02 GMTServer: Apache/1.3.12 (Linux) mod_perl/1.13Last-Modified: Wed, 11 Feb 2001 21:05:25 GMTContent-Length: 892Connection: closeContent-type: text/html
<HTML>…
![Page 10: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/10.jpg)
Implementacija jednostavnog Web klijenta
#!/usr/bin/perl
use IO::Socket;
$host = "www.linux.hr";
$remote = IO::Socket::INET->new (
Proto => "tcp",
PeerAddr => $host,
PeerPort => "http(80)",
);
![Page 11: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/11.jpg)
Web klijent II
unless ($remote) { die "cannot connect to $host" }
$remote->autoflush(1);
print $remote "GET /index.php3 HTTP/1.1\nHost: www.linux.hr\n\n";
while (<$remote>) { print }
-close $remote;
![Page 12: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/12.jpg)
Izlazni kodovi web poslužitelja
200 OK404 NOT FOUND500 INTERNAL SERVER ERROR403 FORBIDDEN405 METHOD NOT ALLOWED301 MOVED PERMANENTLY302 MOVED TEMPORARY
![Page 13: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/13.jpg)
Životni ciklus Apache-a
Krug zahtjeva Krug zahtjeva Krug zahtjeva
Umiranje djetetaUmiranje djeteta Umiranje djeteta
Podizanje poslužitelja
Inicij. modula
Inicij. djeteta Inicij. djeteta Inicij. djeteta
![Page 14: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/14.jpg)
Krug zahtjeva(Request loop)
REQUEST
(wait) Post-Read req.
URI translation
Header parsing
Access control
Authentication
Authorization
MIME type check
fixupsRESPONSE
logging
cleanup
![Page 15: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/15.jpg)
Hit-Critical site-ovi
Optimizacija već postojećih PERL web site-ova pisanih kao CGI skripte
Kako početi pisati hit-critical web site-ove optimizirano pomoću PERL modula
![Page 16: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/16.jpg)
Optimizacija već postojećih PERL site-ova
Regularna optimizacija Optimizacija SQL upitaDodatne mod_perl optimizacije
![Page 17: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/17.jpg)
hello.cgi
#!/usr/local/bin/perl
print “Content-type: text/html\n\n”;
print “<HTML>\n”;print “Hello World\n”;print “</HTML>\n”;
![Page 18: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/18.jpg)
Regularna optimizacija
Optimizacija kao i kod regularnih programa Optimizacija kritičnih dijelova Zakon optimizacije: “Najmanji kod ne
mora biti i najbrži!”
![Page 19: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/19.jpg)
Primjer regularne optimizacije
$sum=1;for ($i=1;$i<=$num;$i+
+){
$sum=$sum*$i;}
$sum=1;$sum=$SUM_FOR_200 if
($num==200)else{
for ($i=1;$i<$num;$i++){
$sum=$sum*$i;}
}
![Page 20: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/20.jpg)
Optimizacija SQL upita
Smanjiti broj SQL upita ako je moguće
Zatražiti u upitu samo ona polja koja su potrebna
Pohraniti ih u polje, a ne hash
![Page 21: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/21.jpg)
Primjer optimizacije SQL upita
SELECT * FROM addressbook;
fetch_hashref();
SELECT name,tel FROM addressbook;
fetch_array();
![Page 22: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/22.jpg)
Dodatne mod_perl optimizacije
Pomoću Apache::Registry-aDodavanjem u Apache konfiguraciju:
Alias /perl /usr/local/apache/perl/<Location /perl>
SetHandler perl-scriptPerlHandler Apache::RegistryPerlSendHeader OnOptions +ExecCGI
</Location>
![Page 23: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/23.jpg)
Izrada novog web site-a:
Napraviti plan site-aTreba skicirati i izabrati što će
biti kritično Primjer: Kod pretraživača će biti
kritično samo pretraživanje, a ne i unošenje
Odlučiti što treba ubrzati i kako
![Page 24: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/24.jpg)
Pisanje PERL handlera
package hropen::primjer;
sub handler {
my $r=shift;
return STATUS_CODE;
}
1;
![Page 25: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/25.jpg)
STATUS_CODE
OKDECLINEDDONESERVER_ERRORNOT_FOUNDBAD_REQUESTUNAUTHORIZED
![Page 26: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/26.jpg)
Hello Worldpackage hropen::hello;
use strict;use Apache::Constants qw (:common);
sub handler {my $r=shift
$r->content_type(‘text/html’);
![Page 27: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/27.jpg)
Hello World II
$r->send_http_header;$r->print (<<END);
<HTML>Hello World</HTML>END
return OK;}
1;
![Page 28: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/28.jpg)
Hello World III
Dodati u apache konfiguraciju:
<Location /hropen/hello>SetHandler perl-scriptPerlHandler hropen::hello
</Location>
![Page 29: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/29.jpg)
Hello World u C-u I
#include "httpd.h"
#include "http_config.h"
#include "http_core.h"
#include "http_log.h"
#include "http_protocol.h"
static int hello_handler (request_rec *r)
{
![Page 30: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/30.jpg)
Hello World u C-u II
r->content_type = "text/html";
ap_send_http_header(r);
hostname = ap_get_remote_host (r->connection,r->per_dir_config,REMOTE_NAME);
ap_rputs("<HTML><HEAD>\n",r);
ap_rputs("<TITLE>Hello</TITLE>\n",r);
ap_rputs("</HEAD><BODY>\n",r);
ap_rprintf(r,"Hello %s\n",hostname);
ap_rputs("</BODY></HTML>\n”,r);
return OK;
}
![Page 31: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/31.jpg)
Hello World u C-u III
static handler_rec hello_handlers[] =
{
{"hello-handler", hello_handler},{NULL}
};
module MODULE_VAR_EXPORT hello_module =
{
STANDARD_MODULE_STUFF,
NULL, /* module init */
NULL, /* per-dir config creator */
NULL, /* dir config merger */
NULL, /* server config creator */
NULL, /* server config merger */
NULL, /* command table
![Page 32: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/32.jpg)
Hello World u C-u IV
hello_handlers, /* content handlers */
NULL, /* URI-to-filename translation */
NULL, /* check/validate user_id */
NULL, /* check access by host adr */
NULL, /* MIME type checker/setter */
NULL, /* fixups */
NULL, /* logger */
NULL, /* header parser */
NULL, /* process init */
NULL, /* process exit/cleanup */
NULL /* post read_request handling */
};
![Page 33: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/33.jpg)
Statičko kompajliranje
./configure --activate-module=src/module/site/chello.c --enable-module=hello
make
![Page 34: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/34.jpg)
Dinamičko kompajliranje
Korištenjem Apache Extension Tool-a (apxs-a):
/usr/local/apache/bin/apxs -c -i -a chello.c
![Page 35: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/35.jpg)
Hello World sa prenošenjem parametara I
package hropen::phello;
use Apache();use Apache::Constants qw(:common);
sub handler { my $r = shift; my %params = $r->method eq 'POST' ? $r->content : $r-
>args; my $user = $params{'user'} || 'nepoznati';
$r->content_type('text/html'); $r->send_http_header();
![Page 36: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/36.jpg)
Hello World sa prenošenjem II
$r->print (<<END);
<HTML>Pozdrav $user <BR><FORM METHOD=POST><INPUT NAME=user MAXSIZE=40 LENGTH=40><INPUT TYPE=submit VALUE="promjeni"></FORM</HTML>END
![Page 37: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/37.jpg)
Hello World sa prenošenjem III
return OK;}
1;
![Page 38: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/38.jpg)
Hello World sa prenošenjem IV
Unos u konfiguraciju Apache-a:
<Location /hropen/phello> SetHandler perl-script Perlhandler hropen::phello</Location>
![Page 39: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/39.jpg)
Dodatne optimizacije SQL upita koristeći mod_perl
Korištenje stalnih (persistant) veza prema bazi:
use Apache::DBI();
$DBH||=DBI->connect($data_source, $user, $password);
![Page 40: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/40.jpg)
Primjer pisanja PERL-a u konfiguraciji
Dodajemo direktno u Apache konfiguraciju:
<Perl>my $hostname=`hostname`;$user=“nobody”;$user=“www-data” if $hostname
=~/^debian/;$user=“httpd” if $hostname =~/^redhat/;</Perl>
![Page 41: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/41.jpg)
Primjer pisanja Virtual Host-ova pomoću PERL-a
$VirtualHost{‘192.168.3.15’}=[{
ServerName => “jedan.test.hr”,
ServerAdmin => “[email protected]”,
DocumentRoot => “/home/httpd/html”
},
{
ServerName => “jedan.test.hr”,
ServerAdmin => “[email protected]”,
DocumentRoot => “/home/httpd/html”
}
]
![Page 42: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/42.jpg)
Negativne strane mod_perla
Slabo raširenTeško da neki ISP pruža
mod_perl uslugeTeško da neki ISP podržava
mod_perl uopće
![Page 43: Izrada hit-critical web site-ova koristeći mod_perl](https://reader034.fdocuments.net/reader034/viewer/2022051418/56815140550346895dbf5ae6/html5/thumbnails/43.jpg)
PITANJA...