4
contributi
m (→'''MinBandWidth''': aggiunto box nota) |
Mit (discussione | contributi) |
||
Riga 1: | Riga 1: | ||
==Introduzione== | ==Introduzione== | ||
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== | ||
== | 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> | |||
==Configurazione== | |||
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> | |||
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 | |||
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 | ||
</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> | <pre> | ||
BandWidth ecp.fr 0 | |||
</pre> | 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> | <pre> | ||
LargeFileLimit 200 3072 | |||
LargeFileLimit 1024 2048 | |||
</pre> | </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> | <pre> | ||
BandWidth all 3072 | |||
MinBandWidth all 1024 | |||
</pre> | </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]] |
contributi