## page was renamed from Server/WebServer #LANGUAGE it ## page was renamed from GuidaWebServer <
> <> <> = Introduzione = 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 client. = Installazione = Aprite una shell ed al prompt dei comandi digitate: {{{ sudo apt-get install apache2 }}} Apt installerà ''apache2'' risolvendo automaticamente le dipendenze necessarie ed avviando il server web nella configurazione di default. = Configurazione e opzioni globali = 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 file 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 due directory sono dei link a quelli contenuti nelle due directory `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 link ai file corrispondenti in `mods-available`. Per esempio per supportare ssl occorre immettere comandi: {{{ sudo ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf sudo 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`. 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 }}} 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 }}} Apache 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 MinSpareServers MaxSpareServers }}} Gli spare servers consentono al Web Server di rispondere più velocemente in caso di improvvisi picchi di richieste , ma occupano anche preziosa memoria dato che in casi di traffico normale non fanno nulla! {{{ MaxClients }}} I parametri per il nome del server sono : {{{ ServerName ServerAdmin }}} = Personalizzare il proprio sito = I parametri da specificare nel file `/etc/apache2/sites-enabled/000-default` sono: {{{ DocumentRoot /usr/local/apache/htdocs UserDir 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 file {{{.gif}}} file viene reindirizzato verso file {{{.jpeg}}}. Le direttive per l'indicizzazione delle cartelle: {{{ DirectoryIndex }}} 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 [ .] 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 == Autorizzazione basata sull'Host == Le direttive da usare sono le seguenti: {{{ Deny | a.b.c.d/mask Allow | 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 }}} * 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 terza 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 `` 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 ServerName site1.example.com DocumentRoot /usr/local/apache/htdocs2 ServerName site2.example.com ... }}} 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 === Esempio: {{{ Listen 192.168.1.232 NameVirtualHost 192.168.1.232 DocumentRoot /home/httpd/ex1 ServerName www1.example.com .. .. DocumentRoot /var/apache/htdocs2 ServerName www2.example.com .. }}} 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 server * 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 #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 }}} Riavviare apache2 eseguendo da shell il comando {{{ /etc/init.d/apache2 restart }}} = Supporto PHP = Prima di procedere è necessario abilitare il [[Repository/Componenti|componente]] '''main''' dei [[Repository|repository]] ufficiali. [[AmministrazioneSistema/InstallareProgrammi|Installare]] i seguenti pacchetti: * ''libapache2-mod-php5'' * ''php5-cli'' * ''php5-common'' * ''php5-cgi'' Caricare i moduli con i comandi da shell: {{{ sudo ln -s /etc/apache2/mods-available/php.conf /etc/apache2/mods-enabled/php.conf sudo ln -s /etc/apache2/mods-available/php.load /etc/apache2/mods-enabled/php.load }}} Riavviare apache digitando in una finestra di terminale: {{{ sudo /etc/init.d/apache2 restart }}} = Controllo dei file di log = Tutti i file di log si trovano nella directory `/var/log/apache2` e sono: * `access.log` * `error.log` Forniscono utili informazioni per il debugging dei problemi che si possono presentare. ---- CategoryHomepage