Gestione della banda in Apache: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Riga 1: Riga 1:
=Introduzione=
Elenco degli Amministratori
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=
 
==mod_bandwidth==
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.
 
* rechiamoci sul sito del produttore: http://www.cohprog.com/mod_bandwidth.html e scarichiamo l'ultima versione (link diretto:
ftp://ftp.cohprog.com/pub/apache/module/1.3.0/mod_bandwidth.c).<br/>
* per potre compilare questo modulo, abbiamo bisogno del pacchetto '''apache-dev'''. Per installarlo � sufficiente dare:
<pre>
# apt-get install apache-dev
</pre>
* ora siamo pronti per compilare:
<pre>
$ /usr/bin/apxs -c mod_bandwidth.c -o mod_bandwidth.so
</pre>
* una volta pronto il modulo, eseguiamo i seguenti comandi:
<pre>
# cd /usr/lib/apache/1.3/
# mv mod_bandwidth.so mod_bandwidth.so.bk
# mv /home/maxer/mod_bandwidth.so ./
</pre>
 
in questo modo abbiamo creato una copia del modulo precedente, se presente, e poi abbiamo spostato il modulo appena compilato nella cartella dei moduli di apache.
 
 
===Aggiornamento===
 
Il procedimento appena presentato, crea diversi problemi, soprattutto in fase di aggiornamento del sistema: ogni volta il pacchetto
apache viene aggiornato, infatti, il modulo appena creato verr� sovrascritto con quello `vecchio`, e apache non si riavvier�...
Una alternativa � creare il modulo con un altro nome:
<pre>
$ /usr/bin/apxs -c mod_bandwidth.c -o mod_bandwidth_new.so
# cp mod_bandwidth_new.so /usr/lib/apache/1.3/mod_bandwidth_new.so
# cd /usr/lib/apache/1.3/
# cp 500mod_bandwidth.info 500mod_bandwidth_new.info
</pre>
 
Ora bisogna modificare il file '''500mod_bandwidth_new''' modificando il nome del
vecchio modulo con quello nuovo:
<pre>
LoadModule: bandwidth_module /usr/lib/apache/1.3/mod_bandwidth-new.so
Description: Bandwidth management on a per-connection basis
</pre>
 
Ora � necessario modificare il file '''/etc/apache/modules.conf''': la nuova direttiva da inserire, sostituendo eventualmente quella preesistente, � la seguente:
<pre>
LoadModule bandwidth_module /usr/lib/apache/1.3/mod_bandwidth_new.so
</pre>
 
==bw_mod==
===Installazione bw_mod-6.0 con apache2===
 
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==
 
=Configurazione=
 
==mod_bandwidth==
Ora configuriamo apache per utilizzare mod_bandwidth.<br/>
Aggiungiamo il modulo al file '''/etc/apache/modules.conf'''. Per fare questo abbiamo due possibilit�:
* modificare a mano il file, aggiungendo la seguente riga, alla finedel file:
<pre>
LoadModule bandwidth_module /usr/lib/apache/1.3/mod_bandwidth.so
</pre>
*utilizzare modules-config:
<pre>
modules-config apache enable mod_bandwidth
</pre>
 
Creiamo le cartelle temporanee per mod_bandwidth:
<pre>
# mkdir /tmp/apachebw
# mkdir /tmp/apachebw/master
# mkdir /tmp/apachebw/link
# chown -R www-data:www-data /tmp/apachebw
# chmod -R 775 /tmp/apachebw
</pre>
(ricordiamoci che � possibile che qualche script ripulica la directory '''/tmp''', quindi cambiamo la posizione di queste cartelle con la direttiva BandWidthDataDir).
 
Ecco fatto, ora con il seguente comando facciamo rileggere ad apache i file di configurazione:
<pre>
# /etc/init.d/apache reload
</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.
 
 
 
==Direttive globali di configurazione==
 
==='''BandWidthDataDir'''===
'''Sintassi''': BandWidthDataDir <directory><br/>
'''Default''': "/tmp/apachebw"<br/>
'''Contesto''': server config<br/>
Imposta la directory in cui mod_bandwidth conserve i suoi file temporanei. All'interno di questa directory devono essere presenti anche le directory link e master; tutte queste cartelle devono essere scrivibili da apache (che in debian utilizza l'utente ed il gruppo www-data)
 
 
==='''BandWidthModule'''===
'''Sintassi''': BandWidthModule <On|Off><br/>
'''Default''': Off<br/>
'''Contesto''': per server config<br/>
Abilita o disabilita il modulo.
 
