Gestione della banda in Apache: differenze tra le versioni

m
→‎'''MinBandWidth''': aggiunto box nota
m (→‎'''MinBandWidth''': aggiunto box nota)
m (→‎'''MinBandWidth''': aggiunto box nota)
Riga 1: Riga 1:
==Introduzione==
==Introduzione==
 
Apt-cdrom permette di automatizzare l'aggiunta e l'aggiornamento dei repository presenti su Cd-Rom.
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==
==Installazione==
L'installazione non necessaria, in quanto contenuto nel pacchetto base di apt.


Il modulo '''mod_bandwidth''' � installato di default insieme al server apache; lo possiamo trovare in '''/usr/lib/apache/1.3/'''.
==Opzioni disponibili==
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.
L'utilizzo del comando � semplicissima: permette due sole azioni:<br/>
* '''add''' per l'aggiunta di un cd/dvd alla lista di quelli disponibili<br/>
* '''ident''' per identificare il cd/dvd inserito<br/>


* rechiamoci sul sito del produttore: http://www.cohprog.com/mod_bandwidth.html e scarichiamo l'ultima versione (link diretto:
Il fatto che ci sia l'opzione '''ident''' fa capire che presente un sistema di indentificazione: dopo la scansione del supporto, quando sar� necessario recuperare un pacchetto, verr� richiesto il cd/dvd chiamandolo per 'nome'.
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.
Le opzioni disponibili, invece, sono:<br/>
* '''-d''' Permette di indicare un mount-point alternativo<br/>
* '''-r''' Consente di rinominare il cd/dvd da analizzare<br/>
* '''-m''' Non esegue il mount (nel caso sia gi� montato)<br/>


Degna di nota la gestione totalmente automatizzata del processo di mount e umount del dispositivo: quando verr richiesto un pacchetto, infatti, il cassetto del lettore verr aperto automaticamente, e tutte le operazioni di mount e umount eseguite autonomamente.


===Aggiornamento===
==Esempi==
 
Una breve rassegna di esempi, per prendere familiarit� con questo strumento:<br/>
Il procedimento appena presentato, crea diversi problemi, soprattutto in fase di aggiornamento del sistema: ogni volta il pacchetto
comando semplice per aggiungere il supporto correntemente inserito nel primo cd all'archivio
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>
<pre>
$ /usr/bin/apxs -c mod_bandwidth.c -o mod_bandwidth_new.so
# apt-cdrom add
# 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>
</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:
per sapere come viene identificato il supporto correntemente inserito
<pre>
<pre>
LoadModule bandwidth_module /usr/lib/apache/1.3/mod_bandwidth_new.so
# apt-cdrom ident
</pre>
</pre>  
 


==Configurazione==


Ora configuriamo apache per utilizzare mod_bandwidth.<br/>
permette di aggiungere all'archivio il dvd accessibile tramite il mount point /media/dvd
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>
<pre>
modules-config apache enable mod_bandwidth
# apt-cdrom -d /media/dvd add
</pre>
</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>
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)
===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
come nell'esempio precedente, specificando il nome del supporto: Sarge DVD n1 2005-05-24
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>
<pre>
BandWidthPulse 1000000 #1 secondo
# apt-cdrom -d /media/dvd -r "Sarge DVD n1 2005-05-24" add
</pre>
</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")}}
==Eseguiamo Apache con mod_bandwidth==
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.
==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]]
---- [[User:MaXeR|MaXeR]]
1 487

contributi