Gestione della banda in Apache: differenze tra le versioni

Prima versione
(Prima versione)
 
(Prima versione)
Riga 8: Riga 8:
==Installazione==
==Installazione==


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.


* rechiamoci sul sito del produttore: http://www.cohprog.com/mod_bandwidth.html e scarichiamo l'ultima versione (link diretto:
* 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/>
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:
* per potre compilare questo modulo, abbiamo bisogno del pacchetto '''apache-dev'''. Per installarlo è sufficiente dare:
<pre>
<pre>
# apt-get install apache-dev
# apt-get install apache-dev
Riga 34: Riga 34:


Il procedimento appena presentato, crea diversi problemi, soprattutto in fase di aggiornamento del sistema: ogni volta il pacchetto
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�...
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:
Una alternativa è creare il modulo con un altro nome:
<pre>
<pre>
$ /usr/bin/apxs -c mod_bandwidth.c -o mod_bandwidth_new.so
$ /usr/bin/apxs -c mod_bandwidth.c -o mod_bandwidth_new.so
Riga 50: Riga 50:
</pre>
</pre>


Ora necessario modificare il file '''/etc/apache/modules.conf''': la nuova direttiva da inserire, sostituendo eventualmente quella preesistente, la seguente:
Ora è necessario modificare il file '''/etc/apache/modules.conf''': la nuova direttiva da inserire, sostituendo eventualmente quella preesistente, è la seguente:
<pre>
<pre>
LoadModule bandwidth_module /usr/lib/apache/1.3/mod_bandwidth_new.so
LoadModule bandwidth_module /usr/lib/apache/1.3/mod_bandwidth_new.so
Riga 59: Riga 59:


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à:
* modificare a mano il file, aggiungendo la seguente riga, alla finedel file:
* modificare a mano il file, aggiungendo la seguente riga, alla finedel file:
<pre>
<pre>
Riga 77: Riga 77:
# chmod -R 775 /tmp/apachebw
# chmod -R 775 /tmp/apachebw
</pre>
</pre>
(ricordiamoci che possibile che qualche script ripulica la directory '''/tmp''', quindi cambiamo la posizione di queste cartelle con la direttiva BandWidthDataDir).
(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:
Ecco fatto, ora con il seguente comando facciamo rileggere ad apache i file di configurazione:
Riga 105: Riga 105:
Abilita o disabilita il modulo.
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..)
'''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..)




Riga 113: Riga 113:
'''Contesto''': per server config<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
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.
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:'''  
'''Esempio:'''  
Riga 120: Riga 120:
BandWidthPulse 1000000 #1 secondo
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.
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.




Riga 131: Riga 131:


Limita la banda per i file contenuti nella directory e nelle sub-directory, in base alla provenienza (dominio, ip, all).
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,
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
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  
rispecchia la situazione  
Riga 152: Riga 152:


Imposta un limite '''<rate>''' da usare quando si trasferiscono file di dimensioni uguali o maggiori a <filesize>
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.
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:'''
'''Esempio:'''
Riga 160: Riga 160:
</pre>
</pre>
Queste direttive portano a questa situazione:
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 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 compresa tra 200Kb e 1023Kb, saranno limitati a 3072Kb/sec;
* i file di dimensione maggiore di 1024Kb, saranno limitati a 2048Kb/sec.
* i file di dimensione maggiore di 1024Kb, saranno limitati a 2048Kb/sec.
Riga 178: Riga 178:
'''Contesto''': per directory, .htaccess<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).
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 :'''
'''Esempio :'''
Riga 188: Riga 188:
Assumendo la presenza delle precedenti direttive analizziamo i casi in base
Assumendo la presenza delle precedenti direttive analizziamo i casi in base
alle connessioni:
alle connessioni:
* una connessione: velocit� di trasferimento = 3072 Bytes/sec.
* una connessione: velocità di trasferimento = 3072 Bytes/sec.
* due connessioni: velocit� di trasferimento = 1536 Bytes/sec.
* due connessioni: velocità di trasferimento = 1536 Bytes/sec.
* tre o pi� connessioni: velocit� di trasferimento = 1024 Bytes/sec.
* tre o più connessioni: velocità di trasferimento = 1024 Bytes/sec.


Se MinBandWidth impostato a "-1" accade che:
Se MinBandWidth è impostato a "-1" accade che:
* se c'solo una connessione, il file viene trasferito a 3072 Bytes/sec.
* 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.
* 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...
Ovviamente, la velocità di trasferimento totale non potrà mai superare la vostra larghezza di banda...


'''NOTA:'''
'''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") .
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==
==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.
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.
Potrebbe essere una buona idea, a questo scopo, eseguire lo script '''cleanlink.pl''', che provvede a rimuovere automaticamente i link morti.
Riga 211: Riga 211:
==Conclusione==
==Conclusione==


Con questo modulo 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, cosa 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.
1 487

contributi