|
|
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
| |
|
| |
|
| =Installazione= | | 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. |
| | |
| | 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 28: |
Riga 16: |
| <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 67: |
Riga 55: |
| </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''.
| |
|
| |
|
| 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''':
| | ==Configurazione== |
| <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 114: |
Riga 84: |
| </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.
| | Bene, ora possiamo analizzare i parametri che di mette a disposizione mod_bandwidth. |
|
| |
|
| | (Le descrizioni di seguito sono la traduzione libera + approfondimenti del manuale reperibile sul sito del traduttore) |
|
| |
|
|
| |
|
Riga 231: |
Riga 200: |
| {{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== | | ==Eseguiamo Apache con mod_bandwidth== |
| 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'''===
| | 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. |
| ===='''BandWidthModule'''====
| |
| '''Sintassi''': <tt>BandWidthModule On|Off</tt><br/>
| |
| '''Default''': <tt>Off</tt><br/>
| |
| Tramite questa direttiva attiviamo o disattiviamo il modulo
| |
|
| |
|
| ===='''BandWidthDebug'''====
| | Potrebbe essere una buona idea, a questo scopo, eseguire lo script '''cleanlink.pl''', che provvede a rimuovere automaticamente i link morti. |
| '''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/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. }}
| |
| | |
| ===='''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. |