'''NOTA:''' Per utilizzarlo all'interno di un virtual host, � necessario inserire la direttiva '''BandWidthModule On''' all'interno del blocco del virtual host. Se viene attivato globalmente (cio� all'interno del file httpd.conf, fuori da ogni blocco), il modulo � attivo automaticamente in tutti i sottoblocci (Virtual Host, etc..)
 
 
==='''BandWidthPulse'''===
'''Sintassi''': BandWidthPulse <microseconds><br/>
'''Default''':<br/>
'''Contesto''': per server config<br/>
 
Modifica l'algoritmo usato per calcolare la larghezza di banda e per trasmettere i dati. Nella modalit� normale (obsoleta), il modulo cerca di tramettere i dati in pacchetti di 1Kb. Questo vuol dire che, se la banda disponibile � di 512B, il modulo trasmette 1Kb, aspetta 2 secondi, trasmette 1Kb e cos� via... Impostando questa direttiva, verr� cambiato l'algoritmo in modo che il server
aspetter� sempre lo stesso lasso di tempo, prima di trasmettere pacchetti, e la dimensione dei pacchetti varier� di conseguenza, cos� da rispettari i criteri indicati nelle altre direttive. Il valore � in microsecondi.
 
'''Esempio:'''
<pre>
BandWidthPulse 1000000 #1 secondo
</pre>
Se oltre a questa direttiva � presente un limite a 512B, il server trasmetter� 512B, aspetter� un secondo, trametter� 512B, aspetter� un secondo e cos� via.
 
 
==Direttive per la configurazione di Directory e/o VirtualServer==
 
==='''BandWidth'''===
'''Sintassi''': BandWidth <domain|ip|all> <rate><br/>
'''Default''': none<br/>
'''Contesto''': per directory, .htaccess<br/>
 
Limita la banda per i file contenuti nella directory e nelle sub-directory, in base alla provenienza (dominio, ip, all).
Gli indirizzi IP possono essere specificati anche nel formato network/netmask (Es: 192.168.0.0/21) '''<rate>''' deve essere espresso in Byte/secondo. Impostato a "0" indica nessun limite di banda. Possono essere impostati pi� limiti per la stessa directory; in questo caso, �
importante l'ordine con cui vengono inserite le direttive, in quando mod_bandwidth li scorre dal primo all'ultimo, fermandosi a quello che
rispecchia la situazione
 
'''Esempio:'''
<pre>
BandWidth ecp.fr 0
BandWidth 138.195 0
BandWidth all 1024
</pre>
In questo esempio, viene limitata la banda a:
* nessun limite per gli appartenenti al dominio .ecp.fr e alla rete 138.195. ;
* 1024Bytes/secondo per tutti gli altri.
 
 
==='''LargeFileLimit'''===
'''Sintassi''': LargeFileLimit <filesize> <rate><br/>
'''Default''': none<br/>
'''Contesto''': per directory, .htaccess<br/>
 
Imposta un limite '''<rate>''' da usare quando si trasferiscono file di dimensioni uguali o maggiori a <filesize>
E' possibile utilizzare pi� direttive per diverse dimensioni; anche in questo caso, se il parametro viene impostato a "0", non sar� impostato alcun limite (rimarr�, ovviamente, l'eventuale limite impostato in BandWidth). Se viene impostato a "-1", invece, saranno aboliti tutti i limiti (anche quelli impostati con la direttiva BandWidth) per i file la cui dimensione rispecchia quella direttiva.
 
'''Esempio:'''
<pre>
LargeFileLimit 200 3072
LargeFileLimit 1024 2048
</pre>
Queste direttive portano a questa situazione:
* i file pi� piccoli di 200Kb, non verranno limitati da queste direttive (rimane attiva la direttiva BandWidth);
* i file di dimensione compresa tra 200Kb e 1023Kb, saranno limitati a 3072Kb/sec;
* i file di dimensione maggiore di 1024Kb, saranno limitati a 2048Kb/sec.
 
 
==='''MaxConnection'''===
'''Sintassi''': MaxConnection <connections><br/>
'''Default''': 0 (illimitate)<br/>
'''Contesto''': per directory, .htaccess<br/>
 
Imposta il numero di connessioni massime che possono avvenire  contemporaneamente.Una volta raggiunto il limite impostato, le nuove connessioni verranno rifiutate. Se impostato a "0" (valore di default) non saranno presenti delle limitazioni per quanto riguarda il numero di connessioni simultanee (se non quello impostato nelle direttive principali di Apache).
 
 
==='''MinBandWidth'''===
'''Sintassi''': MinBandWidth <domain|ip|all> <rate><br/>
'''Default''': all 256<br/>
'''Contesto''': per directory, .htaccess<br/>
 
Imposta una banda minima per il trasferimento dei dati. Questa direttiva pu� sovrascrivere le direttive BandWidth e LargeFileLimit, in quanto, in presenza di un numero elevato di connessioni, verr� garantita a tutte la larghezza indicata con questa direttiva, anche se il totale superer� i limiti. Il primo argomnto � da usarsi come per la direttiva BandWidth. deve essere espresso in Byte/Secondo; se viene impostato a 0, verr� usato il valore di default (256).
 
'''Esempio :'''
<pre>
BandWidth all 3072
MinBandWidth all 1024
</pre>
 
Assumendo la presenza delle precedenti direttive analizziamo i casi in base
alle connessioni:
* una connessione: velocit� di trasferimento = 3072 Bytes/sec.
* due connessioni: velocit� di trasferimento = 1536 Bytes/sec.
* tre o pi� connessioni: velocit� di trasferimento = 1024 Bytes/sec.
 
Se MinBandWidth � impostato a "-1" accade che:
* se c'� solo una connessione, il file viene trasferito a 3072 Bytes/sec.
* se ci sono una o pi� connessioni, ogni file viene trasferito a 3072 Bytes/sec. La velocit� non dipende pi� dal numero di connessioni, ma solo dai valori delle direttive.
 
Ovviamente, la velocit� di trasferimento totale non potr� mai superare la vostra larghezza di banda...
 
{{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")}}
 
 
 
=Conclusione=
 
Con questo modulo � possibile, in breve tempo e con la massima semplicit�,
ottimizzare la ripartizione della banda del proprio server web. Cosa
fondamentale per non arrivare alla saturazione della banda, cosa che
comporterebbe lentezza nelle risposte dei vari servizi e della navigazione su
internet.
 
 
---- [[User:MaXeR|MaXeR]]

Versione delle 09:52, 12 lug 2005

Elenco degli Amministratori