HTTPD - Server web Apache2

Transcript

HTTPD - Server web Apache2
Documentazione ufficiale
Documentazione di Ubuntu > Ubuntu 9.04 > Guida a Ubuntu server > Server web > HTTPD - Server web
Apache2
HTTPD - Server web Apache2
Apache è il server web più utilizzato nei sistemi Linux. I server web sono usati per inviare le pagine web
richieste da un client, che solitamente esege le richieste attraverso un browser web come Firefox, Opera o
Mozilla.
Gli utenti inseriscono un URL (Uniform Resource Locator) per contattare un server web conoscendo il suo
FQDN (Fully Qualified Domain Name, nome di dominio non ambiguo, ndt) e un percorso per la risorsa
richiesta. Per esempio, per vedere la pagina principale del sito web di Ubuntu, l'utente deve inserire solamente
il FQDN. Per richiedere informazioni specifiche sul supporto a pagamento, l'utente deve inserire il FQDN
seguito da un percorso.
Il protocollo più utilizzato per il trasferimento delle pagine web è l'HTTP (Hyper Text Transfer Protocol). Sono
anche supportati protocolli come HTTPS (Hyper Text Transfer Protocol over Secure Sockets Layer) e FTP (File
Transfer Protocol), un protocollo per caricare e scaricare file dalla rete.
I server web Apache vengono comunemente usati in combinazione con il motore di database MySQL, il
linguaggio di script per la pre-elaborazione dell'ipertesto PHP (Pre-processor Hyper Text) e altri noti linguaggi
di script come Python e Perl. Questa configurazione viene denominata LAMP (Linux, Apache, MYSQL e
Perl/Phyton/PHP) e costituisce una piattaforma robusta e potente per lo sviluppo e l'installazione di
applicazioni basate sul web.
Installazione
Il server web Apache2 è disponibile in Ubuntu Linux. Per installarlo:
Al prompt di un terminale, eseguire il seguente comando:
sudo apt-get install apache2
Configurazione
La configurazione di Apache2 avviene inserendo delle direttive all'interno di semplici file di testo di
configurazione, suddivisi nei seguenti file e directory:
apache2.conf: il principale file di configurazione di Apache2. Contiene impostazioni globali per Apache2.
conf.d: contiene file di configurazione che si applicano globalmente ad Apache. Altri pacchetti che fanno
uso di Apache2 per servire contenuti potrebbero aggiungere file o collegamenti simbolici a questa
directory.
envvars: file dove vengono impostate le variabili d'ambiente di Apache2.
httpd.conf: storicamente il file di configurazione principale di Apache2, il cui nome deriva dal demone
httpd. Il file può essere usato per configurazioni utente che hanno effetto globalmente su Apache2.
mods-available: questa directory contiene file di configurazione per caricare e configurare moduli. Non
tutti i moduli hanno file di configurazione specifici.
mods-enabled: contiene collegamenti simbolici ai file in /etc/apache2/mods-available. Quando viene creato
un collegamento simbolico a un modulo di configurazione, viene abilitato al successivo riavvio di
apache2.
ports.conf: contiene le direttive che determinano su quali porte TCP Apache2 sta in ascolto.
sites-available: questa directory contiene file i file di configurazione per gli host virtuali (Virtual Hosts) di
Apache. Gli host virtuali consentono di configurare Apache2 per molteplici siti web con configurazioni
separate.
sites-enabled: come mods-enabled,
sites-enabled
contiene collegamenti simbolici alla directory
/etc/apache2/sites-available.
Quando viene creato un collegamento simbolico a un file di configurazione in
sites-available, verrà abilitato al successivo riavvio di Apache.
Altri file di configurazione possono essere aggiunti attraverso la direttiva Include e caratteri speciali possono
essere usati per aggiungere molti altri file di configurazione. Una qualsiasi direttiva può essere posizionata in
uno qualsiasi di questi file di configurazione. Modifiche ai file principali di configurazione vengono riconosciute
solo con un riavvio di Apache2.
Il server legge anche un file contenente i tipi MIME dei documenti, il nome di questo file è impostato in
TypesConfig e il valore predefinito è /etc/mime.types
Impostazioni di base
Questa sezione descrive i parametri di configurazione fondamentali del server Apache2. Per maggiori
informazioni, consultare la documentazione di Apache2.
Apache2 è dotato di una configurazione predefinita adatta agli host virtuali: è configurato con un singolo
host virtuale (attraverso l'uso della direttiva VirtualHost) che può essere modificato oppure usato così
com'è nel caso si disponga di un solo sito web oppure usato come modello per aggiungere altri host
virtuali. Se lasciato così, l'host virtuale predefinito verrà usato come sito predefinito o come il sito che gli
utenti vedranno se l'URL inserito non corrisponde alla direttiva ServerName in uno qualsiasi dei file
personalizzati. Per modificare l'host virtuale, modificare il file /etc/apache2/sites-available/default.
Le direttive impostate per un host virtuale si applicano solamente a quel
particolare host. Se una direttiva è impostata all'interno del server e non è definita
nelle impostazioni dell'host virtuale, vengono utilizzate le impostazioni predefinite.
Per esempio, è possibile impostare un indirizzo email per il webmaster e non
definirne alcuno per per gli host virtuali.
Per configurare un nuovo host virtuale o un nuovo sito, copiare quel file nella stessa directory con un
nome a scelta. Per esempio:
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mionuovosito
Modificare il file per configurare il nuovo sito usando alcune delle direttive descritte di seguito.
La direttiva ServerAdmin specifica a quale indirizzo email il sistema deve indirizzare la posta destinata
agli amministratori. Il valore predefinito è «webmaster@localhost». Quest’impostazione deve essere
modificata con l’indirizzo che è stato assegnato all’utente (nel caso sia l’amministratore). Se il sito
presenta dei problemi, Apache2 mostrerà un messaggio di errore indicante l'indirizzo a cui deve essere
segnalato il problema. Questa direttiva è presente nel file /etc/apache2/sites-available del proprio sito.
La direttiva Listen specifica la porta, e opzionalmente l'indirizzo IP, su cui Apache2 dovrebbe essere in
ascolto. Se l'indirizzo IP non è specificato, Apache2 ascolta tutti gli indirizzi IP assegnati alla macchina. Il
valore predefinito per la direttiva Listen è 80. Modificare questo valore, in 127.0.0.1:80 per fare in modo
che Apache2 ascolti solo l'interfaccia di loopback e non sia disponibile verso internet, in 81 per
modificare la porta di ascolto o lasciare il valore predefinito per il normale funzionamento. Questa
direttiva può essere trovata e modifica in un file specifico: /etc/apache2/ports.conf
La direttiva ServerName è opzionale e specifica il FQDN a cui il proprio sito risponde. L'host virtuale
predefinito non ha la direttiva ServerName impostata, cosicché risponderà a tutte le richieste che non
corrispondono alla direttiva ServerName in un altro host virtuale. Se si è i proprietari del dominio
"ubunturocks.com" e si vuole ospitare tale dominio su un server Ubuntu, il valore della direttiva
ServerName nel file di configurazione dell'host virtuale dovrebbe essere "ubunturocks.com". Aggiungere
quindi questa direttiva al nuovo file di configurazione creato precedentemente (/etc/apache2/sitesavailable/mionuovosito).
Potrebbe essere necessario che il proprio sito risponda anche alle richieste per "www.ubunturocks.com",
dato che molti utenti ritengono corretto inserire il prefisso "www". Per ottenere questo, usare la direttiva
ServerAlias: è possibile usare anche caratteri speciali con la direttiva ServerAlias.
Per esempio, la seguente configurazione farà in modo che il proprio sito risponda a qualsiasi richiesta il
cui dominio termina con .ubunturocks.com.
ServerAlias *.ubunturocks.com
La direttiva DocumentRoot stabilisce in che posizione il server Apache deve cercare i file che
compongono il sito. Il valore predefinito è /var/www. Nessun sito è configurato, ma se si tolgono i
commenti alla direttiva RedirectMatch in /etc/apache2/apache2.conf le richieste sono indirizzate verso
/var/www/apache2-default dove Apache2 è in attesa. Modificare questo valore nel file del proprio host
virtuale e creare, se necessario, la directory.
La directory /etc/apache2/sites-available non viene analizzata da Apache2. I collegamenti simbolici in
/etc/apache2/sites-enabled puntano ai siti disponibili.
Abilitare il nuovo VirtualHost utilizzando l'utilità a2ensite e ravviare Apache:
sudo a2ensite mionuovosito
sudo /etc/init.d/apache2 restart
Assicurarsi di sostituire mionuovosito con una nome più descrittivo per il VirtualHost. Un
metodo molto utilizzato consiste nel definire il nome del file secondo la direttiva
ServerName dell'host virtuale.
Allo stesso modo, usare l'utilità a2dissite per disabilitare i siti. Questo può rivelarsi utile per diagnosticare
problemi di configurazione con molteplici host virtuali:
sudo a2dissite mionuovosito
sudo /etc/init.d/apache2 restart
Impostazioni predefinite
Questa sezione si occupa delle impostazioni predefinite del server Apache2. Per esempio, se viene aggiunto
un host virtuale, le impostazioni modificate dell'host virtuale hanno precedenza rispetto quelle dell'host. Per
una direttiva non definita, viene utilizzato il valore predefinito.
DirectoryIndex è la pagina predefinita proposta dal server alle richieste dell'indice di una directory,
specificate attraverso l'uso di una barra (/) come suffisso al nome della directory.
Se, per esemio, un utente richiede la pagina http://www.example.com/questa_directory/ ottiene la
pagina DirectoryIndex se esiste, un elenco di directory generato dal server se è stata specificata
l'opzione Indexes o una pagina di permesso negato se nessuna delle opzioni precedenti è abilitata. Il
server cerca tra i file elencati nella direttiva DirectoryIndex e visualizza il primo che trova. Se il server non
trova nessuno di questi file ed è presente l'opzione OptionsIndexes per quella directory, allora creerà un
elenco in HTML di tutte le sottodirectory e dei file di tale directory. Il valore predefinito in /etc/apache2
/apache2.conf è «index.html index.cgi index.pl index.php index.xhtml». Se Apache2 trova un file
corrispondente a quelli elencati, visualizza il primo.
La direttiva ErrorDocument consente di specificare un file da usare per uno specifico errore. Per
esempio, se un utente richiede una risorsa inesistente, si verifica un errore 404 e, in base alla
configurazione predefinita di Apache, verrà visualizzato il file /usr/share/apache2/error
/HTTP_NOT_FOUND.html.var . Tale file non è presente in DocumentRoot, ma è impostata una direttiva in
/etc/apache2/apache2.conf che redirige le richieste alla directory "/error" alla directory /usr/share/apache2
/error/ .
Per un elenco delle direttive predefinite ErroDocument, usare il seguente comando:
grep ErrorDocument /etc/apache2/apache2.conf
Il server, in modo predefinito, scrive il registro dei trasferimenti in /var/log/apache2/access.log. È possibile
modificare questo valore per ogni singolo sito nella configurazione dell'host virtuale tramite la direttiva
CustomLog oppure basta ometterla per utilizzare il valore predefinito indicato in /etc/apache2/apache2.conf.
È anche possibile specificare il file in cui registrare gli errori attraverso la direttiva ErrorLog il cui valore
predefinito è /var/log/apache2/error.log. Questi sono mantenuti separati dal registro dei trasferimenti per
semplificare la risoluzione di problemi che possono incorrere col server Apache2. Inoltre, è anche
possibile specificare il LogLevel (il valore predefinito è "warn") e il LogFormat (per il valore predefinito,
consultare /etc/apache2/apache2.conf).
Alcune opzioni vengono specificate per directory piuttosto che per server, come la direttiva Options. Una
stanza "Directory" è racchiusa tra tag in stile XML:
<Directory /var/www/mionuovosito>
...
</Directory>
La direttiva Options all'interno della stanza "Directory" accetta uno o più dei seguenti valori (tra gli altri)
separati da spazi:
ExecCGI: consente l'esecuzione di script CGI. Questi script non vengono eseguiti se l'opzione
non è selezionata.
La maggior parte dei file non dovrebbe venir eseguita come script CGI,
potrebbe essere molto pericoloso. Gli script CGI dovrebbero essere
mantenuti in una directory separata, al di fuori della propria DocumentRoot
e solo questa directory dovrebbe avere l'opzione ExecCGI impostata.
Questo è il comportamento predefinito in Ubuntu e la posizione per gli
script CGI è /usr/lib/cgi-bin.
Includes: consente le inclusioni lato server. Le inclusioni lato server consentono ai file HTML di
includere altri file. Questa non è un'opzione comune. Per maggiori informazioni, consultare the
Apache2 SSI HOWTO.
IncludesNOEXEC: consente inclusioni lato server, ma disabilita i comandi #exec e #include negli
script CGI.
Indexes: visualizza un elenco formattato dei contenuti della directory se non esiste alcun
DirectoryIndex (come index.html) nella directory richiesta.
Per motivi di sicurezza, quest'opzione non dovrebbe essere impostata e
soprattutto non su DocumentRoot. Abilitare questa opzione con molta
cautela solo su alcune directory e nel caso in cui si voglia visualizzare
l'intero contenuto della directory.
Multiview: supporta visualizzazioni multiple in base al contenuto, quest'opzione è disabilitata in
modo predefinito per ragioni di sicurezza. Per maggiori informazioni, consultare la
documentazione di Apache2.
SymLinksIfOwnerMatch: segue i collegamenti simbolici solamente se il file di arrivo o la directory
hanno gli stessi proprietari del collegamento.
Impostazioni di httpd
Questa sezione espone alcune delle configurazioni di base del demone httpd.
LockFile: la direttiva LockFile imposta il percorso al file di lock utilizzato quando il server viene compilato con
USE_FCNTL_SERIALIZED_ACCEPT o USE_FLOCK_SERIALIZED_ACCEPT. Deve essere conservato nel
disco locale. Questo valore dovrebbe essere lasciato invariato a meno che la directory di log non sia localizzata
su una condivisione NFS. In questo caso, il valore dovrebbe essere modificato con una posizione sul disco
locale e una directory accessibile solamente dall'utente root.
PidFile: la direttiva PidFile imposta il file in cui il server registra il proprio «pid». Questo file dovrebbe essere
leggibile solamente dall'utente root. Nella maggior parte dei casi può essere lasciata invariata.
User: la direttiva User imposta lo «userid» utilizzato dal server in modo tale che risponda alle richieste. Questa
impostazione determina l'accesso al server. Qualsiasi file non accessibile a questo utente è inaccessibile
anche a chi cerca di visitare il sito. Il valore predefinito è www-data.
A meno che non sia estremamente necessario, non impostare mai la direttiva «User» a
root. Utilizzare root con «User» può creare una falla nella sicurezza del server Web.
La direttiva Group è simile alla direttiva User, imposta il gruppo a cui il server è tenuto rispondere. Il gruppo
predefinito è anche www-data.
I moduli di Apache
Apache è un server modulare: solo le funzionalità di base sono incluse all'interno del server. Funzionalità
aggiuntive sono disponibili attraverso dei moduli che possono essere caricati da Apache. Un insieme generale
di questi moduli è comunque incluso nel server durante la compilazione: se il server è compilato per usare il
caricamento automatico dei moduli, tali moduli possono essere compilati separatamente e aggiunti attraverso
l'uso della direttiva "LoadModule", altrimenti, è necessario ricompilare Apache.
La versione di Ubuntu consente il caricamento dinamico dei moduli. Le direttive di configurazione possono
essere incluse in base alla presenza di un particolare modulo racchiudendole in un blocco tipo: <IfModulo>
block.
È quindi possibile installare moduli aggiuntivi di Apache2 e usarli con il server web. Per esempio, per installare
il modulo MySQL Authentication, in un terminale digitare quanto segue:
sudo apt-get install libapache2-mod-auth-mysql
Per altri moduli, consultare la directory /etc/apache2/mods-available.
Usare l'utilità a2enmod per abilitare un modulo:
sudo a2enmod auth_mysql
sudo /etc/init.d/apache2 restart
Allo stesso modo, a2dismod disabiliterà un modulo:
sudo a2dismod auth_mysql
sudo /etc/init.d/apache2 restart
Configurazione HTTPS
Il modulo mod_ssl aggiunge un'importante caratteristica al server Apache2, l'abilità di cifrare le comunicazioni.
In questo modo, quando il browser utilizza la cifratura SSL per le comunicazioni, il prefisso «https://» verrà
inserito nell'URL (Uniform Resource Locator) nella barra degli indirizzi.
Il modulo mod_ssl è disponibile nel pacchetto apache2-common. Per abilitare il modulo mod_ssl, eseguire il
seguente comando in un terminale:
sudo a2enmod ssl
Esiste un file di configurazione HTTPS predefinito in /etc/apache2/sites-available/default-ssl. Affinché Apache
possa fornire servizi HTTPS, sono necessari un certificato e una chiave. La configurazione predefinita di
HTTPS utilizza un certificato e una chiave generate dal pacchetto ssl-cert. Questi strumenti sono utili per
eseguire delle prove, ma la chiave e il certificato auto-generati dovrebbero essere sostituiti con un certificato
specifico per il sito o il server. Per informazioni su come generare una chiave o su come ottenere un certificato,
consultare la sezione chiamata «Certificati»
Per configurare Apache all'uso di HTTPS, digitare quanto segue:
sudo a2ensite default-ssl
Le directory /etc/ssl/certs e /etc/ssl/private sono le posizioni predefinite. Se si installa il
certificato e la chiave in un'altra directory assicurarsi di modificare SSLCertificateFile e
SSLCertificateKeyFile appropriatamente.
Con Apache configurato per HTTPS, riavviare il servizio per abilitare le nuove impostazioni:
sudo /etc/init.d/apache2 restart
In base a come è stato ottenuto il certificato, potrebbe essere necessario inserire una
passphrase all'avvio di Apache.
È possibile accedere alle pagine del server sicuro digitando «https://nome_host/url/» nel barra degli indirizzi
del proprio browser.
Riferimenti
La documentazione di Apache2 contiene informazioni dettagliate riguardo le direttive di configurazione di
Apache2. Inoltre, per la documentazione ufficiale di Apache2, consultare il pacchetto apache2-doc.
Per maggiori informazioni riguardo SSL, consultare la documentazione di Mod SSL.
Il libro Apache Cookbook di O'Reilly è un'ottima risorsa per informazioni su specifiche configurazioni di
Apache2.
Per domande relative alla versione di Ubuntu di Apache2, chiedere nel canale IRC #ubuntu-server sul
server freenode.net.
Capitolo 9. Server web
PHP5 - Linguaggio di scripting
© 2008 Canonical Ltd. Ubuntu e Canonical sono marchi registrati da Canonical Ltd.
Questa opera è pubblicata sotto una licenza Creative Commons