<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>digg.it &#187; apache</title>
	<atom:link href="http://digg.it/tag/apache/feed/" rel="self" type="application/rss+xml" />
	<link>http://digg.it</link>
	<description>Se non lo scrivo lo dimentico. Se lo scrivo qualcuno me lo ricorderà. Appunti di ermeneutica digg.itale</description>
	<lastBuildDate>Thu, 08 Jul 2010 13:43:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Analizzare il traffico dei VirtualHost di Apache con Munin</title>
		<link>http://digg.it/2009/05/19/analizzare-il-traffico-dei-virtualhost-di-apache-con-munin/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=analizzare-il-traffico-dei-virtualhost-di-apache-con-munin</link>
		<comments>http://digg.it/2009/05/19/analizzare-il-traffico-dei-virtualhost-di-apache-con-munin/#comments</comments>
		<pubDate>Tue, 19 May 2009 08:51:07 +0000</pubDate>
		<dc:creator>bago</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[munin]]></category>
		<category><![CDATA[virtualhosting]]></category>

		<guid isPermaLink="false">http://digg.it/?p=228</guid>
		<description><![CDATA[Prerequisiti Questo articolo prevede l&#8217;uso di Fedora Core 10 con Apache 2 installato e funzionante. Altre distribuzioni potrebbero richiedere la compilazione dei pacchetti che invece su FC10 sono già disponibili. Installare CBand Fortunatamente anche per il modulo cband esiste un pacchetto precompilato per FC10 e quindi l&#8217;installazione è molto rapida: sh# yum install mod_cband Installato [...]
Nessun articolo simile]]></description>
			<content:encoded><![CDATA[<h3><a href="http://digg.it/wp-content/uploads/2009/05/apache-vhost-monitoring-munin-cband.gif"><img class="alignright size-medium wp-image-232" title="apache-vhost-monitoring-munin-cband" src="http://digg.it/wp-content/uploads/2009/05/apache-vhost-monitoring-munin-cband-300x191.gif" alt="apache-vhost-monitoring-munin-cband" width="300" height="191" /></a>Prerequisiti</h3>
<p>Questo articolo prevede l&#8217;uso di Fedora Core 10 con Apache 2 installato e funzionante. Altre distribuzioni potrebbero richiedere la compilazione dei pacchetti che invece su FC10 sono già disponibili.</p>
<h3>Installare CBand</h3>
<p>Fortunatamente anche per il modulo cband esiste un pacchetto precompilato per FC10 e quindi l&#8217;installazione è molto rapida:</p>
<pre>sh# yum install mod_cband</pre>
<p>Installato il mod_cband aggiungiamo alla definizione di ogni VirtualHost che vogliamo monitorare la configurazione di cband:</p>
<pre>&lt;IfModule mod_cband.c&gt;
CBandLimit 600G
CBandExceededURL http://www.google.com
CBandScoreboard /var/run/httpd/cband_scoreboard-#DOMINIO#
CBandPeriod 1W
&lt;/IfModule&gt;</pre>
<p>Da notare che ho impostato un limite di 600GB in 1 settimana, che nel mio caso corrisponde praticamente a non limitare, poichè il traffico è molto minore. E&#8217; però necessario imporre un limite (seppur irraggiungibile) per far si che cband conteggi l&#8217;utilizzo di banda.</p>
<p>Fatto questo per ogni VH possiamo testare che la configurazione sia corretta, riavviare apache e vedere la pagina delle statistiche di cband:</p>
<pre>sh# httpd -t
sh# service httpd restart</pre>
<p>Aprendo http://localhost/cband-status vedremo una pagina simile a questa:</p>
<div id="attachment_231" class="wp-caption aligncenter" style="width: 560px"><a href="http://digg.it/wp-content/uploads/2009/05/cband-status-page.png"><img class="size-large wp-image-231" title="Pannello statistiche cband" src="http://digg.it/wp-content/uploads/2009/05/cband-status-page-550x393.png" alt="La pagina delle statistiche di cband" width="550" height="393" /></a><p class="wp-caption-text">La pagina delle statistiche di cband</p></div>
<h3>Impostare Classi in Cband</h3>
<p>cband permette di definire fino a 3 classi di utenti in base all&#8217;IP. Con un po&#8217; di lavoro possiamo quindi identificare i bot dei motori di ricerca, magari tenendo separato google che ci interessa più degli altri, e le classi di IP locali, per evitare che alcune macchine che effettuano richieste automatizzate possano inficiare le statistiche.</p>
<p>Queste sono le mie configurazioni messe in /etc/httpd/conf.d/mod_cband.conf</p>
<pre>&lt;CBandClass googlebot_class&gt;
CBandClassDst 66.249.64/20
&lt;/CBandClass&gt;

&lt;CBandClass local_class&gt;
CBandClassDst XXX.XXX.XXX.XXX
CBandClassDst 127.0.0.1
&lt;/CBandClass&gt;

&lt;CBandClass bots_class&gt;
# Yanga
CBandClassDst 91.205.124.3/22
# Exabot
CBandClassDst 193.47.80.0/24
# Slurp
CBandClassDst 72.30.0.0/16
CBandClassDst 74.6.0.0/16
CBandClassDst 67.195.114.0/24
CBandClassDst 67.195.37.0/24
CBandClassDst 202.160.178.0/20
# Yandex
CBandClassDst 77.88.22.0/21
CBandClassDst 93.158.146.0/23
# Jyxobot
CBandClassDst 195.113.214.197
# DotBot
CBandClassDst 208.115.111.0/24
# libwww-perl
CBandClassDst 195.210.89.0/24
# MSN con referrer di ricerca
# CBandClassDst 65.55.104.0/21
# Twiceler
CBandClassDst 216.129.119.1/24
CBandClassDst 64.1.215.1/24
CBandClassDst 208.36.144.1/24
CBandClassDst 38.99.13.1/24
CBandClassDst 38.99.44.1/24
# AskJeeves
CBandClassDst 66.235.124.0/24
# majestic12
CBandClassDst 85.23.64.207
CBandClassDst 212.50.134.32
CBandClassDst 85.16.151.236
CBandClassDst 85.113.244.201
CBandClassDst 68.192.9.221
CBandClassDst 85.178.109.63
# Wikio Feed
CBandClassDst 84.55.184.91
# Turnitin
CBandClassDst 65.98.224.7
# MSN
# CBandClassDst 65.55.208.0/24
# CBandClassDst 65.55.51.0/24
CBandClassDst 65.55.0.0/16
CBandClassDst 219.142.53.0/24
# Gaisbot
CBandClassDst 122.147.76.64/28
CBandClassDst 210.66.69.128/26
CBandClassDst 219.87.182.128/27
CBandClassDst 220.228.152.64/27
&lt;/CBandClass&gt;</pre>
<p>In questo modo il calcolo del traffico avverrà separatamente per &#8220;classe&#8221;. Potremo conoscere il traffico degli &#8220;utenti normali&#8221; per differenza, sottraendo dal traffico totale le classi local_class, bots_class, googlebot_class.</p>
<h3>Installare Munin</h3>
<p>Munin è uno strumento di monitoring con un meccanismo di estendibilità a plugin estremamente semplice ed intuitivo (rispetto a MRTG) che permette di monitorare uno o più server.</p>
<p>Munin si divide infatti in due pacchetti: munin e munin-node.</p>
<p>Mentre munin-node è necessario in ogni server che intendiamo controllare il pacchetto munin serve solamente nella macchina che aggregherà le statistiche per creare dei grafici tramite il noto strumento rrdtool.</p>
<p>Su Fedora Core 10 installare munin è molto semplice:</p>
<pre>sh# yum install munin munin-node</pre>
<p>Una delle peculiarità di munin è l&#8217;autoconfigurazione: i plugin infatti possono verificare l&#8217;ambiente in cui sono installati per stabilire se sono &#8220;applicabili&#8221; all&#8217;ambiente o meno. Per verificare l&#8217;autoconfigurazione possiamo lanciare questo comando:</p>
<pre>sh# munin-node-configure --shell</pre>
<p>L&#8217;output di questo comando conterrà l&#8217;elenco dei comandi da impartire alla shell per installare i plugin che dichiarano la loro compatibilità.</p>
<h3>Creare un plugin munin per mod_cband</h3>
<p>A questo punto non ci resta che creare un plugin munin che legga la pagina /cband-status e permetta così a munin di visualizzare il grafico degli accessi diviso per vhost.</p>
<p>Questo è un esempio del plugin munin che richiede la pagina e ne estrae i dati:</p>
<pre>#!/bin/sh

URL="http://localhost/cband-status?refresh=15&amp;unit=K";
WGET=`which wget`;
WGET_FLAGS="-Yoff";

# Settigs required for autoconf
#%# family=manual
#%# capabilities=autoconf

if [ "$1" = "autoconf" ]; then
echo no
exit 0
fi

if [ "$1" = "config" ]; then

echo 'graph_title CBandwith Usage '
echo 'graph_args -l 0'
echo 'graph_category apache'
echo 'graph_info This graph shows per virtual host traffic from the cband module.'
echo 'graph_vlabel Kbytes per ${graph_period}'

wget -q $WGET_FLAGS "$URL" -O - | grep -A 3 http |grep "^&lt;td .*http" |sed -e 's^.*http://\(.*\)".*^\1^' | while read site; do
metricname=$(echo $site | sed -e 's/\.//g')
#echo $metricname $site
echo $metricname'.label '$site
echo $metricname'.info Traffic generated on '$site'.'
echo $metricname'.min 0'
echo $metricname'.type DERIVE'
done;
exit 0
fi

if [ -x $WGET ]; then
SITES=$(wget -q $WGET_FLAGS "$URL" -O - | grep -A 3 http |grep "^&lt;td.*http" |sed -e 's^.*http://\(.*\)".*^\1^')
$WGET -q $WGET_FLAGS "$URL" -O - | grep -A 3 http |grep "^&lt;td.*\(color\|http\)" | while read v; do
echo -n $v | sed -e 's^.*http://\(.*\)".*^\1^' | sed -e 's/\.//g'
echo -n '.value '
read v;
echo $v | sed -e 's^.*\/\(.*\)KB.*^\1^'
done;
exit 0
fi

exit 0</pre>
<p>E questo è il risultato:</p>
<div id="attachment_234" class="wp-caption aligncenter" style="width: 511px"><a href="http://digg.it/wp-content/uploads/2009/05/apache-vhost-monitoring-munin-cband-google.gif"><img class="size-full wp-image-234" title="Grafico RRDtool Google" src="http://digg.it/wp-content/uploads/2009/05/apache-vhost-monitoring-munin-cband-google.gif" alt="Traffico generato da Google su ogni VHost" width="501" height="319" /></a><p class="wp-caption-text">Traffico generato da Google su ogni VHost</p></div>
<p>I plugin munin che ho creato sono molto spartani ma utili e controllano il <a href="http://digg.it/wp-content/uploads/2009/05/cband">traffico totale</a>, <a href="http://digg.it/wp-content/uploads/2009/05/cbandgoogle">quello di google</a>, quello <a href="http://digg.it/wp-content/uploads/2009/05/cbandbot">degli altri bots</a>, e il <a href="http://digg.it/wp-content/uploads/2009/05/cbanduser">traffico utente</a> (il totale meno i robot e meno la classe locale).</p>
<h3>Conclusioni</h3>
<p>Il modulo cband, nonostante non più aggiornato dal 2006, non sembra pesare sulle performance e la stabilità di apache2 e dopo un mesetto di utilizzo ne sono soddisfatto.</p>
<p>Dovrei migliorare il plugin configurando meglio le impostazioni dei grafici (usare il min/max/avg, stili di linea differenti.</p>
<h3>Troubleshooting</h3>
<p>Se cband non vi funziona bene probabilmente si tratta di un problema di ordine di caricamento dei files nella /etc/httpd/conf.d . Questi files vengono caricati in ordine alfabetico, quindi se le definizioni dei virtualhost le avete qui assicuratevi che vengano il ordine alfabetico dopo al mod_cband.conf</p>
<p>Io, per convenzione, li chiamo vh-dominio.conf</p>
<p>Nessun articolo simile</p>]]></content:encoded>
			<wfw:commentRss>http://digg.it/2009/05/19/analizzare-il-traffico-dei-virtualhost-di-apache-con-munin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Trasloco di siti, propagazione DNS e Reverse Proxy</title>
		<link>http://digg.it/2009/04/17/trasloco-di-siti-propagazione-dns-e-reverse-proxy/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=trasloco-di-siti-propagazione-dns-e-reverse-proxy</link>
		<comments>http://digg.it/2009/04/17/trasloco-di-siti-propagazione-dns-e-reverse-proxy/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 15:33:49 +0000</pubDate>
		<dc:creator>bago</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[reverse proxy]]></category>
		<category><![CDATA[x-forwarded-for]]></category>

		<guid isPermaLink="false">http://digg.it/?p=210</guid>
		<description><![CDATA[Lo spostamento di un sito/servizio web da un IP ad un altro può essere molto problematica. I grattacapi principali sono dovuti al tempo di propagazione del DNS, durante il quale i visitatori potrebbero approdare sia sul vecchio che sul nuovo IP in funzione di quale server DNS utilizzano e lo stato della cache. Per ridurre [...]
Nessun articolo simile]]></description>
			<content:encoded><![CDATA[<p><a href="http://digg.it/wp-content/uploads/2009/04/testimone.jpg"><img class="alignright size-full wp-image-223" title="testimone" src="http://digg.it/wp-content/uploads/2009/04/testimone.jpg" alt="testimone" width="320" height="178" /></a></p>
<p>Lo spostamento di un sito/servizio web da un IP ad un altro può essere molto problematica. I grattacapi principali sono dovuti al <strong>tempo di propagazione del DNS</strong>, durante il quale i visitatori potrebbero approdare <strong>sia sul vecchio che sul nuovo IP</strong> in funzione di quale server DNS utilizzano e lo <strong>stato della cache</strong>.</p>
<p>Per ridurre al minimo questo problema è buona norma <strong>ridurre l&#8217;expire della cache di un dominio</strong> prima di un&#8217;operazione di trasloco di questo tipo, ma questa soluzione <strong>riduce solo il problema senza rimuoverlo</strong>.</p>
<p>Il problema fondamentale consiste nel fatto che <strong>a volte non possiamo permetterci che</strong> i due servizi su<strong> i 2 IP</strong> diversi <strong>ricevano richieste contemporaneamente</strong> perchè queste richieste potrebbero modificare lo stato di entrambi i server creando una divergenza non più sincronizzabile. Basta pensare ad un blog ed il fatto che alcuni utenti potrebbero commentare sul primo IP mentre altri sul secondo, con la conseguente perdita di dati che si avrebbe a transizione completata.</p>
<p>Una soluzione spesso adottata è quella di far rispondere il nuovo (www.dominio.com) sito ad una nuova URL tipo nuovo.dominio.com, sincronizzare il database, modificare la configurazione del webserver per far si che qualunque richiesta a www.dominio.com venga rediretta (302, temporary redirect) a nuovo.dominio.com e poi aggiornare il DNS. Questa soluzione però, oltre a <strong>non</strong> essere completamente <strong>trasparente per l&#8217;utente</strong> finale, potrebbe creare problemi nel caso in cui l&#8217;applicazione che dobbiamo spostare non sia indipendente dal nome. Potremmo infatti avere già dei cookie impostati per quel detterminato l&#8217;hostname o potremmo avere dei punti del codice che controllano quale sia l&#8217;hostname attuale.</p>
<p>Per questo motivo la mia soluzione preferita è quella di <strong>utilizzare un reverse proxy</strong>. In pratica si configura il sito nuovo, si sincronizza il db, poi si configura il vecchio non più per fare un redirect ma piuttosto per andare a chiedere la stessa pagina al sito nuovo e fornirla al navigatore.</p>
<p>Per fare questo con apache2 è sufficiente abilitare il <em>mod_proxy</em> in <em>/etc/httpd/conf/httpd.conf</em> togliendo il <em>#</em> dalle due righe:</p>
<pre>LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so</pre>
<p>ed aggiungere al virtualhost che stiamo spostando le seguenti istruzioni:</p>
<pre>ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://<strong>[IP-NUOVO-SERVER]</strong>/</pre>
<p>Con questa configurazione facciamo sì che le richieste fatte a quel sito vengano gestite non più dal server locale, ma piuttosto <strong>apache2 si preoccuperà di andarle a fare sull&#8217;[IP-NUOVO-SERVER]</strong>. <strong>ProxyPreserverHost</strong> ci serve così da poter <strong>mantenere l&#8217;Host nella richiesta</strong> e fare in modo che il server di destinazione riceva la richiesta come se l&#8217;avesse ricevuta dall&#8217;utente originale.</p>
<p>ProxyPass dice che tutte le pagine vengono &#8220;girate&#8221; al nuovo IP, ma potremmo anche decidere di fare questa operazione solo con alcune sottodirectory.</p>
<p><strong>Esiste però ancora un problema</strong> legato a questa tecnica, e cioè che <strong>il nuovo server vedrà tutte le richieste venire dall&#8217;IP del vecchio server</strong> e non conoscerà più l&#8217;IP originale. Questo significa che i log avranno l&#8217;IP del &#8220;proxy&#8221; e che alcuni script potrebbero non funzionare bene.</p>
<p>Per questo <strong>viene d&#8217;aiuto</strong> un altro modulo apache chiamato <strong>mod_extract_forwarded</strong> che permette di <strong>estrarre l&#8217;IP presente nell&#8217;header X-Forwarded-For</strong> (aggiunto dal mod_proxy) <strong>e sostituirlo al remote address usato da apache.</strong></p>
<p>Se il vostro nuovo server è una fedora core 10, come la mia, allora potete installare il modulo direttamente:</p>
<pre>shell# yum install mod_extract_forwarded.i386</pre>
<p>Il file di configurazione del modulo è in <em>/etc/httpd/conf.d/mod_extract_forwarded.conf</em> . E&#8217; sufficiente aprirlo e modificare la riga <em>MEFaccept </em>inserendo l&#8217;elenco degli IP dei &#8220;proxy&#8221; fidati:</p>
<pre>MEFaccept <strong>[IP-VECCHIO-SERVER]</strong></pre>
<p>E&#8217; importante specificare questa opzione <strong>solo per gli IP dei proxy fidati</strong> perchè l&#8217;header <strong>X-Forwarded-For è un semplice header HTTP</strong> e di conseguenza è <strong>falsificabile molto semplicemente</strong>. Basti pensare che <a href="https://addons.mozilla.org/en-US/firefox/addon/5948">esiste una estensione Firefox</a> che permette di impostare tale header a piacimento.</p>
<p>Ecco fatto, sia i log che tutte le applicazioni mostreranno l&#8217;IP originale e non quello del &#8220;proxy&#8221;.</p>
<p>Nessun articolo simile</p>]]></content:encoded>
			<wfw:commentRss>http://digg.it/2009/04/17/trasloco-di-siti-propagazione-dns-e-reverse-proxy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

