Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "Server/Web"
Differenze tra le versioni 1 e 16 (in 15 versioni)
Versione 1 del 06/04/2007 20.22.22
Dimensione: 15814
Commento: creata pagina portale server
Versione 16 del 16/07/2012 20.08.56
Dimensione: 16578
Commento:
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 2: Linea 2:
## page was renamed from GuidaWebServer
[[BR]]
||<tablestyle="float:right; font-size: 0.9em; width:40%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;">'''Indice:'''[[BR]][[TableOfContents]]||

= Guida alla configurazione di un server Web =

== Prima di installare ==

Prima di cominciare vale la pena di spendere due parole sui requisiti di un server Web.

Tenete conto che probabilmente vi servirà hardware dedicato , se possibile scegliete una soluzione appositamente
progettata per il servizio che dovrete ospitare.

Prendetevi il tempo necessario per pianificare un corretto partizionamento del disco.

Possibilmente dedicate una partizione apposita per /var/log ed una specifica per /var/www dove ospiterete
i vostri siti : ciò dovrebbe minimizzare i tempi di I/O sia per la scrittura dei log files che per le operazioni
di GET per la lettura dei files legata alle richieste dei clients.

== Installazione ==
Aprite una shell ed al prompt dei comandi digitate: {{{
sudo apt-get -y install apache2
}}}

