Vediamo qui alcune configurazioni del web server più famoso, cioè "Apache", una volta installato con:
apt install apache2
oppure
yum install httpd
dobbiamo abilitare il servizio di apache attraverso ad esempio:
systemctl start apache2
una volta abilitato, possiamo leggere i log all'interno di " /var/log/apache2/":
tail -f /var/log/apache2/*
# leggo i log in runtime
la directory di default varia da distro a distro, comunque solitamente è in "/var/www" oppure in "/srv/www/htdocs", ma potrebbe essere anche in altre directory. Il file di configurazione di apache2 è in "/etc/apache2", anche in questo caso varia da distro a distro ma è o "apache2.conf" o "httpd.conf" Vediamo ora alcune configurazioni comuni.
Siccome configurazioni diverse possono essere in file diversi è bene eseguire dei "grep -nir configurazioneCercata" per cercare le configurazioni.
Apache mantiene i file di configurazione nella directory /etc/,
ad ogni modo è possibile avere dei file di configurazione per
directory, chiamati ".htaccess", l'utilizzo di questi file è
consigliato solo se non si hanno i permessi di accesso all'intero
server, in quanto implica degli slow down significativi alla
navigazione, questi file potrebbero ad esempio essere utilizzati
da servizi di hosting quando ci viene fornita solo una directory
all'interno di un server. Quindi nel momento in cui abbiamo
accesso completo al server le impostazioni che dovremmo mettere
nel file .htaccess le andiamo a mettere nelle varie sezioni <Directory>
dei file di ocnfigurazione principali. Ad ogni modo
l'utilizzo dei file ".htaccess" deve essere permesso comunque
dalla configurazione principale di Apache (i.e., quella nei file
/etc/), l'opzione che disabilita questa impostazione è:
AllowOverride None
# disabilito l'utilizzo dei file .htaccess
# all'interno della directory a cui fa parte questa
# configurazione
per abilitare l'utilizzo dei file ".htaccess" invece dobbiamo avere:
AllowOverride All
# abilito l'utilizzo dei file .htaccess
# all'interno della directory a cui fa parte questa
# configurazione
Basta aggiungere nel file di configurazione di apache in una
delle <Directory>
e facciamo:
<Directory "/var/www/html">
# Show directory listing, and allow symbolic links
Options Indexes FollowSymLinks
# With the following option we impose that configuration cannot be overriden with .htaccess files.
AllowOverride None
# With the following options we controls who can get stuff from this server
Order allow,deny
Allow from all
</Directory>
Possiamo all'interno di una configurazione <Directory>
includere il modulo "mod_rewrite.c" e gestire redirections, ad
esempio:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule (.*) webroot/ [L]
</IfModule>
in questo caso (.*)
significa qualsiasi stringa
in questo caso ad ogni richiesta redirigo alla directory webroot/, il flag "[L]" serve ad indicare che questa è una richiesta "last", cioè eseguita questa le eventuali prossime richieste non devono essere eseguite, questa è equivalente ad un " break;" in altri linguaggi di programmazione, per le rewrite rule, il primo parametro è un regular expression e la seconda è un indirizzo a cui redirigere, il terzo campo è composto dagli eventuali flag.
In questo caso si utilizzano le condizioni "RewriteCond", la meccanica è questa, se tutte le rewrite condition sono vere (bisogna considerarle in AND logico) allora viene eseguita l'istruzione successiva "RewriteRule". In pratica quello che avviene è, se la risorsa richiesta non è un file e non è una directory (cioè se non esiste) allora si esegue la rewrite rule, in questo caso si esegue lo script chiamato "script.php".
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ script.php [PT,L]
</IfModule>
Possiamo cercare la porta su cui è in ascolto apache eseguendo nella directory in cui sono contenuti i file di configurazione di apache:
grep -nir listen
Possiamo mettere apache in ascolto su un'altra porta attraverso:
l'opzione Listen
che ci permette di bindare Apache ad un indirizzo IP
e poera specifica. Possiamo ad esempio mettere in ascolto apache
sulla porta 8000 con il seguente pezzo di configurazione:
Listen 8000
Per impostare virtual host localmente (ad esempio per testare diverse web applications in locale), allora innanzitutto dobbiamo assegnare a "localhost" (i.e., 127.0.0.1) i vari nomi dei domini, quindi nel file "/etc/hosts" andremo a scrivere:
127.0.0.1 myfirstwebapp
127.0.0.1 mysecondwebapp
127.0.0.1 mythirdwebapp
una volta scritti questi, nella configurazione di apache principale, quella dove sono segnati i "localhost", ad esempio su debian in "/etc/apache2/sites-enabled/000-default.conf" e qui dovremo avere una configurazione del tipo:
<VirtualHost *:80>
# Con ServerName impostiamo il nome del dominio
ServerName myfirstwebapp
# Con DocumentRoot impostiamo la directory in cui è contenuta la web app
DocumentRoot /var/www/html/myfirst
</VirtualHost>
<VirtualHost *:80>
ServerName mysecondwebapp
DocumentRoot /var/www/html/mysecond
</VirtualHost>
<VirtualHost *:80>
ServerName mythirdwebapp
DocumentRoot /var/www/html/mythirdandlast
</VirtualHost>
la configurazione è identica per siti web hostati sullo stesso webserver, ricordiamo che i virtual host sono supportati dalla versione 1.1 dell'HTTP.
E' possibile effettuare benchmark e debugging attraverso il
programma ab
.
E' possibile effettuare debugging in modo piu' avanzato utilizzando
il programma siege
.