56
contributi
(→bw_mod) |
|||
Riga 4: | Riga 4: | ||
* HomePage: http://www.cohprog.com/mod_bandwidth.html | * HomePage: http://www.cohprog.com/mod_bandwidth.html | ||
* Licenza: Apache Group licence | * Licenza: Apache Group licence | ||
* Copyright: Yann Stettler and CohProg | * Copyright: Yann Stettler and CohProg SàRL | ||
* Versione Apache: 1 | * Versione Apache: 1 | ||
==bw_mod== | ==bw_mod== | ||
Riga 20: | Riga 20: | ||
==mod_bandwidth== | ==mod_bandwidth== | ||
Il modulo '''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. | 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 | * 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 46: | Riga 46: | ||
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 | apache viene aggiornato, infatti, il modulo appena creato verrà sovrascritto con quello `vecchio`, e apache non si riavvierà... | ||
Una alternativa | 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 62: | Riga 62: | ||
</pre> | </pre> | ||
Ora | 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 68: | Riga 68: | ||
==bw_mod== | ==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''': | |||
<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== | ==mod_bwshare== | ||
Riga 75: | Riga 89: | ||
==mod_bandwidth== | ==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 | 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 93: | Riga 107: | ||
# chmod -R 775 /tmp/apachebw | # chmod -R 775 /tmp/apachebw | ||
</pre> | </pre> | ||
(ricordiamoci che | (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 101: | Riga 115: | ||
===Note per il corretto funzionamento=== | ===Note per il corretto funzionamento=== | ||
Per ottenere risultati, | 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 107: | Riga 121: | ||
==Direttive globali di configurazione== | ===Direttive globali di configurazione=== | ||
==='''BandWidthDataDir'''=== | ===='''BandWidthDataDir'''==== | ||
'''Sintassi''': BandWidthDataDir <directory><br/> | '''Sintassi''': BandWidthDataDir <directory><br/> | ||
'''Default''': "/tmp/apachebw"<br/> | '''Default''': "/tmp/apachebw"<br/> | ||
Riga 116: | Riga 130: | ||
==='''BandWidthModule'''=== | ===='''BandWidthModule'''==== | ||
'''Sintassi''': BandWidthModule <On|Off><br/> | '''Sintassi''': BandWidthModule <On|Off><br/> | ||
'''Default''': Off<br/> | '''Default''': Off<br/> | ||
Riga 122: | Riga 136: | ||
Abilita o disabilita il modulo. | Abilita o disabilita il modulo. | ||
'''NOTA:''' Per utilizzarlo all'interno di un virtual host, | '''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'''=== | ===='''BandWidthPulse'''==== | ||
'''Sintassi''': BandWidthPulse <microseconds><br/> | '''Sintassi''': BandWidthPulse <microseconds><br/> | ||
'''Default''':<br/> | '''Default''':<br/> | ||
'''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 | 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:''' | '''Esempio:''' | ||
Riga 137: | Riga 151: | ||
BandWidthPulse 1000000 #1 secondo | BandWidthPulse 1000000 #1 secondo | ||
</pre> | </pre> | ||
Se oltre a questa direttiva | 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== | ===Direttive per la configurazione di Directory e/o VirtualServer=== | ||
==='''BandWidth'''=== | ===='''BandWidth'''==== | ||
'''Sintassi''': BandWidth <domain|ip|all> <rate><br/> | '''Sintassi''': BandWidth <domain|ip|all> <rate><br/> | ||
'''Default''': none<br/> | '''Default''': none<br/> | ||
Riga 148: | Riga 162: | ||
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 | 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 163: | Riga 177: | ||
==='''LargeFileLimit'''=== | ===='''LargeFileLimit'''==== | ||
'''Sintassi''': LargeFileLimit <filesize> <rate><br/> | '''Sintassi''': LargeFileLimit <filesize> <rate><br/> | ||
'''Default''': none<br/> | '''Default''': none<br/> | ||
Riga 169: | Riga 183: | ||
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 | 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 177: | Riga 191: | ||
</pre> | </pre> | ||
Queste direttive portano a questa situazione: | Queste direttive portano a questa situazione: | ||
* i file | * 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. | ||
==='''MaxConnection'''=== | ===='''MaxConnection'''==== | ||
'''Sintassi''': MaxConnection <connections><br/> | '''Sintassi''': MaxConnection <connections><br/> | ||
'''Default''': 0 (illimitate)<br/> | '''Default''': 0 (illimitate)<br/> | ||
Riga 190: | Riga 204: | ||
==='''MinBandWidth'''=== | ===='''MinBandWidth'''==== | ||
'''Sintassi''': MinBandWidth <domain|ip|all> <rate><br/> | '''Sintassi''': MinBandWidth <domain|ip|all> <rate><br/> | ||
'''Default''': all 256<br/> | '''Default''': all 256<br/> | ||
'''Contesto''': per directory, .htaccess<br/> | '''Contesto''': per directory, .htaccess<br/> | ||
Imposta una banda minima per il trasferimento dei dati. Questa direttiva | 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 205: | Riga 219: | ||
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: | * una connessione: velocità di trasferimento = 3072 Bytes/sec. | ||
* due connessioni: | * due connessioni: velocità di trasferimento = 1536 Bytes/sec. | ||
* tre o | * 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")}} | |||
==bw_mod== | |||
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 quattro 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'''=== | |||
===='''BandWidthModule'''==== | |||
'''Sintassi''': <tt>BandWidthModule On|Off</tt><br/> | |||
'''Default''': <tt>Off</tt><br/> | |||
Tramite questa direttiva attiviamo o disattiviamo il modulo | |||
===='''BandWidthDebug'''==== | |||
'''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). | |||
===='''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/paginaerrore.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. }} | |||
==='''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. | |||
===='''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 | Con questi moduli è 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, | fondamentale per non arrivare alla saturazione della banda, 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. |
contributi