The Falcot Corp administrators decided to use the Apache HTTP server, included in Debian Wheezy at version 2.2.22.
11.2.1. Installare Apache
In via predefinita installare il pacchetto apache2 causa l'installazione della versione apache2-mpm-worker di Apache. Il pacchetto apache2 è un guscio vuoto, serve unicamente ad assicurare che una delle versioni di Apache sia installata.
The differences between the variants of Apache 2 are concentrated in the policy used to handle parallel processing of many requests; this policy is implemented by an MPM (short for Multi-Processing Module). Among the available MPMs, apache2-mpm-worker uses threads (lightweight processes), whereas apache2-mpm-prefork uses a pool of processes created in advance (the traditional way, and the only one available in Apache 1.3). apache2-mpm-event also uses threads, but they are terminated earlier, when the incoming connection is only kept open by the HTTP keep-alive feature.
The Falcot administrators also install libapache2-mod-php5 so as to include the PHP support in Apache. This causes apache2-mpm-worker to be removed, and apache2-mpm-prefork to be installed instead, since PHP only works under that particular MPM.
Apache è un server modulare e molte funzionalità sono implementate da moduli esterni che il programma principale carica durante la fase di inizializzazione. La configurazione predefinita abilita solo i moduli più comuni ma abilitare un modulo è semplice: basta eseguire a2enmod modulo
. Per disabilitare un modulo il comando è a2dismod modulo
. Questi programmi non fanno altro che creare (o rimuovere) i collegamenti simbolici in /etc/apache2/mods-enabled/
che puntano ai file (conservati in /etc/apache2/mods-available/
).
Con la sua configurazione predefinita il server web rimane in ascolto sulla porta 80 (come configurato in /etc/apache2/ports.conf
) e serve le pagine dalla directory /var/www/
(come configurato in /etc/apache2/sites-enabled/000-default
).
11.2.2. Configurare gli host virtuali
Un host virtuale è una identità aggiuntiva per il server web.
Apache considera due tipologie differenti di host virtuali: quelli che sono basati sull'indirizzo IP (o sulla porta) e quelli che si affidano al nome di dominio del server web. Il primo metodo richiede di allocare indirizzi IP (o porte) differenti per ogni sito, mentre il secondo metodo può funzionare con un singolo IP (ed una sola porta) e i siti vengono differenziati dal nome host inviato dal client HTTP (cosa che funziona unicamente con la versione 1.1 del protocollo HTTP che comunque è fortunatamente abbastanza vecchia da essere attualmente utilizzata su tutti i client).
La (crescente) carenza di indirizzi IPv4 favorisce in genere il secondo metodo anche se questo è reso più complesso qualora gli host virtuali necessitino di fornire anche HTTPS poiché il protocollo SSL non è sempre disponibile in caso di host virtuali basati sul nome. L'estensione SNI (Server Name Indication) che permette questo genere di combinazione non è supportata da tutti i browser. Quando più siti HTTPS necessitano di girare sullo stesso server vengono spesso differenziati utilizzando una porta o un indirizzo IP differente (IPv6 in questo caso può essere d'aiuto).
The default configuration for Apache 2 enables name-based virtual hosts (with the NameVirtualHost *:80
directive in the /etc/apache2/ports.conf
file). In addition, a default virtual host is defined in the /etc/apache2/sites-enabled/000-default
file; this virtual host will be used if no host matching the request sent by the client is found.
Ogni host virtuale aggiuntivo viene descritto da un file conservato in /etc/apache2/sites-available/
. Quindi impostare un sito web per il dominio falcot.org
richiede semplicemente la creazione del file seguente e l'abilitazione dell'host virtuale con a2ensite www.falcot.org
.
Esempio 11.16. Il file /etc/apache2/sites-available/www.falcot.org
<VirtualHost *:80>
ServerName www.falcot.org
ServerAlias falcot.org
DocumentRoot /srv/www/www.falcot.org
</VirtualHost>
Il server Apache, configurato come visto, utilizza gli stessi file di log per tutti gli host virtuali (anche se questo può essere modificato inserendo direttive CustomLog
nelle definizioni degli host virtuali). Questo è un buon motivo per personalizzare il formato di questo file di log perché includa il nome dell'host virtuale. Questo può essere fatto creando un file /etc/apache2/conf.d/customlog
che definisce un nuovo formato per tutti i file di log (con la direttiva LogFormat
). La riga CustomLog
dev'essere quindi rimossa (o commentata) dal file /etc/apache2/sites-available/default
.
Esempio 11.17. Il file /etc/apache2/conf.d/customlog
# New log format including (virtual) host name
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost
# Now let's use this "vhost" format by default
CustomLog /var/log/apache2/access.log vhost
This section briefly reviews some of the commonly-used Apache configuration directives.
The main configuration file usually includes several Directory
blocks; they allow specifying different behaviors for the server depending on the location of the file being served. Such a block commonly includes Options
and AllowOverride
directives.
Esempio 11.18. Blocco Directory
<Directory /var/www>
Options Includes FollowSymlinks
AllowOverride All
DirectoryIndex index.php index.html index.htm
</Directory>
The DirectoryIndex
directive contains a list of files to try when the client request matches a directory. The first existing file in the list is used and sent as a response.
The Options
directive is followed by a list of options to enable. The None
value disables all options; correspondingly, All
enables them all except MultiViews
. Available options include:
ExecCGI
indica che gli script CGI possono essere eseguiti.
FollowSymlinks
informa il server che i collegamenti simbolici possono essere seguiti e che la risposta deve contenere i contenuti della destinazione indicata dai collegamenti.
SymlinksIfOwnerMatch
comunica al server di seguire i collegamenti simbolici, ma solo quando il collegamento e la sua destinazione hanno lo stesso proprietario.
Includes
abilita le
inclusioni lato server (abbreviato con
SSI in lingua inglese). Queste sono direttive incorporate nelle pagine HTML ed eseguite in tempo reale ad ogni richiesta.
Indexes
comunica al server di elencare i contenuti di una directory se la richiesta HTTP inviata dal client punta ad una directory senza file di indice (cioè quando in questa directory non esiste alcun file menzionato dalla direttiva
DirectoryIndex
).
MultiViews
abilita la negoziazione del contenuto: questa opzione può essere utilizzata dal server per fornire una pagina web che corrisponda alla lingua preferita configurata nel browser.
La direttiva AllowOverride
elenca tutte le opzioni che possono essere abilitate o disabilitate attraverso un file .htaccess
. Un utilizzo comune di questa opzione riguarda la limitazione di ExecCGI
per permettere all'amministratore di scegliere quali utenti sono autorizzati ad eseguire programmi con l'identità del server web (l'utente www-data
).
11.2.3.1. Richiedere un'autenticazione
In alcune circostanze l'accesso a parte dei contenuti di un sito web deve essere ristretto ai soli utenti autorizzati che forniscono un nome utente ed una password.
Esempio 11.19. Richiedere l'autenticazione con un file .htaccess
Require valid-user
AuthName "Private directory"
AuthType Basic
AuthUserFile /etc/apache2/authfiles/htpasswd-private
Il file
/etc/apache2/authfiles/htpasswd-private
contiene una lista di utenti e password che sono generalmente manipolati con il comando
htpasswd
. Per esempio il seguente comando è utilizzato per aggiungere un utente o cambiare la sua password:
#
htpasswd /etc/apache2/authfiles/htpasswd-private utente
New password:
Re-type new password:
Adding password for user user
11.2.3.2. Limitare l'accesso
The Allow from
and Deny from
directives control access restrictions for a directory (and its subdirectories, recursively).
La direttiva Order
comunica al server l'ordine con cui le direttive Allow from
e Deny from
devono essere applicate: l'ultima che corrisponde ha la precedenza. In parole povere, Order deny,allow
consente l'accesso se nessuna direttiva Deny from
è soddisfatta oppure se lo è una direttiva Allow from
. Al contrario Order allow,deny
rifiuta l'accesso se nessuna direttiva Allow from
è soddisfatta (oppure se lo è una direttiva Deny from
).
Le direttive Allow from
e Deny from
possono essere seguite da un indirizzo IP, da una rete (come 192.168.0.0/255.255.255.0
, 192.168.0.0/24
o anche 192.168.0
), un nome host oppure un nome di dominio, o ancora dalla parola chiave all
che indica tutti.
Esempio 11.20. Rifiutare in via predefinita ma autorizzare la rete locale
Order deny,allow
Allow from 192.168.0.0/16
Deny from all
11.2.4. Analizzatori di log
Nel server web viene spesso installato un analizzatore di log: quest'ultimo fornisce agli amministratori una idea precisa riguardo le modalità d'utilizzo cui è sottoposto.
Gli amministratori della Falcot Corporation hanno scelto AWStats (Advanced Web Statistics) per analizzare i loro file log di Apache.
The first configuration step is the customization of the /etc/awstats/awstats.conf
file. The Falcot administrators keep it unchanged apart from the following parameters:
LogFile="/var/log/apache2/access.log"
LogFormat = "%virtualname %host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"
SiteDomain="www.falcot.com"
HostAliases="falcot.com REGEX[^.*\.falcot\.com$]"
DNSLookup=1
LoadPlugin="tooltips"
Tutti questi parametri sono documentati dai commenti nel file modello. In particolare i parametri LogFile
e LogFormat
descrivono la posizione ed il formato del file di log e le informazioni che contiene: SiteDomain
e HostAliases
elencano i vari nomi con cui il sito web principale viene indicato.
Per siti con molto traffico, DNSLookup
non dovrebbe essere impostato a 1
ma per i siti minori, come quello della Falcot descritto in precedenza, questa impostazione permette di avere dei resoconti più leggibili che includono il nome completo delle macchine anziché il semplice indirizzo IP.
AWStats sarà anche attivato per gli altri host virtuali: ogni host virtuale richiede il proprio file di configurazione, come /etc/awstats/awstats.www.falcot.org.conf
.
Esempio 11.21. File di configurazione di AWStats per un host virtuale
Include "/etc/awstats/awstats.conf"
SiteDomain="www.falcot.org"
HostAliases="falcot.org"
AWStats usa molte delle icone conservate nella directory /usr/share/awstats/icon/
. Perché queste icone siano disponibili sul sito web la configurazione di Apache dev'essere adattata per includere la seguente direttiva:
Alias /awstats-icon/ /usr/share/awstats/icon/
Dopo qualche minuto (e una volta che lo script è stato eseguito qualche volta) i risultati saranno visibili online: