56
contributi
Riga 1: | Riga 1: | ||
=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: | |||
Questo | ==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 | |||
=Installazione= | =Installazione= | ||
Riga 57: | Riga 68: | ||
==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== | ||
=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 88: | 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. | |||
Potrebbe essere una buona idea, a questo scopo, eseguire lo script '''cleanlink.pl''', che provvede a rimuovere automaticamente i link morti. | |||
Riga 204: | Riga 231: | ||
{{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'''.}} | |||
Per | ==='''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= | |||
Con | 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, | 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. |
contributi