Gestione della banda in Apache: differenze tra le versioni

Riga 1: Riga 1:
=Introduzione=
=Introduzione=
Questo articolo affronta il problema della gestione della banda in Apache (Ver. 1 e Ver. 2), mostrando come installare e configurare tre diversi moduli utilizzabili a tale fine:
 
==mod_bandwidth==
Questo howto nasce dopo due giornate passate a navigare alla ricerca di un metodo per ridurre la banda in uscita del server web Apache, a livello di server e/o a livello di virtual host.
* HomePage: http://www.cohprog.com/mod_bandwidth.html
 
* Licenza: Apache Group licence
Problemi con il modulo a parte, che hanno dilatato moltissimo i tempi necessari per avere una soluzione funzionante, questa soluzione risulta essere molto facile, ed a sua volta anche molto potente e versatile.
* Copyright: Yann Stettler and CohProg S�RL
 
* Versione Apache: 1
==bw_mod==
* HomePage: http://www.ivn.cl/apache/
* Licenza: Apache 2.0 License/[http://www.ivn.cl/apache/LICENSE.txt Ivn Project License]
* Copyright: Ivan Barrera A.
* Versione Apache: 2
==mod_bwshare==
* HomePage: http://www.topology.org/src/bwshare/README.html
* Licenza: [http://www.topology.org/src/bwshare/LICENCE Alan Kennington's modified Artistic Licence]
* Copyright: Alan Kennington
* Versione Apache: 1 e 2


=Installazione=
=Installazione=
Riga 68: Riga 57:


==bw_mod==
==bw_mod==
Come prima cosa procuriamoci il modulo dal [http://www.ivn.cl/apache/ sito dello sviluppatore]. A questo punto estraiamolo:
<pre># tar vzxf bw_mod-6.0.tgz</pre>
spostiamoci nella cartella appena creata (''bw_mod-6.0.tgz'') e verifichiamo che sia presente il file ''bw_mod-6.0.c''.
Ora, per poter compilare il nostro modulo, ci servono gli strumenti per farlo: nel nostro caso dovremo installare, tramite apt-get, il pacchetto '''apache2-dev''':
<pre># apt-get install apache2-dev</pre>
Bene, ora compiliamo tramite il comando ''/usr/bin/apsx2'':
<pre># /usr/bin/apxs2 -i -a -c bw_mod-0.6.c</pre>
Se non ci sono errori, possiamo procedere. Alla fine della compilazione sono state automaticamente aggiunte queste righe al file ''/etc/apache2/httpd.conf'':
<pre>Include /etc/apache2/sysconfig.d/loadmodule.conf
LoadModule bw_module /usr/lib/apache2/bw_mod-0.6.so</pre>
{{Box | Nota |Apache2 usa come file di configurazione ''/etc/apache2/apache2.conf''; tuttavia, per retrocompatibilit, presente anche un file ''/etc/apache2/httpd.conf'' in cui vengono inseriti solitamente gli "includes" dei moduli di terze parti laddove questi non usino il sistema '''mods-available/mods-enabled'''.
In questo caso non dobbiamo preoccuparci, in quanto nel file ''apache2.conf'' c' un richiamo a ''httpd.conf''.}}


==mod_bwshare==
==mod_bwshare==
Riga 121: Riga 96:




===Direttive globali di configurazione===
==Direttive globali di configurazione==


===='''BandWidthDataDir'''====
==='''BandWidthDataDir'''===
'''Sintassi''': BandWidthDataDir <directory><br/>
'''Sintassi''': BandWidthDataDir <directory><br/>
'''Default''': "/tmp/apachebw"<br/>
'''Default''': "/tmp/apachebw"<br/>
Riga 130: Riga 105:




===='''BandWidthModule'''====
==='''BandWidthModule'''===
'''Sintassi''': BandWidthModule <On|Off><br/>
'''Sintassi''': BandWidthModule <On|Off><br/>
'''Default''': Off<br/>
'''Default''': Off<br/>
Riga 139: Riga 114:




===='''BandWidthPulse'''====
==='''BandWidthPulse'''===
'''Sintassi''': BandWidthPulse <microseconds><br/>
'''Sintassi''': BandWidthPulse <microseconds><br/>
'''Default''':<br/>
'''Default''':<br/>
Riga 154: Riga 129:




===Direttive per la configurazione di Directory e/o VirtualServer===
==Direttive per la configurazione di Directory e/o VirtualServer==


===='''BandWidth'''====
==='''BandWidth'''===
'''Sintassi''': BandWidth <domain|ip|all> <rate><br/>
'''Sintassi''': BandWidth <domain|ip|all> <rate><br/>
'''Default''': none<br/>
'''Default''': none<br/>
Riga 177: Riga 152:




===='''LargeFileLimit'''====
==='''LargeFileLimit'''===
'''Sintassi''': LargeFileLimit <filesize> <rate><br/>
'''Sintassi''': LargeFileLimit <filesize> <rate><br/>
'''Default''': none<br/>
'''Default''': none<br/>
Riga 196: Riga 171:




===='''MaxConnection'''====
==='''MaxConnection'''===
'''Sintassi''': MaxConnection <connections><br/>
'''Sintassi''': MaxConnection <connections><br/>
'''Default''': 0 (illimitate)<br/>
'''Default''': 0 (illimitate)<br/>
Riga 204: Riga 179:




===='''MinBandWidth'''====
==='''MinBandWidth'''===
'''Sintassi''': MinBandWidth <domain|ip|all> <rate><br/>
'''Sintassi''': MinBandWidth <domain|ip|all> <rate><br/>
'''Default''': all 256<br/>
'''Default''': all 256<br/>
Riga 231: Riga 206:
{{Box|NOTA:|Se ad una richiesta devono essere applicati sia un limite impostato nella direttiva "BandWidth" sia uno impostato nella direttiva "LargeFileLimit", verr� applicato il pi� piccolo (ma mai minore a quello eventialmente indicato nella direttiva "MinBandWidth")}}
{{Box|NOTA:|Se ad una richiesta devono essere applicati sia un limite impostato nella direttiva "BandWidth" sia uno impostato nella direttiva "LargeFileLimit", verr� applicato il pi� piccolo (ma mai minore a quello eventialmente indicato nella direttiva "MinBandWidth")}}


==bw_mod==
In Apache2 la configurazione globale del server pu essere separata da quella dei VHosts e delle Directories. Sono presenti, infatti, due files: <tt>/etc/apache2/apache2.conf</tt>, in cui sono inserite le configurazioni globali del server (praticamente la maggior parte delle direttive del vecchio <tt>httpd.conf</tt>); e <tt>/etc/apache2/sites-enabled/000-default</tt>, in cui ci sono le direttive per VHosts e Directories (in realt un link simbolico al file <tt>/etc/apache2/sites-available/default</tt>).<br/>
Per poter, quindi, configurare il nostro ''bw_mod'', possiamo inserire le prime due direttive della seguente lista in <tt>apache2.conf</tt> come variabili globali, mentre tutte le altre possono essere inserite indifferentemente in <tt>apache2.conf</tt>, se vogliamo applicare le limitazioni a tutti i siti serviti dal serverweb, oppure in <tt>000-default</tt> nelle apposite sezioni, se vogliamo applicarle a specifici VHosts o Directories.<br/>
{{ Warningbox | Momentaneamente il modulo '''non supporta il sistema .htaccess''', quindi non possibile inserire le direttive in questi files.<br/>
In alcuni punti della guida si fa riferimento alla configurazione di direttive del modulo ''mod_bandwidth'' dove indicata la possibilit d'uso in .htaccess: con ''bw_mod'' non bisogna prendere in considerazione quei '''contesti'''.}}


==='''Direttive globali'''===
===='''BandWidthModule'''====
'''Sintassi''': <tt>BandWidthModule On|Off</tt><br/>
'''Default''': <tt>Off</tt><br/>
Tramite questa direttiva attiviamo o disattiviamo il modulo
===='''BandWidthDebug'''====
'''Sintassi''': <tt>BandWidthDebug On|Off</tt><br/>
'''Default''': <tt>Off</tt><br/>
Questa direttiva serve ad attivare la funzione di debug (utile per chi si vuole divertire a sviluppare il modulo).
==='''Direttive per la configurazione di Directory e/o VirtualServer'''===
===='''ForceBandWidthModule'''====
'''Sintassi''': <tt>ForceBandWidthModule On|Off</tt><br/>
'''Default''': <tt>On</tt><br/>
Di default, naturalmente, il modulo processer e applicher i limiti a ogni richiesta al webserver. In caso si voglia indicare manualmente quali files debbano essere soggetti alla limitazione di banda, si pu settare questa direttiva su ''off'', aggiungendo, poi, i tipi di file cui deve essere applicato il limite:
<pre>ForceBandWidthModule Off
AddOutputFilterByType BW_MOD text/html text/php</pre>
===='''BandWidth'''====
'''Sintassi''': <tt>BandWidth <Origine della connessione> <Limite di banda in bytes/s></tt><br/>
'''Default''': <tt>all 0</tt><br/>
Vedi [[#BandWidth | BandWidth]] del ''mod_bandwidth''.
===='''MinBandWidth'''====
'''Sintassi''': <tt>MinBandWidth <Origine della connessione> <Limite di banda in bytes/s></tt><br/>
'''Default''': <tt>all 0</tt><br/>
Vedi [[#MinBandWidth | MinBandWidth]] del ''mod_bandwidth''.
===='''LargeFileLimit'''====
'''Sintassi''': <tt>LargeFileLimit <Tipo di file> <Dimensione minima file in KB> <Limite in bytes/s></tt><br/>
'''Default''': <tt>none</tt><br/>
Con questa direttiva possiamo indicare un limite di trasferimento <Limite in bytes/s> per un determinato tipo di file <Tipo di file> che abbia la dimensione minima indicata con <dimensione minima del file in KB>.
Il parametro <Tipo di file> viene espresso con l'estensione del file (p.e. ''.avi'', ''.exe'', ''.tgz''); si pu usare il carattere jolly ''*'' per indicare ogni tipo di file.
La <Dimensione minima file in KB>, come scritto, viene indicata in kilobytes.
Il <Limite in bytes/s> indica la velocit massima alla quale verranno trasferiti i files interessati da questa direttiva.
Per esempio, con:
<pre>LargeFileLimit .avi 500 10240</pre>
diciamo al webserver che per i video con estensione AVI che abbiano dimensioni dai 500 kb in su, dovr applicare uua velocit massima di trasferimento di 10kb/s.
===='''BandWidthPacket'''====
'''Sintassi''': <tt>BandWidthPacket <Dimensione pacchetti in bytes></tt><br/>
'''Default''': <tt>8192</tt><br/>
Questa direttiva indica la dimensione massima dei pacchetti trasferiti.<br/>
Solitamente, in una configurazione generica, non necessario modificare questo valore. In caso si voglia ottimizzare la trasmissione dati (e soprattutto se si sa cosa si sa facendo), possono essere specificati valori tra 1024 e 131072.<br/>
In caso si usino valori eccessivi per la propria connessione, il modulo riporter automaticamente la direttiva a valori pi bassi.
===='''BandWidthError'''====
'''Sintassi''': <tt>BandWidthError <Num. Errore></tt><br/>
''' Default''': <tt>none</tt> (Vengono usati i valori standard di Apache2).<br/>
In caso vogliamo personalizzare la pagina di errore quando si raggiungono i limiti impostati con ''MaxConnection'', con questa direttiva possiamo indicare ad apache che tipo di errore mostrare con <Num. Errore> ed eventualmente, mettendo mano alla direttiva ErrorDocument in <tt>/etc/apache2/apache2.conf</tt>, quale pagina deve essere mostrata.<br/>
Di default, quando viene raggiunto il numero massimo di connessioni, viene mostrata la classica pagina d'errore 503 HTTP_SERVICE_UNAVAILABLE (possiamo controllare in apache2.conf la sezione con tutti gli errori che apache pu restituire al browser).
Se usiamo una pagina d'errore personalizzata, importante che l'errore associato alla nostra pagina non sia gi usato da apache (l'autore del modulo ha testato con successo l'errore numero 510).
Per esempio, per usare una pagina d'errore personalizzata, possiamo scrivere:
<pre>ErrorDocument 510 /errors/paginaerrore.html</pre>
nella direttiva ErrorDocument in <tt>etc/apache2/apache2.conf</tt>, e
<pre>BandWidthError 510</pre>
nella direttiva BandWidthError.
{{ Warningbox | Possono sorgere problemi quando la pagina d'errore personalizzata ha una dimensione minore di 1024bytes: opportuno, quindi, creare pagine pi grandi di questo valore. }}
===='''MaxConnection'''====
'''Sintassi''': <tt>MaxConnection <Origine delle connessioni> <Num. massimo connessioni></tt><br/>
'''Default''': <tt>all 0</tt> (Illimitate da ogni origine).<br/>
Questa direttiva permette di impostare un numero massimo di connessioni provenienti da una determinata origine. La sintassi simile alla direttiva ''BandWidth''. Le connessioni eccedenti il limite riceveranno l'errore impostato in ''BandWidthError'' (di default il 503).
{{ Warningbox | Affinch il limite di connessioni per una data origine possa essere applicato, necessario che quella origine abbia anche una limitazione di banda specificata con ''BandWidth''.<br/>
Quindi, se vogliamo limitare le connessioni provenienti da 192.168.2.0 con
<pre>MaxConnection 192.168.2.0 20</pre>
fondamentale che il traffico con quella specifica rete sia indicato in
<pre>BandWidth 192.168.2.0 0</pre>
Come si pu vedere, una semplice questione di forma: infatti si pu tranquillamente indicare come limite ''0'', quindi infinito. L'importante che sia specificato in BandWidth.}}
==mod_bwshare==


=Conclusione=
=Conclusione=


Con questi moduli � possibile, in breve tempo e con la massima semplicit�,
Con questo modulo � possibile, in breve tempo e con la massima semplicit�,
ottimizzare la ripartizione della banda del proprio server web. Cosa
ottimizzare la ripartizione della banda del proprio server web. Cosa
fondamentale per non arrivare alla saturazione della banda, che
fondamentale per non arrivare alla saturazione della banda, cosa che
comporterebbe lentezza nelle risposte dei vari servizi e della navigazione su
comporterebbe lentezza nelle risposte dei vari servizi e della navigazione su
internet.
internet.
56

contributi