L'opzione '''-y''' di apt-get non chiede la conferma per le azioni legate al processo di installazione del software.

Apt installerà pertanto apache2 risolvendo automaticamente le dipendenze necessarie ed avviando il server web
nella configurazione di default.


== Un'occhiata ai files e alle directories di configurazione ==

In apache2 le principali opzioni di configurazione sono racchiuse nel file '''apache2.conf''', mentre
il file '''httpd.conf''' è vuoto (riservato alla personalizzazione della configurazione di apache2) e le porte
su cui il server Web sarà in ascolto all'avvio del servizio sono elencate nel file '''ports.conf'''; questi files si trovano in '''/etc/apache2'''.
La directory '''mods-available''' contiene tutti i moduli disponibili con apache2 (quelli installati di default)
mentre la directory '''sites-available''' contiene le direttive di configurazione relative a tutti i siti
che questo server Web ospita.
I moduli effettivamente caricati all'avvio del servizio apache2 sono elencati nella directory '''mods-enabled''' , così
come i siti effettivamente pubblicati e visibili agli utenti sono elencati nella directory '''sites-enabled'''.
I files contenuti in queste 2 directories sono dei links a quelli contenuti nelle 2 directories '''mods-available''' e
'''sites-available'''.
Questo vuol dire che se dovete supportare l'accesso in modo protetto al vostro sito (usando ssl) dovete creare
dei links ai file corrispondenti in '''mods-available'''.

Per esempio per supportare ssl occorre immettere comandi: {{{
ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf

ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load
}}}

La directory che contiene i file di log su tutti gli accessi è '''/var/log/apache2'''.

La directory che contiene il sito predefinito e che dovrebbe contenere i vostri siti è '''/var/www'''.


== Parametri di configurazione globali ==

Per modificare l'installazione di default occorre dare un'occhiata alla directory di configurazione di apache2 ,
'''/etc/apache2'''.

Eseguire al prompt dei comandi: {{{
cd /etc/apache2
}}}

osserverete come output : {{{
README envvars mods-available sites-available
apache2.conf httpd.conf mods-enabled sites-enabled
conf.d magic ports.conf ssl
}}}

=== Opzioni globali ===

Il file '''/etc/apache2/apache2.conf''' contiene le principali opzioni di configurazione di apache2: {{{
ServerRoot "/etc/apache2"

LockFile /var/lock/apache2/accept.lock

PidFile /var/run/apache2.pid

TimeOut 300

KeepAlive On

MaxKeepAliveRequests 100

KeepAliveTimeout 15

StartServers 5

MinSpareServers 5

MaxSpareServers 10

MaxClients 20

MaxRequestsPerChild 0

ErrorLog /var/log/apache2/error.log

Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf

Include /etc/apache2/httpd.conf

Include /etc/apache2/ports.conf
}}}

 * '''Server``Root''' : directory base per configurazione , logs ed errori

 * '''Lock``File''' : il lock file sul file di log (da modificare solo se il log file di apache2 è montato via NFS)

 * '''Pid``File''' : il file che contiene il PID del processo padre apache2

 * '''Time``Out''' : il tempo dopo il quale apache2 chiude una connessione client in stato idle

 * '''Keep``Alive On''' : sono permesse connessioni persistenti (ovvero in grado di servire più di una richiesta di uno stesso client)

 * '''Max``Keep``Alive``Requests''' : il massimo numero di richieste che in una singola connessione un client può fare al server (dopo tale numero le richieste verranno scartate)

 * '''Keep``Alive``Timeout''' : numero di secondi da attendere per effettuare un'altra richiesta da parte di uno stesso client su una stessa connessione persistente

 * '''Start``Servers''' : numero di processi server avviati

 * '''Min``Spare``Servers''' : numero minimo di processi liberi (ovvero avviati per supplire ad improvvisi picchi di carico)

 * '''Max``Spare``Servers''' : numero massimo di processi liberi (ovvero avviati per supplire ad improvvisi picchi di carico)

 * '''Max``Clients''' : massimo numero di processi apache2 che possono essere avviati

 * '''Max``Requests``Per``Child''' : numero massimo di richieste che il server è in grado di processare per ciascun thread

 * '''Include''' : sono le direttive di inclusione. Apache2 si serve di tali direttive per dichiarare indirizzo di binding,porta di ascolto ed altri parametri specifici della vostra configurazione in file distinti.

Come vedete la direttiva '''Error``Log /var/log/apache2/error.log''' è relativa al path del log file,mentre la '''Include /etc/apache2/mods-enabled/*.load''' e quella successiva dicono di includere tutti i moduli elencati in '''mods-enabled'''. Le configurazioni particolari sono in '''/etc/apache2/httpd.conf''' e la porta di ascolto in '''ports.conf'''.

Per modificare l'utente e il gruppo con cui apache2 è avviato dovete editare i parametri nel file '''/etc/apache2/apache2.conf'''

{{{
User www-data

Group www-data
}}}

'''N.B. : ''' apache2 non dovrebbe essere eseguito come root in quanto questo apre numerose falle di sicurezza...

I parametri per la gestione dei carichi di lavoro sono :
{{{
StartServers <n° processi figli Web Server all'avvio>

MinSpareServers <n° minimo processi figli liberi avviati per supplire picchi di carico>

MaxSpareServers <n° max processi figli liberi avviati per supplire picchi di carico>
}}}

'''N.B. :''' gli spare servers consentono al Web Server di rispondere + velocemente in caso di improvvisi picchi di richieste , ma occupano anche preziosa memoria dato che in casi di traffico normale non fanno nulla!
 
{{{
MaxClients <max n° client Web server è in grado di supportare simultaneamente>
}}}

I parametri per il nome del server sono :

{{{
ServerName <hostname (deve essere raggiungibile da URL>

ServerAdmin <mail_web_administrator>
}}}
<<BR>>
<<Indice>>
<<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?t=491668"; rilasci="11.10 11.04 10.10 10.04")>>

= Introduzione =

In questa guida verrà spiegato come installare e configurare il Server Web '''Apache''' e come abilitare il supporto a '''php''' e '''!MySql'''.

Definizione di Server Web:
 ''"Un server web è un servizio, e per estensione il computer su cui è in esecuzione, che si occupa di fornire, tramite software dedicato e su richiesta dell'utente, file di qualsiasi tipo, tra cui pagine web (successivamente visualizzabili dal browser sul PC dell'utente). Le informazioni inviate dal server web all'utente viaggiano in rete trasportate dal protocollo HTTP. L'insieme di server web dà vita al World Wide Web, uno dei servizi più utilizzati di Internet."'' (cit. Wikipedia)

= Intallazione =
[[AmministrazioneSistema/InstallareProgrammi|Installare]] il pacchetto [[apt://apache2|apache2]].

Aprire il proprio [[InternetRete/Navigazione|browser]] e accedere all'indirizzo [[http://127.0.0.1]] oppure [[http://localhost]]. Se l'installazione è andata a buon fine sarà possibile leggere il messaggio: {{{
It works!

This is the default web page for this server.

The web server software is running but no content has been added, yet.
}}}

= Configurazione =

Di seguito verranno elencati i file e le cartelle presenti all'interno di `/etc/apache2` che sono necessari per la configurazione del server '''Apache''':

 * `apache2.conf`: è il file di configurazione principale. In esso sono contenute le impostazioni che saranno applicate globalmente a tutti i siti.
 * `conf.d`: cartella che contiene file di configurazione globali. Software che utilizzano il server '''Apache''' per fornire contenuti all'utente finale (per esempio '''!PhpMyAdmin'''), possono aggiungere file o collegamenti simbolici in questa cartella.
 * `envvars`: in questo file sono definite e impostate le variabili d'ambiente del server Apache.
 * `httpd.conf`: un file di configurazione, inizialmente vuoto, che può essere utilizzato per specifiche direttive impostate dall'utente che agiscono globalmente sul server.
 * `mods-available`: in questa cartella sono contenuti i file di configurazione per avviare i moduli del server e per configurare gli stessi. Non tutti i moduli hanno file di configurazione specifici.
 * `mods-enabled`: in questa cartella sono presenti dei collegamenti simbolici ai moduli presenti nella cartella `/etc/apache2/mods-available`. Tutti i moduli che hanno un collegamento simbolico in questa cartella sono abilitati e avviati all'interno del server Apache.
 * `ports.conf`: contiene le direttive per impostare le porte TCP sulle quali il server Apache resterà in ascolto.
 * `sites-available`: in questa cartella sono contenuti i file di configurazione per i Virtual Host (di seguito VH). I VH consentono di avere numerosi siti con configurazioni diverse l'uno dall'altro.
 * `sites-enabled`: come per la cartella `mods-enabled`, contiene collegamenti simbolici a `/etc/apache2/sites-available`. Quando una configurazione presente in `sites-available` è collegata all'interno di questa cartella, il sito corrispondente verrà configurato e avviato insieme al server Apache.

File di configurazione aggiuntivi possono essere impostati attraverso la direttiva `Include`. Per esempio, la direttiva {{{
Include /etc/apache2/conf.d/
}}} farà in modo che il server Apache importi le impostazioni presenti all'interno della cartella `/etc/apache2/conf.d/`.

Per rendere effettive le modifiche sui file di configurazione è necessario riavviare il server digitando con [[AmministrazioneSistema/Sudo|permessi di amministrazione]] il seguente comando in una [[AmministrazioneSistema/RigaDiComando|finestra di terminale]]: {{{
sudo service apache2 restart
}}}

== Configurazione di Base ==

In questa sezione vengono fornite e commentate le direttive più importanti per il funzionamento e la configurazione del server '''Apache'''. Per ulteriori informazioni, fare riferimento alla [[#Ulteriori_risorse|documentazione ufficiale]].

 * '''!ServerRoot''': definisce la cartella in cui sono presenti i file del server. In '''Ubuntu''' è `/etc/apache2` e contiene tutti file di configurazione.
 * '''!DocumentRoot''': definisce la cartella in cui sono presenti i file che verranno richiesti al server web. In '''Ubuntu''', in via predefinita, è la cartella `/var/www`.
 * '''!ServerAdmin''': definisce l'indirizzo e-mail da includere nei messaggi di errore inviati al client.
 * '''!ServerName''': contiente informazioni sull'hostname al quale il server Apache deve rispondere. Può essere specificato un hostname diverso per ogni VH.
 * '''Listen''': definisce la porta sulla quale il server è in ascolto.
 * '''User''' e '''Group''': definiscono l'utente e il gruppo proprietari del processo. Il server Apache non dovrebbe mai essere avviato dall'utente root.
 * '''!ErrorLog''': definisce il percorso per i file di log degli errori.
 * '''!LockFile''': il lock file sul file di log (da modificare solo se il log file di apache2 è montato via NFS).
 * '''!PidFile''': il file che contiene il PID del processo padre apache2.
 * '''!TimeOut''': il tempo dopo il quale apache2 chiude una connessione client in stato idle.
 * '''!KeepAlive On''': sono permesse connessioni persistenti, ovvero in grado di servire più di una richiesta di uno stesso client.
 * '''!MaxKeep``Alive``Requests''': il massimo numero di richieste che in una singola connessione un client può fare al server. Dopo tale numero le richieste verranno scartate.
 * '''!KeepAlive``Timeout`''': tempo, in secondi, da attendere per effettuare un'altra richiesta da parte di uno stesso client su una stessa connessione persistente.
 * '''!StartServers''': numero di processi server avviati.
 * '''Min``Spare``Servers''': numero minimo di processi liberi, ovvero avviati per supplire ad improvvisi picchi di carico.
 * '''!MaxSpareServers''': numero massimo di processi liberi.
 * '''!MaxClients''': massimo numero di processi apache2 che possono essere avviati.
 * '''!MaxRequestsPerChild''': numero massimo di richieste che il server è in grado di processare per ciascun thread.
 * '''Include''': direttive di inclusione. Apache2 si serve di tali direttive per dichiarare indirizzo di binding, porta di ascolto ed altri parametri specifici di configurazione in file distinti.
Linea 174: Linea 72:
I parametri da specificare nel file '''/etc/apache2/sites-enabled/000-default''' sono :

{{{
In via predefinita, '''Apache''' utilizza un unico file di configurazione globale per la gestione dei VH. Si tratta del file `/etc/apache2/sites-available/default`. Se il server dovrà servire un unico sito è possibile mantenere questa configurazione, personalizzando i campi necessari. In particolare:
 * '''!DocumentRoot''': qualora si volesse utilizzare una cartella diversa da quella predefinita (`/var/www`).
 * '''!ServerAdmin''': un amministratore diverso può essere specificato per ogni sito;
 * '''!ServerName''': è possibile assegnare un valore diverso a questa direttiva per ogni VH configurato. Se, ad esempio, si imposta la direttiva come {{{
ServerName host.example}}}
 si otterrà che, digitando nel browser l'indirizzo {{{
http://host.example
}}} il server Apache restituirà solo i dati relativi al sito configurato con questo '''!ServerName'''.
 * '''!ServerAlias''': attraverso questa direttiva è possibile definire altri alias che puntino sempre al sito `http://host.example`. Per meglio comprendere la funzione di questa direttiva, se si imposta {{{
ServerAlias *.host.example
}}} si otterrà che il sito rispondente al dominio `host.example` sarà richiamato ogni qual volta nel browser si digiti un indirizzo che termini con `host.example` ([[http://www.host.example]], [[http://pippo.host.example]], [[http://foo.host.example]]);

||<tablestyle="text-align: justify; width:100%;" style="border:none;" 5%><<Immagine(Icone/Grandi/info.png,,center)>> ||<style="padding:0.5em; border:none;">Per gli ultimi due esempi, assicurarsi di avere configurato correttamente il file `/etc/hosts`. ||


== Creare un nuovo sito ==

Utilizzare il file di configurazione di default come base. Fare riferimento al paragrafo [[#hv|Hosting Virtuale]] per avere informazioni più dettagliate.

 0. Creare una copia del file di configurazione di default digitando con [[AmministrazioneSistema/Sudo|permessi di amministrazione]] il seguente comando in una finestra di [[AmministrazioneSistema/RigaDiComando|terminale]]: {{{
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/miosito
}}} `miosito` sarà il file di configurazione del nuovo sito che si vuole impostare;
 0. Personalizzare la configurazione di `miosito` utilizzando le direttive necessarie;
 0. Abilitare il sito con il comando {{{
sudo a2ensite miosito
}}}
 0. Riavviare il server Apache per rendere effettive le modifiche con il comando: {{{
sudo service apache2 restart
}}}
 0. Per disabilitare un sito precedentemente abilitato utilizzare il comando: {{{
sudo a2dissite miosito
}}}

== Altre direttive utili ==

Molte altre direttive possono esse impostate per ogni sito che si ha la necessità di configurare. Per un elenco completo si può fare riferimento alla [[#Ulteriori_risorse|documentazione ufficiale]]. Alcune di queste, che possono risultare utili vengono riportate di seguito:

 * '''Alias''': questa direttiva serve a specificare un percorso diverso da quello impostato in '''!DocumentRoot''' per una richiesta. Ad esempio, impostando {{{
Alias /image /home/utente/immagini
}}} si otterrà che, digitando nel browser il collegamento {{{
http://host.example/image/casa.jpg
}}} il file richiesto sarà caricato dalla posizione {{{
/home/utente/immagini/casa.jpg
}}}
 * '''Allow from''' e '''Deny from''': attraverso queste direttive è possibile specificare gli indirizzi IP o gli hostname ai quali è permesso accedere al sito (Allow) e quelli ai quali ciò è impedito (Deny). Ad esempio, per impedire ad uno specifico IP di accedere al sito si può usare la direttiva {{{
Deny from 10.252.46.165
}}}
 * '''!DirectoryIndex''': questa direttiva specifica il file da cercare quando un utente cerca di accedere ad una determinata posizione nel sito. Ad esempio, impostando {{{
DocumentIndex index.html
}}} se si tenta di accedere all'indirizzo {{{
http://host.example/template
}}} si verrà reindirizzati al file {{{
http://host.example/template/index.html
}}} È possibile specificare più di un !DocumentIndex nella forma {{{
DocumentIndex index.html index.php error.html
}}} In questo modo se, nella posizione specificata non esiste né il file `index.html` né il file `index.php` si verrà reindirizzati al file `error.html`.
 * '''!IndexIgnore''': permette di nascondere alcuni files al client. Ad esempio, se si specifica {{{
IndexIgnore README* *.txt
}}} tutti i files README* e tutti i file con estensione `.txt` vengono nascosti al client.

== Autorizzazione basata sull'Utente ==

Per configurare l'autenticazione a livello utente procedere come segue:

 0. Creare file per utenti: `/usr/local/apache/conf/htuser`
 0. Creare utenti in `/usr/local/apache/conf/htuser` con comando: {{{
htpasswd -c htuser <nomeutente>
}}}
 0. Creare gruppo `htusers` nel file `/usr/local/apache/conf/htgroup`. Il formato del file è il seguente: {{{
Groupname: user1 user2 user3 ..
}}}
 0. Inserire nel file `/etc/apache2/sites-available/default` le seguenti direttive: {{{
AuthUserFile conf/htuser
AuthGroupFile conf/htgroup
}}}
 0. Impostazioni controllo accesso: {{{
Require user username1 username2
Require group groupname1 groupname2
Require valid-user
}}}
  * la prima direttiva consente l'accesso a '''username1 username2..'''
  * la seconda direttiva consente l'accesso a '''groupname1 groupname2..'''
  * la terza direttiva consente l'accesso solo agli utenti definiti in '''htuser'''

<<Anchor(hv)>>
= Hosting virtuale =

Un singolo server può ospitare più siti. La gestione dei siti può essere fatta nei seguenti modi:
 * N siti = N * M processi web server. se M è il numero di processi per singola istanza del sito web, vuol dire che M processi gestiscono ciascun sito.
 * Virtual host = N siti = M processi web server. Si ha sempre una singola istanza web, ovvero gli M processi gestiscono tutti gli N siti web.

È possibile identificare tre tipi di hosting virtuale :
 * basato sull'IP (VH host based) : da eseguire quando si hanno più indirizzi IP;
 * basato sul nome (VH name based) : da eseguire quando si hanno più nomi DNS;
 * basato sulla porta (VH port based).

Per scegliere tra le diverse configurazioni si possono seguire i punti successivi come linee guida:
 * N interfacce di rete: VH host based;
 * Singola interfaccia di rete: VH name based ;
 * N nomi per host: VH name based;
 * Necessità di separare i web servers per differenti politiche di sicurezza: si sconsiglia il VH in quanto si deve effettuare una separazione delle istanze del server Web.

== VH Host based ==

Si utilizza la direttiva '''<Virtual``Host>''' da specificare all'interno del file `/etc/apache2/sites-availabe/miosito` e all'interno delle opzioni di directory come nell'esempio riportato: {{{
</VirtualHost>
BindAddress 0.0.0.0
Port 80
Linea 178: Linea 181:

UserDir <public_html>

Alias /icons/ /usr/local/apache/icons/

ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/
}}}

 * '''Document``Root''' : è la radice dell'albero dei documenti per questo sito

 * '''Alias''' e '''Script``Alias''' : sono degli alias names per le directory locali nelle quali si trovano icone e scripts

Esempio : {{{
http://example.com/man.html viene tradotto in /usr/local/apache/htdocs/man.html

http://example.com/cgi-bin/rpm-query viene tradotto in /usr/local/apache/cgi-bin/rpm-query
}}}

Alcune direttive di tipizzazione dei file: {{{
Type/sub-type extension1 [extension2...]
}}}

Esempio : {{{
Video/mpeg mpeg mpg mpe

Video/quicktime qt mov

Video/x-msvideo avi

'''AddType''' newtype/newsub-type extension1..
}}}

Esempio: {{{
AddType text/doc doc
}}}

Alcune direttive per la specifica del linguaggio: {{{
AddEncoding x-gzip gz tgz

AddFileType text/html html

AddLanguage en .en
}}}

Le direttive per la gestione dinamica dell'albero dei documenti e la redirezione dei documenti
{{{
Redirect [temporary | permanent] /images http://example.com/icons

RedirectMatch (.*)\.gif$ http://example.com$1.jpg
}}}

Il client che richiede GIF file viene rediretto verso JPEG files

Le direttive per l'indicizzazione delle directorie: {{{
DirectoryIndex <index dir predefinito>
}}}

Esempio: {{{
DirectoryIndex index.html
}}}

Se un client richiede [http://www.example.com/dir1] ottiene come pagina web index.html.

Le direttive per la generazione di indici dinamici di directory: {{{
Option + Indexes
}}}

Le direttive per la gestione dell'elenco dei files contenuti in una directory: {{{
IndexIgnore README* *.txt
}}}

Nasconde al client i files README* e tutti i file con estensione `.txt`.

Altre direttive: {{{
IndexOptions , HeaderName
}}}

Scelta icone per rappresentazione file: {{{
AddIcon <icon> <match1> [<match2>
.]

AddIconByType ..

AddIconByEncoding ..

DefaultIcon ..
}}}

Esempio scelta di icone: {{{
AddIcon /icons/binary.gif .bin .exe

AddIcon /icons/text.gif .txt

AddIconByType /icons.apache/text.gif text/*

AddAltByType TXT text/*

DefaultIcon /icons/unknown.gif
}}}

Configurazione delle opzioni a livello di directory: {{{
Options

All (tutte le opzioni)

ExecCGI

FollowSymLinks

MultiViews

SymLinksIfOwnerMatch
}}}

 * '''Exec``CGI''' : : esecuzione script CGI

 * '''Follow``Sym``Links''' : segue link simbolici

 * '''Multi``Views''' : seleziona documento che si avvicina di + alla richiesta del client quando il documento richiesto non esiste

 * '''Sym``Links``If``Owner``Match''' : Segue link se owner di src e dst coincidono

=== Direttive protezione sito web ===

 * Autorizzazione
 * Controllo accesso
 * Autorizzazione basata sull'host
 * Autorizzazione basata sull'utente
 * Autenticazione

==== Autorizzazione basata sull'Host ====

Le direttive da usare sono le seguenti: {{{
Deny <hostname> | a.b.c.d/mask

Allow <hostname> | a.b.c.d/mask

Order allow,deny : Processa le regole nell'ordine indicato
}}}

==== Autorizzazione basata sull'Utente ====

Per configurare l'autenticazione a livello utente procedere come segue:

 * Creare file per utenti : '''/usr/local/apache/conf/htuser'''

 * Creare utenti in '''/usr/local/apache/conf/htuser''' con comando: {{{
htpasswd -c htuser <nomeutente>
}}}

 * Creare gruppo '''htusers''' nel file '''/usr/local/apache/conf/htgroup'''
 
il formato del file è il seguente: {{{
Groupname: user1 user2 user3 ..
}}}

Direttive per autorizzazione basata sull'utente da inserire nel file '''/etc/apache2/sites-enabled/000-default''':
{{{
AuthUserFile conf/htuser

AuthGroupFile conf/htgroup
}}}

Impostazioni controllo accesso: {{{
Require user username1 username2

Require group groupname1 groupname2

Require valid-user
}}}

 * la prima direttiva consente l'accesso a '''username1 username2..'''

 * la seconda direttiva consente l'accesso a '''groupname1 groupname2..'''

 * la seconda direttiva consente l'accesso solo agli utenti definiti in '''htuser'''

=== Hosting virtuale ===

In generale una singola macchina ospita più di un sito web.

La gestione dei siti allora può essere fatti nei seguenti modi :

 * N siti = N * M processi web server (se M è n° processi per singola istanza sito web,vuol dire che M processi gestiscono ciascun sito)

 * Virtual host = N siti = M processi web server (sempre 1 singola istanza web,ovvero gli M processi gestiscono tutti gli N siti web)

È possibile identificare tre tipi di hosting virtuale :

 * basato sull'IP (VH host based) : da eseguire quando avete più di indirizzo IP

 * basato sul nome (VH name based) : da eseguire quando avete più nomi DNS (alias etc...)

 * basato sulla porta (VH port based)


I metodi per la scelta delle tipologie di hosting sono :

 * N interfacce di rete : VH host based

 * Singola interfaccia di rete : name based VH

 * N nomi per host : VH name based

 * Necessità di separazione web servers per differenti policies protezione : Non scegliete il VH poichè dovete effettuare una separazione delle istanze del vostro web server

==== Host based VH ====

Utilizzare la direttiva '''<Virtual``Host>''' da specificare all'interno di '''/etc/apache2/sites-enabled/000-default''' e all'interno delle opzioni di directory come nell'esempio riportato: {{{
BindAddress 0.0.0.0

Port 80

DocumentRoot /usr/local/apache/htdocs
Linea 394: Linea 182:
Linea 396: Linea 183:
Linea 398: Linea 184:
Linea 400: Linea 185:
Linea 402: Linea 186:
Linea 406: Linea 189:
Qui il sito web di default serve '''site1.example.com''' , mentre l'IP '''192.168.1.2''' serve il sito '''site2.example.com'''.

==== Name based VH ====
In questo caso il sito web di default serve `site1.example.com`, mentre l'IP `192.168.1.2` serve il sito `site2.example.com`.

== VH Name based ==
Linea 412: Linea 195:
Linea 414: Linea 196:
Linea 416: Linea 197:
Linea 418: Linea 198:
Linea 420: Linea 199:
Linea 422: Linea 200:
Linea 424: Linea 201:
Linea 426: Linea 202:
Linea 428: Linea 203:
Linea 430: Linea 204:
Linea 432: Linea 205:
Linea 434: Linea 206:
Linea 438: Linea 209:
Qui come vedete si ha un unico IP ma due nomi server distinti (due nomi nel DNS,di cui uno sarà un alias name) che servono due siti distinti.

==== Esecuzione di N istanze su singolo host ====

Creare N files di configurazione per N istanze :

 * Aggiungere righe per start e stop httpd al file '''/etc/init.d/apache2'''

 * In '''/etc/init.d/apache2''' definire gli N diversi files di configurazione '''apache2[i].conf''' usati dalle N istanze dei web servers

 * Usare nei '''apache2[i].conf''' le diverse direttive specifiche come mostrato in precedenza

 * Specificare: {{{
BindAddress

Port

Listen

ErrorLog
}}}

== Configurazione di un server Web protetto con OpenSSL ==

I comandi da specificare sono :

 * Comando da shell: {{{
apache2-ssl-certificate -days 3650
}}} sostituite '''3650''' con la durata del certificato in giorni.

 * Caricare modulo ssl in /etc/apache2/mods-enabled con comando: {{{
ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf

ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load
}}}

 * Specificare la direttiva '''Listen 443''' nel file '''/etcapache2/ports.conf'''

 * Modificare '''/etc/apache2/sites-available/default''' aggiungendo le righe: {{{
NameVirtualHost *:443

<VirtualHost *:443>
#Inserire qui l'indirizzo email dell'amministratore del server
ServerAdmin webmaster@localhost

#Inserire qui la DocumentRoot del server virtuale
#In questa cartella ci sono le pagine che viaggeranno sul canale criptato
DocumentRoot /var/www

SSLEngine On

SSLCertificateFile /etc/apache2/ssl/apache.pem

</VirtualHost>
}}}

Riavviare apache2 eseguendo da shell il comando '''/etc/init.d/apache2 restart'''

== Supporto PHP ==

Caricare i moduli con i comandi da shell: {{{
ln -s /etc/apache2/mods-available/php.conf /etc/apache2/mods-enabled/php.conf

ln -s /etc/apache2/mods-available/php.load /etc/apache2/mods-enabled/php.load
}}}

== Controllo dei file di log ==

Tutti i file di log si trovano nella directory '''/var/log/apache2''' e sono:

 * access.log

 * error.log
In questo caso si ha un unico IP ma due nomi server distinti (due nomi nel DNS,di cui uno sarà un alias name) che servono due siti distinti.

= Server HTTPS =

Il modulo `ssl` fornisce al server Apache la capacità di criptare la comunicazione con il client. Quando questo tipo di comunicazione criptata è attivo, l'URL del sito che si sta visitando è preceduto dal prefisso `https://`. Per utilizzare questa estensione è sufficiente:
 0. Abilitare il modulo digitando in una finestra di terminale, il comando: {{{
sudo a2enmod ssl}}}
  * Con l'installazione base di Apache viene fornito un sito, chiamato `default-ssl`, utilizzabile come base di partenza per la configurazione del proprio sito protetto con SSL. Come configurazione di partenza, questo sito utilizza una chiave ed un certificato generati automaticamente dal pacchetto '''''ssl-cert'''''.
 0. Abilitare il sito `default-ssl` con il comando {{{
sudo a2ensite default-ssl
}}}
 0. Modificare le direttive
  * SSLCertificateFile;
  * SSLCertificateKeyFile;
 in modo che puntino alle directory dove sono collocati i file relativi al certificato e alla chiave del vostro sito;
 0. Riavviare il server Apache con il comando {{{
sudo service apache2 restart
}}}

= Controllo dei file di log =

Tutti i file di log si trovano nella directory `/var/log/apache2`. In via predefinita, sono:
 * `access.log`
 * `error.log`
Linea 514: Linea 236:

= Supporto PHP e MySQL =
== PHP ==

[[AmministrazioneSistema/InstallareProgrammi|Installare]] i pacchetti [[apt://libapache2-mod-php5,php5-cli,php5-common,php5-cgi | libapache2-mod-php5, php5-cli, php5-common, php5-cgi]].

Riavviare '''Apache''' digitando in una finestra di terminale: {{{
sudo service apache2 restart
}}}

== MySQL ==

Fare riferimento alla [[Server/MySql|relativa guida]].

== Installazione All-in-One ==

Se si vogliono installare comtamporaneamente i pacchetti Apache2 con supporto PHP e MySQL, ovvero se si vuole disporre di un server '''LAMP''' (Linux-Apache-My``Sql-Php) è possibile procedere in modo veloce con la seguente procedura:

 0. [[AmministrazioneSistema/InstallareProgrammi|Installare]] il pacchetto [[apt://tasksel|tasksel]]
 0. Installare il server LAMP con il comando{{{
sudo tasksel install lamp-server
}}}

= Ulteriori risorse =

 * [[http://httpd.apache.org/docs/2.2/|Documentazione di Apache]] (en)
 * [[http://www.modssl.org/docs/|Documentazione del modulo SSL]] (en)
Linea 515: Linea 265:
CategoryServer CategoryNuoviDocumenti CategoryServer


Problemi in questa pagina? Segnalali in questa discussione

Introduzione

In questa guida verrà spiegato come installare e configurare il Server Web Apache e come abilitare il supporto a php e MySql.

Definizione di Server Web:

  • "Un server web è un servizio, e per estensione il computer su cui è in esecuzione, che si occupa di fornire, tramite software dedicato e su richiesta dell'utente, file di qualsiasi tipo, tra cui pagine web (successivamente visualizzabili dal browser sul PC dell'utente). Le informazioni inviate dal server web all'utente viaggiano in rete trasportate dal protocollo HTTP. L'insieme di server web dà vita al World Wide Web, uno dei servizi più utilizzati di Internet." (cit. Wikipedia)

Intallazione

Installare il pacchetto apache2.

Aprire il proprio browser e accedere all'indirizzo http://127.0.0.1 oppure http://localhost. Se l'installazione è andata a buon fine sarà possibile leggere il messaggio:

It works!

This is the default web page for this server.

The web server software is running but no content has been added, yet.

Configurazione

Di seguito verranno elencati i file e le cartelle presenti all'interno di /etc/apache2 che sono necessari per la configurazione del server Apache:

  • apache2.conf: è il file di configurazione principale. In esso sono contenute le impostazioni che saranno applicate globalmente a tutti i siti.

  • conf.d: cartella che contiene file di configurazione globali. Software che utilizzano il server Apache per fornire contenuti all'utente finale (per esempio PhpMyAdmin), possono aggiungere file o collegamenti simbolici in questa cartella.

  • envvars: in questo file sono definite e impostate le variabili d'ambiente del server Apache.

  • httpd.conf: un file di configurazione, inizialmente vuoto, che può essere utilizzato per specifiche direttive impostate dall'utente che agiscono globalmente sul server.

  • mods-available: in questa cartella sono contenuti i file di configurazione per avviare i moduli del server e per configurare gli stessi. Non tutti i moduli hanno file di configurazione specifici.

  • mods-enabled: in questa cartella sono presenti dei collegamenti simbolici ai moduli presenti nella cartella /etc/apache2/mods-available. Tutti i moduli che hanno un collegamento simbolico in questa cartella sono abilitati e avviati all'interno del server Apache.

  • ports.conf: contiene le direttive per impostare le porte TCP sulle quali il server Apache resterà in ascolto.

  • sites-available: in questa cartella sono contenuti i file di configurazione per i Virtual Host (di seguito VH). I VH consentono di avere numerosi siti con configurazioni diverse l'uno dall'altro.

  • sites-enabled: come per la cartella mods-enabled, contiene collegamenti simbolici a /etc/apache2/sites-available. Quando una configurazione presente in sites-available è collegata all'interno di questa cartella, il sito corrispondente verrà configurato e avviato insieme al server Apache.

File di configurazione aggiuntivi possono essere impostati attraverso la direttiva Include. Per esempio, la direttiva

Include /etc/apache2/conf.d/

farà in modo che il server Apache importi le impostazioni presenti all'interno della cartella /etc/apache2/conf.d/.

Per rendere effettive le modifiche sui file di configurazione è necessario riavviare il server digitando con permessi di amministrazione il seguente comando in una finestra di terminale:

sudo service apache2 restart

Configurazione di Base

In questa sezione vengono fornite e commentate le direttive più importanti per il funzionamento e la configurazione del server Apache. Per ulteriori informazioni, fare riferimento alla documentazione ufficiale.

  • ServerRoot: definisce la cartella in cui sono presenti i file del server. In Ubuntu è /etc/apache2 e contiene tutti file di configurazione.

  • DocumentRoot: definisce la cartella in cui sono presenti i file che verranno richiesti al server web. In Ubuntu, in via predefinita, è la cartella /var/www.

  • ServerAdmin: definisce l'indirizzo e-mail da includere nei messaggi di errore inviati al client.

  • ServerName: contiente informazioni sull'hostname al quale il server Apache deve rispondere. Può essere specificato un hostname diverso per ogni VH.

  • Listen: definisce la porta sulla quale il server è in ascolto.

  • User e Group: definiscono l'utente e il gruppo proprietari del processo. Il server Apache non dovrebbe mai essere avviato dall'utente root.

  • ErrorLog: definisce il percorso per i file di log degli errori.

  • LockFile: il lock file sul file di log (da modificare solo se il log file di apache2 è montato via NFS).

  • PidFile: il file che contiene il PID del processo padre apache2.

  • TimeOut: il tempo dopo il quale apache2 chiude una connessione client in stato idle.

  • KeepAlive On: sono permesse connessioni persistenti, ovvero in grado di servire più di una richiesta di uno stesso client.

  • MaxKeepAliveRequests: il massimo numero di richieste che in una singola connessione un client può fare al server. Dopo tale numero le richieste verranno scartate.

  • KeepAliveTimeout`: tempo, in secondi, da attendere per effettuare un'altra richiesta da parte di uno stesso client su una stessa connessione persistente.

  • StartServers: numero di processi server avviati.

  • MinSpareServers: numero minimo di processi liberi, ovvero avviati per supplire ad improvvisi picchi di carico.

  • MaxSpareServers: numero massimo di processi liberi.

  • MaxClients: massimo numero di processi apache2 che possono essere avviati.

  • MaxRequestsPerChild: numero massimo di richieste che il server è in grado di processare per ciascun thread.

  • Include: direttive di inclusione. Apache2 si serve di tali direttive per dichiarare indirizzo di binding, porta di ascolto ed altri parametri specifici di configurazione in file distinti.

Personalizzare il proprio sito

In via predefinita, Apache utilizza un unico file di configurazione globale per la gestione dei VH. Si tratta del file /etc/apache2/sites-available/default. Se il server dovrà servire un unico sito è possibile mantenere questa configurazione, personalizzando i campi necessari. In particolare:

  • DocumentRoot: qualora si volesse utilizzare una cartella diversa da quella predefinita (/var/www).

  • ServerAdmin: un amministratore diverso può essere specificato per ogni sito;

  • ServerName: è possibile assegnare un valore diverso a questa direttiva per ogni VH configurato. Se, ad esempio, si imposta la direttiva come

    ServerName host.example

    si otterrà che, digitando nel browser l'indirizzo

    http://host.example

    il server Apache restituirà solo i dati relativi al sito configurato con questo ServerName.

  • ServerAlias: attraverso questa direttiva è possibile definire altri alias che puntino sempre al sito http://host.example. Per meglio comprendere la funzione di questa direttiva, se si imposta

    ServerAlias *.host.example

    si otterrà che il sito rispondente al dominio host.example sarà richiamato ogni qual volta nel browser si digiti un indirizzo che termini con host.example (http://www.host.example, http://pippo.host.example, http://foo.host.example);

Per gli ultimi due esempi, assicurarsi di avere configurato correttamente il file /etc/hosts.

Creare un nuovo sito

Utilizzare il file di configurazione di default come base. Fare riferimento al paragrafo Hosting Virtuale per avere informazioni più dettagliate.

  1. Creare una copia del file di configurazione di default digitando con permessi di amministrazione il seguente comando in una finestra di terminale:

    sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/miosito

    miosito sarà il file di configurazione del nuovo sito che si vuole impostare;

  2. Personalizzare la configurazione di miosito utilizzando le direttive necessarie;

  3. Abilitare il sito con il comando

    sudo a2ensite miosito
  4. Riavviare il server Apache per rendere effettive le modifiche con il comando:

    sudo service apache2 restart
  5. Per disabilitare un sito precedentemente abilitato utilizzare il comando:

    sudo a2dissite miosito

Altre direttive utili

Molte altre direttive possono esse impostate per ogni sito che si ha la necessità di configurare. Per un elenco completo si può fare riferimento alla documentazione ufficiale. Alcune di queste, che possono risultare utili vengono riportate di seguito:

  • Alias: questa direttiva serve a specificare un percorso diverso da quello impostato in DocumentRoot per una richiesta. Ad esempio, impostando

    Alias /image /home/utente/immagini

    si otterrà che, digitando nel browser il collegamento

    http://host.example/image/casa.jpg

    il file richiesto sarà caricato dalla posizione

    /home/utente/immagini/casa.jpg
  • Allow from e Deny from: attraverso queste direttive è possibile specificare gli indirizzi IP o gli hostname ai quali è permesso accedere al sito (Allow) e quelli ai quali ciò è impedito (Deny). Ad esempio, per impedire ad uno specifico IP di accedere al sito si può usare la direttiva

    Deny from 10.252.46.165
  • DirectoryIndex: questa direttiva specifica il file da cercare quando un utente cerca di accedere ad una determinata posizione nel sito. Ad esempio, impostando

    DocumentIndex index.html

    se si tenta di accedere all'indirizzo

    http://host.example/template

    si verrà reindirizzati al file

    http://host.example/template/index.html

    È possibile specificare più di un DocumentIndex nella forma

    DocumentIndex index.html index.php error.html

    In questo modo se, nella posizione specificata non esiste né il file index.html né il file index.php si verrà reindirizzati al file error.html.

  • IndexIgnore: permette di nascondere alcuni files al client. Ad esempio, se si specifica

    IndexIgnore README* *.txt 

    tutti i files README* e tutti i file con estensione .txt vengono nascosti al client.

Autorizzazione basata sull'Utente

Per configurare l'autenticazione a livello utente procedere come segue:

  1. Creare file per utenti: /usr/local/apache/conf/htuser

  2. Creare utenti in /usr/local/apache/conf/htuser con comando:

    htpasswd -c htuser <nomeutente>
  3. Creare gruppo htusers nel file /usr/local/apache/conf/htgroup. Il formato del file è il seguente:

    Groupname: user1 user2 user3 ..
  4. Inserire nel file /etc/apache2/sites-available/default le seguenti direttive:

    AuthUserFile conf/htuser
    AuthGroupFile  conf/htgroup
  5. Impostazioni controllo accesso:

    Require user username1 username2  
    Require group groupname1 groupname2 
    Require valid-user 
    • la prima direttiva consente l'accesso a username1 username2..

    • la seconda direttiva consente l'accesso a groupname1 groupname2..

    • la terza direttiva consente l'accesso solo agli utenti definiti in htuser

Hosting virtuale

Un singolo server può ospitare più siti. La gestione dei siti può essere fatta nei seguenti modi:

  • N siti = N * M processi web server. se M è il numero di processi per singola istanza del sito web, vuol dire che M processi gestiscono ciascun sito.
  • Virtual host = N siti = M processi web server. Si ha sempre una singola istanza web, ovvero gli M processi gestiscono tutti gli N siti web.

È possibile identificare tre tipi di hosting virtuale :

  • basato sull'IP (VH host based) : da eseguire quando si hanno più indirizzi IP;
  • basato sul nome (VH name based) : da eseguire quando si hanno più nomi DNS;
  • basato sulla porta (VH port based).

Per scegliere tra le diverse configurazioni si possono seguire i punti successivi come linee guida:

  • N interfacce di rete: VH host based;
  • Singola interfaccia di rete: VH name based ;
  • N nomi per host: VH name based;
  • Necessità di separare i web servers per differenti politiche di sicurezza: si sconsiglia il VH in quanto si deve effettuare una separazione delle istanze del server Web.

VH Host based

Si utilizza la direttiva <VirtualHost> da specificare all'interno del file /etc/apache2/sites-availabe/miosito e all'interno delle opzioni di directory come nell'esempio riportato:

</VirtualHost>
BindAddress 0.0.0.0
Port 80
DocumentRoot /usr/local/apache/htdocs
ServerName site1.example.com
<VirtualHost 192.168.1.2>
DocumentRoot /usr/local/apache/htdocs2
ServerName site2.example.com
...
</VirtualHost> 

In questo caso il sito web di default serve site1.example.com, mentre l'IP 192.168.1.2 serve il sito site2.example.com.

VH Name based

Esempio:

Listen 192.168.1.232
NameVirtualHost 192.168.1.232
<VirtualHost 192.168.1.232>
DocumentRoot /home/httpd/ex1
ServerName www1.example.com
..
</VirtualHost>
..
<VirtualHost 192.168.1.232>
DocumentRoot /var/apache/htdocs2
ServerName www2.example.com
..
</VirtualHost>

In questo caso si ha un unico IP ma due nomi server distinti (due nomi nel DNS,di cui uno sarà un alias name) che servono due siti distinti.

Server HTTPS

Il modulo ssl fornisce al server Apache la capacità di criptare la comunicazione con il client. Quando questo tipo di comunicazione criptata è attivo, l'URL del sito che si sta visitando è preceduto dal prefisso https://. Per utilizzare questa estensione è sufficiente:

  1. Abilitare il modulo digitando in una finestra di terminale, il comando:

    sudo a2enmod ssl
    • Con l'installazione base di Apache viene fornito un sito, chiamato default-ssl, utilizzabile come base di partenza per la configurazione del proprio sito protetto con SSL. Come configurazione di partenza, questo sito utilizza una chiave ed un certificato generati automaticamente dal pacchetto ssl-cert.

  2. Abilitare il sito default-ssl con il comando

    sudo a2ensite default-ssl
  3. Modificare le direttive
    • SSLCertificateFile;
    • SSLCertificateKeyFile;
    in modo che puntino alle directory dove sono collocati i file relativi al certificato e alla chiave del vostro sito;
  4. Riavviare il server Apache con il comando

    sudo service apache2 restart

Controllo dei file di log

Tutti i file di log si trovano nella directory /var/log/apache2. In via predefinita, sono:

  • access.log

  • error.log

Forniscono utili informazioni per il debugging dei problemi che si possono presentare.

Supporto PHP e MySQL

PHP

Installare i pacchetti libapache2-mod-php5, php5-cli, php5-common, php5-cgi.

Riavviare Apache digitando in una finestra di terminale:

sudo service apache2 restart

MySQL

Fare riferimento alla relativa guida.

Installazione All-in-One

Se si vogliono installare comtamporaneamente i pacchetti Apache2 con supporto PHP e MySQL, ovvero se si vuole disporre di un server LAMP (Linux-Apache-MySql-Php) è possibile procedere in modo veloce con la seguente procedura:

  1. Installare il pacchetto tasksel

  2. Installare il server LAMP con il comando

    sudo tasksel install lamp-server

Ulteriori risorse


CategoryServer