Gestione della banda in Apache: differenze tra le versioni

m
nessun oggetto della modifica
mNessun oggetto della modifica
mNessun oggetto della modifica
Riga 1: Riga 1:
==Come creare una directory shared tra macchine linux (nfs, acronimo di Network File System)==
=Introduzione=
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


Per far comunicare due macchine Linux, � possibile in diversi metodi: il modo pi� veloce per fare tutto ci�, � utilizzare NFS per mettere in condivisione una particolare directory del filesystem ad altri client.<br>
=Installazione=
Di seguito � descritta una semplice procedura per configurare ed avviare il daemon di nfs sul server e per istruire il client a raggiungere la directory esportata: questa non vuole essere una guida esaustiva ad nfs, ma solo una breve descrizione di come risolvere velocemente lo scambio di dati tra macchiine linux.


==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.


=== Impostazione del Server ===
* rechiamoci sul sito del produttore: http://www.cohprog.com/mod_bandwidth.html e scarichiamo l'ultima versione (link diretto:
Dopo aver installato con apt-get i pacchetti '''nfs-user-server''' (un linux daemon che lavora in userspace) e '''portmap''', bisogna modificare il file '''/etc/exports''' (in caso esso non esista, bisogna crearlo) aggiungendo una riga per ogni directory che si vuole esportare.<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:
<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>


{{Box | Nota |Portmap viene impostato di default ad essere "bindato" sul solo indirizzo di localhost, mentre l'uso consueto � diretto verso una o pi� reti lan. Per permettere alle varie reti di accedere al server � necessario modificare (oppure eliminare, per permettere un accesso completo) il parametro '''OPTIONS''', presente nel file '''/etc/default/portmap''' }}
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.


Un esempio di entry per il file export pu essere:


<pre>/mnt/Data/download 192.168.2.3 (rw)</pre>
===Aggiornamento===


in cui
Il procedimento appena presentato, crea diversi problemi, soprattutto in fase di aggiornamento del sistema: ogni volta il pacchetto
* '''/mnt/Data/download''' � la directory da esportare
apache viene aggiornato, infatti, il modulo appena creato verr� sovrascritto con quello `vecchio`, e apache non si riavvier�...
* '''192.168.2.3'''        � il client che pu� raggiungere la directory in questione;
Una alternativa � creare il modulo con un altro nome:
* '''(rw)'''              sono le opzioni impostabili ('''rw''':permessi di scrittura/lettura);
<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>


Qualora, invece, volessimo esportare la directory a tutte le macchine presenti all'interno di una sottorete:
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>


<pre>/mnt/Data/download    192.168.0.1/255.255.255.0(rw)</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>


{{Box | Nota |Nelle nuove versioni di nfs � necessario inserire un flag aggiuntivo ('''sync''' oppure '''async''') per definire la modalit� di accesso ed uso dei file.
==bw_mod==
'''Sync''' forza la scrittura immediata dei dati man mano che questi arrivano al server, mentre '''async''' consente di scrivere tali dati in intervalli successivi, migliorando cos� le performance del trasferimento.
Come prima cosa procuriamoci il modulo dal [http://www.ivn.cl/apache/ sito dello sviluppatore]. A questo punto estraiamolo:
Vista la peculiarit� di questo tipo di trasferimento � conveniente usare '''sync''' nelle situazioni di rw, ed '''async''' in quelle di ro, in modo da eliminare il pericolo di dati non salvati correttamente (e quindi persi) durante le fasi di scrittura nel caso di crash del server. }}
<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''.


E' possibile inoltre definire gli accessi in modo pi� granulare utilizzando i file /etc/host.access e /etc/host.denied, ma per un uso basilare di nfs non � necessario applicare alcuna modifica.
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'''.


=== Impostazione del Client ===
In questo caso non dobbiamo preoccuparci, in quanto nel file ''apache2.conf'' c'� un richiamo a ''httpd.conf''.}}
Bisogna innanzitutto installare '''nfs-common''' con apt-get, e successivamente modificare il proprio '''/etc/fstab''', aggiungendo una entry relativa alla directory che si vuole raggiungere via nfs; ad esempio:


<pre>192.168.2.2:/mnt/Data/download  /mnt/nfs nfs rw,users,noauto  0  0</pre>
==mod_bwshare==


in cui
=Configurazione=
*    '''<tt>192.168.2.2:/mnt/Data/download</tt>''' &nbsp;&nbsp;&nbsp;  � la url completa della directory da raggiungere (sintassi, ip:path);
*    '''<tt>/mnt/nfs</tt>''' &nbsp;&nbsp;&nbsp;  � la directory dove si vuole montare il device (la directory deve essere stata creata precendentemente);
*    '''<tt>nfs</tt>''' &nbsp;&nbsp;&nbsp;  identifica il tipo di filesystem da usare (in questo caso nfs, filesystem di rete);
*    '''<tt>rw,users,noauto</tt>'''  &nbsp;&nbsp;&nbsp;  sono i flag di mount del device (rw: permessi di scrittura/lettura, users: device montabile e smontabile dai vari user, noauto: device da non avviare automaticamente al boot del sistema);
*    '''<tt>0 0</tt>''' &nbsp;&nbsp;&nbsp;  sono i flag relativi al check del device da parte dei programmi di controllo della coerenza del filesystem.


A questo punto basta un semplice
==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>


<pre>$ mount /mnt/nfs</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).


per poter usare normalmente la share nfs, come una normale directory del sistema.
Ecco fatto, ora con il seguente comando facciamo rileggere ad apache i file di configurazione:
<pre>
# /etc/init.d/apache reload
</pre>


In caso di malfunzionamenti inoltre, � possibile controllare lo stato della share nfs sia dal client che dal server, utilizzando le applicazioni '''rpcinfo''' e '''nfsstat''' in modo da verificare visualmente le risorse condivise attive nella rete.
===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.


[[Utente:Ldonesty|Ldonesty]]
 
[[Categoria:Networking]][[Categoria:Desktop]]
 
===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")}}
 
==bw_mod==
==mod_bwshare==
 
=Conclusione=
 
Con questi moduli � 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, che
comporterebbe lentezza nelle risposte dei vari servizi e della navigazione su
internet.
 
 
---- [[User:MaXeR|MaXeR]]
1 760

contributi