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==
* HomePage: http://www.cohprog.com/mod_bandwidth.html
* Licenza: Apache Group licence
* 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


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.
=Installazione=
 
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.
 
 
==Installazione==


==mod_bandwidth==
Il modulo '''mod_bandwidth''' � installato di default insieme al server apache; lo possiamo trovare in '''/usr/lib/apache/1.3/'''.
Il modulo '''mod_bandwidth''' � installato di default insieme al server apache; lo possiamo trovare in '''/usr/lib/apache/1.3/'''.
Se questo modulo dovesse dare problemi (esempi: non imposta correttamente la banda, ma sembra che i limiti che impostiamo siano visti come bit e non come byte, non accetta la direttiva MaxConnection), vi consiglio di reinstallarlo come descritto qui sotto.
Se questo modulo dovesse dare problemi (esempi: non imposta correttamente la banda, ma sembra che i limiti che impostiamo siano visti come bit e non come byte, non accetta la direttiva MaxConnection), vi consiglio di reinstallarlo come descritto qui sotto.
Riga 16: Riga 28:
<pre>
<pre>
# apt-get install apache-dev
# apt-get install apache-dev
<pre>
</pre>
* ora siamo pronti per compilare:
* ora siamo pronti per compilare:
<pre>
<pre>
Riga 55: Riga 67:
</pre>
</pre>


==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''.


==Configurazione==
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==
=Configurazione=
==mod_bandwidth==
Ora configuriamo apache per utilizzare mod_bandwidth.<br/>
Ora configuriamo apache per utilizzare mod_bandwidth.<br/>
Aggiungiamo il modulo al file '''/etc/apache/modules.conf'''. Per fare questo abbiamo due possibilit�:
Aggiungiamo il modulo al file '''/etc/apache/modules.conf'''. Per fare questo abbiamo due possibilit�:
Riga 84: Riga 114:
</pre>
</pre>


===Note per il corretto funzionamento===
Per ottenere risultati, importante che non ci siano dei link morti nella directory '''link''' di mod_bandwidth, quando viene eseguito avviato il server con il modulo attivo.


Bene, ora possiamo analizzare i parametri che di mette a disposizione mod_bandwidth.
Potrebbe essere una buona idea, a questo scopo, eseguire lo script '''cleanlink.pl''', che provvede a rimuovere automaticamente i link morti.


(Le descrizioni di seguito sono la traduzione libera + approfondimenti del manuale reperibile sul sito del traduttore)




Riga 198: Riga 229:
Ovviamente, la velocit� di trasferimento totale non potr� mai superare la vostra larghezza di banda...
Ovviamente, la velocit� di trasferimento totale non potr� mai superare la vostra larghezza di banda...


'''NOTA:'''
{{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")}}
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


==Eseguiamo Apache con mod_bandwidth==
===='''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).


Per ottenere risultati, � importante che non ci siano dei link morti nella directory '''link''' di mod_bandwidth, quando viene eseguito avviato il server con il modulo attivo.
==='''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/maxconexceeded.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. }}


Potrebbe essere una buona idea, a questo scopo, eseguire lo script '''cleanlink.pl''', che provvede a rimuovere automaticamente i link morti.
===='''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 questo modulo � possibile, in breve tempo e con la massima semplicit�,
Con questi moduli � 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, cosa che
fondamentale per non arrivare alla saturazione della banda, 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