Le direttive presenti in un file di configurazione possono essere applicate a tutto il server, oppure ristrette a certe directory, file, host o URL. In questo articolo verranno descritte le sezioni , come utilizzarle al meglio per personalizzare e rendere efficae la configurazione del server Web Apache.
Ecco un primo elenco di tali sezioni:
-
IfDefine , racchiude direttive che vengono considerate solo nel caso in cui il comando apache2 viene lanciato con l’appropriato parametro.
Esempio:
<IfDefine ClosedForNow>
Redirect / http://otherserver.example.com/
</IfDefine>
In questo caso la re direzione ha effetto solo se apache viene avviato con:
apache2ctl -DclosedForNow
-
IfModule, è molto simile alla sezione precedente, l’unica differenza è che viene applicata solo nel caso in cui il modulo specificato è presente sul server
-
IfVersion, viene considerata solo nel caso in cui la versione del server Web coincide con il parametro.
Esempio:
-
<IfVersion >= 2.1>
# Si applica solo la versione è superiore alla 2.1
</IfVersion>
-
Le sezioni maggiormente utilizzate sono quelle che modificano il comportamento del web server in base alla posizione relativa al filesystem o allo spazio web. Prima è però necessario comprendere la differenza fra questi due concetti:
-
FilesystemIn questo caso si considera una vista del server web sul filesystem, così come viene effettuata dal sistema operativo -
Spazio WebIn questo caso si considera solo la porzione di disco visibile ad apache, ovvero dalla sua root in poi. In Ubuntu solitamente dalla cartella/var/www
La differenza più importante fra queste due categorie di viste è che lo spazio web non è mappato direttamente sul file system, ma è in grado di gestire pagine create dinamicamente, per esempio estratte da un database.
Parliamo ora di Sezioni relative al Filesystem
-
Directory, le direttive contenute si applicano a quella directory presente su filesystem.Esempio:-
<Directory /var/web/dir1>
Options +Indexes
</Directory>
-
-
Files, in questo caso le direttive si applicano a ogni singolo file con nome congruente (attraverso tutte le directory). Questo comando può essere combinato con quello precedente, in modo tale da applicare la/e direttiva solo a determinati file contenuti in una determinata directoryEsempio:-
<Directory /var/web/dir1>
<Files private.html>
Order allow,deny
Deny from all
</Files>
</Directory>
-
Per quanto riguarda le Sezioni relativa allo Spazio Web
-
Location, le direttive contenute in questa sezione si applicano a tutti gli url che coincideranno con quello spazio web. Nell'esempio mostrato poco sotto qualsiasi pagina richiamata tramite URL che contiene /private non verrà visualizzata (http://mysite/private e http://mysite/private123/dir/ciao.html )Esempio-
<Location /private>
Order Allow,Deny
Deny from all
</Location>
-
In combinazione con le sezioni Location, Directory e Files si possono utilizzare delle wildcard simili a quelle utilizzabili via shell per indicare:
-
* → qualsiasi sequenza di caratteri -
? → ogni singolo carattere -
etc ..
Oppure si possono utilizzare le più flessibili: DirectoryMatch, FilesMatch e LocationMatch che permettono di utilizzare espressioni regolari stile Perl.
La scelta fra un a sezione a livello di filesystem ed una a livello di spazio web è semplice, si deve scegliere la prima opzione nel caso in cui si vogliano gestire delle direttive legate al filesystem (oscurare una directory fisica), utilizzare la seconda quando si vuole gestire qualcosa che non è legato al filesystem (come già detto una pagina generata dinamicamente).
Altre sezioni sono:
-
VirtualHost, sono direttive applicate a specifici host. Tale sezione viene utilizzata quando su un unico server Web risiedono più siti. Ritorneremo in seguito su questa sezione, dato che ha una certa rilevanza in serer multi dominio. -
Proxy, tale sezione applica le proprie direttive solo verso quei siti acceduti tramite il modulomod_proxy, che deve matchare l'URL fornita, ecco un esempio:-
<Proxy http://mysite.org/*>
Order allow,deny
Deny from all
</Proxy>
-
In ultima analisi affrontiamo lo scope delle sezioni, ovvero quali direttive hanno precedenza?
Quali vengono applicate in caso di conflitto?
Ecco una lista ordinata per grado di visibilità crescente (dall'alto verso il basso):
-
Directory e .htaccess -
DirectoryMacth -
Files e FilesMatch -
Location e LocationMatch
Tutte le direttive vengono processate così come sono ordinate nel file di configurazione, tranne quelle presenti nelle sezioni Directory, che vengono applicate in base alla profondità dell'albero, ovvero prima <Directory /var/web/a> poi <Directory /var/web/a/suba>
Le considerazioni sullo scope non sono banali e sono da comprendere a fondo, una errata configurazione può compromettere il livello di sicurezza di apache, eccone un esempio:
<Location />
Order deny,allow
Allow from all
</Location>
# Attenzione , questa directory non ha effetto, per ciò che sta scritto sopra!!
<Directory />
Order allow,deny
Allow from all
Deny from badguy.example.com
</Directory>
Tutti avranno accesso alla root del mio server anche chi proviene da badguy.example.com










[...] “Apache – Sezioni nel file di configurazione” vediamo alcune delle sezioni più importanti che possono essere inserite all’interno [...]