<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Geekeries diverses</title>
	
	<link>http://lgnap.helpcomputer.org</link>
	<description>El Gnap et ses geekeries</description>
	<lastBuildDate>Sat, 04 Feb 2012 23:38:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/GeekeriesDiverses" /><feedburner:info uri="geekeriesdiverses" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Admin web interface cachée</title>
		<link>http://feedproxy.google.com/~r/GeekeriesDiverses/~3/AHUDtN7ba_Q/</link>
		<comments>http://lgnap.helpcomputer.org/2012/02/admin-web-interface-cachee/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 23:38:34 +0000</pubDate>
		<dc:creator>El Gnap</dc:creator>
				<category><![CDATA[Hosting]]></category>

		<guid isPermaLink="false">http://lgnap.helpcomputer.org/?p=1137</guid>
		<description><![CDATA[Avoir une interface web pour contrôler/gérer série de paramètres c&#8217;est bien. En l’occurrence moi j&#8217;ai du monitoring grâce à munin, un contrôle sur mpd grâce à relax, nzbget(web), transmission ou encore mon serveur git(web), mais voilà qui dit administration dit protection, ça me semble une évidence. Oui, bien sur vous avez le login/mdp habituel, mais quoi de mieux que d&#8217;avoir une administration qui N&#8217;EXISTE PAS aux yeux des pirates?! Et donc si elle n&#8217;existe pas, pas évident de hacker une interface qui n&#8217;existe pas. Je développe mon idée en quelques mots (j&#8217;essaie de rester simple) : pour chaque domaine que vous voulez servir avec un serveur web il vous faut (dans la plupart des cas) DEUX éléments : un ndd (nom de domaine dns) pointant vers cette adresse IP et un serveur web répondant à ce ndd préalablement établi. Et c&#8217;est sur ce 1er élément que l&#8217;on va jouer : imaginez un serveur web avec quelques noms de domaines (sans vraiment d&#8217;importance), un domaine catch-all (voir articles précédents pr en savoir +), et puis surtout notre domaine &#8216;caché&#8217;. Pour les besoins de l&#8217;explication on va le nommer : secret.help.org Imaginez maintenant que ce ndd soit défini sur le serveur http mais pas sur les dns, pas moyen d&#8217;y accéder vous allez me dire? Bah oui si je tape l&#8217;adresse ip du serveur directement je tombe sur le catch-all, un des autres domaines de ce serveur, sur le nom de domaine désigné.Et si je tape le nom de domaine je vais....]]></description>
			<content:encoded><![CDATA[<p>Avoir une interface web pour contrôler/gérer série de paramètres c&#8217;est bien. En l’occurrence moi j&#8217;ai du monitoring grâce à munin, un contrôle sur mpd grâce à relax, nzbget(web), transmission ou encore mon serveur git(web), mais voilà qui dit administration dit protection, ça me semble une évidence. Oui, bien sur vous avez le login/mdp habituel, mais quoi de mieux que d&#8217;avoir une administration qui N&#8217;EXISTE PAS aux yeux des pirates?! Et donc si elle n&#8217;existe pas, pas évident de hacker une interface qui n&#8217;existe pas.</p>
<p><span id="more-1137"></span></p>
<p>Je développe mon idée en quelques mots (j&#8217;essaie de rester simple) : pour chaque domaine que vous voulez servir avec un serveur web il vous faut (dans la plupart des cas) DEUX éléments : un ndd (nom de domaine dns) pointant vers cette adresse IP et un serveur web répondant à ce ndd préalablement établi. Et c&#8217;est sur ce 1er élément que l&#8217;on va jouer : imaginez un serveur web avec quelques noms de domaines (sans vraiment d&#8217;importance), un domaine catch-all (voir articles précédents pr en savoir +), et puis surtout notre domaine &#8216;caché&#8217;. Pour les besoins de l&#8217;explication on va le nommer :</p>
<blockquote><p>secret.help.org</p></blockquote>
<p>Imaginez maintenant que ce ndd soit défini sur le serveur http mais pas sur les dns, pas moyen d&#8217;y accéder vous allez me dire? Bah oui si je tape l&#8217;adresse ip du serveur directement je tombe sur le catch-all, un des autres domaines de ce serveur, sur le nom de domaine désigné.Et si je tape le nom de domaine je vais atterrir quelque part dans les méandres du web, mais pas sur mon serveur, puisque j&#8217;ai pas déclaré le nom de domaine.</p>
<p>C&#8217;est justement là dedans que réside toute la finesse de l&#8217;histoire : il faut réussir à faire la liaison entre ce serveur là et le nom de domaine donné pour que ça marche. Si vous avez une adresse IP fixe, une entrée dans votre fichier hosts vers l&#8217;ip en question. C&#8217;est l&#8217;IP de mon serveur et il va de soi qu&#8217;il n&#8217;y a pas d&#8217;interface admin &#8220;cachée&#8221; dessus.</p>
<blockquote><p>92.243.12.0     secret.help.org</p></blockquote>
<p>Si c&#8217;est une connexion à IP dynamique, soit vous updatez chaque fois dans le fichier hosts la nouvelle ip chaque fois qu&#8217;elle change soit vous faites en sorte qu&#8217;il y ait un dyndns ou quelque chose du genre avec un AUTRE DOMAINE que secret.help.org (par exemple dyndns.help.org) et dans un serveur dns INTERNE a votre système (sur la bécane cliente elle-même ou votre réseau local) vous enregistrez un CNAME entre secret.help.org et dyndns.help.org. Mais de nouveau ne publiez pas ce ndd sur le net.</p>
<p>Cet article est p&#8217;têtre un peu bordélique donc n&#8217;hésitez pas à poser des questions si vous comprenez pas ;)</p>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/GeekeriesDiverses/~4/AHUDtN7ba_Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lgnap.helpcomputer.org/2012/02/admin-web-interface-cachee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lgnap.helpcomputer.org/2012/02/admin-web-interface-cachee/</feedburner:origLink></item>
		<item>
		<title>Apache – Nginx &gt; Authentification</title>
		<link>http://feedproxy.google.com/~r/GeekeriesDiverses/~3/PnehwjjZ4pQ/</link>
		<comments>http://lgnap.helpcomputer.org/2012/01/apache-nginx-authentification/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 23:42:55 +0000</pubDate>
		<dc:creator>El Gnap</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[authentification]]></category>
		<category><![CDATA[AuthUserFile]]></category>
		<category><![CDATA[chercher]]></category>
		<category><![CDATA[migrer]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://lgnap.helpcomputer.org/?p=1140</guid>
		<description><![CDATA[Quand vous devez passer de Apache à NGinx vous savez déjà surement que vous allez devoir réécrire vos .htaccess dans le fichier de config du domaine lui même. Et donc les mot de passe aussi. Maix pour cela il faudrait savoir quels sont et où sont les fichiers de mots de passes utilisés. Pour cela rien de plus simple: les instructions concernant les directives d&#8217;auth peuvent se trouver dans 2 endroits : /etc/apache2/ votre /var/www à vous On va devoir fouiller ces deux endroits, et pour le premier. /etc/apache2/ Rien de tel qu&#8217;un petit : grep -r AuthUserFile /etc/apache2/* grep : je ne présente plus -r : mode récursif AuthUserFile : la partie qui doit toujours précéder un path de fichier de mdp dans la config d&#8217;apache le path vers le répertoire de config d&#8217;apache /var/www Vous pourriez utiliser le même grep, mais celui s&#8217;avère très lent. Donc je préfère la solution ci dessous.  find /var/www -iname .htaccess -ls -exec grep AuthUserFile {} \; find : no comment -iname .htaccess : chercher uniquement les fichiers .htaccess -ls : les lister -exec grep {} AuthUserFile J&#8217;ai voulu mettre des screenshots mais il y a trop d&#8217;infos confidentielles à flouter, so j&#8217;ai laissé tomber.  Les commandes devraient vous suffire]]></description>
			<content:encoded><![CDATA[<p>Quand vous devez passer de Apache à NGinx vous savez déjà surement que vous allez devoir réécrire vos .htaccess dans le fichier de config du domaine lui même. Et donc les mot de passe aussi. Maix pour cela il faudrait savoir quels sont et où sont les fichiers de mots de passes utilisés.</p>
<p>Pour cela rien de plus simple: les instructions concernant les directives d&#8217;auth peuvent se trouver dans 2 endroits :</p>
<ul>
<li>/etc/apache2/</li>
<li>votre /var/www à vous</li>
</ul>
<p>On va devoir fouiller ces deux endroits, et pour le premier.</p>
<p><span id="more-1140"></span></p>
<h2>/etc/apache2/</h2>
<p>Rien de tel qu&#8217;un petit :</p>
<blockquote><p>grep -r AuthUserFile /etc/apache2/*</p></blockquote>
<ul>
<li>grep : je ne présente plus</li>
<li>-r : mode récursif</li>
<li>AuthUserFile : la partie qui doit toujours précéder un path de fichier de mdp dans la config d&#8217;apache</li>
<li>le path vers le répertoire de config d&#8217;apache</li>
</ul>
<h2>/var/www</h2>
<p>Vous pourriez utiliser le même grep, mais celui s&#8217;avère très lent. Donc je préfère la solution ci dessous.</p>
<blockquote><p> find /var/www -iname .htaccess -ls -exec grep AuthUserFile {} \;</p></blockquote>
<ul>
<li>find : no comment</li>
<li>-iname .htaccess : chercher uniquement les fichiers .htaccess</li>
<li>-ls : les lister</li>
<li>-exec grep {} AuthUserFile</li>
</ul>
<p>J&#8217;ai voulu mettre des screenshots mais il y a trop d&#8217;infos confidentielles à flouter, so j&#8217;ai laissé tomber.  Les commandes devraient vous suffire</p>
<img src="http://feeds.feedburner.com/~r/GeekeriesDiverses/~4/PnehwjjZ4pQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lgnap.helpcomputer.org/2012/01/apache-nginx-authentification/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lgnap.helpcomputer.org/2012/01/apache-nginx-authentification/</feedburner:origLink></item>
		<item>
		<title>Trouver une fuite réseau sur un serveur</title>
		<link>http://feedproxy.google.com/~r/GeekeriesDiverses/~3/keLtQ_cYfPc/</link>
		<comments>http://lgnap.helpcomputer.org/2012/01/trouver-une-fuite-reseau-sur-un-serveur/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 23:27:19 +0000</pubDate>
		<dc:creator>El Gnap</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[fuite]]></category>
		<category><![CDATA[leak]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[réseau]]></category>
		<category><![CDATA[serveur]]></category>

		<guid isPermaLink="false">http://lgnap.helpcomputer.org/?p=1144</guid>
		<description><![CDATA[Il y a quelques jours est venu un twitto @woueb demandant : comment faire pour voir l&#8217;origine d&#8217;une grosse fuite réseau ? Ayant même pas regardé qu&#8217;il y avait un GIGANTESQUE menu Statistics je l&#8217;ai mis à l&#8217;amande et me suis donné du boulot :-P Faut d&#8217;abord commencer par logguer tout ce qui passe sur la machine pour pouvoir traiter les données après. Commande on ne peut plus simple : Tcpdump screen tcpdump -w tcp.dmp screen : surtout pour éviter que le dump s&#8217;arrete au logout de la session ssh (oui screen intercepte le signal SIGHUP qui force l’arrêt des programmes) tcpdump : sniffer de traffic -w tcp.dump : au lieu de tout m&#8217;afficher à l&#8217;écran tu me l&#8217;écris dans ce fichier. Après avoir déconnecté (ctrl+A+D pr quitter screen) et laisser la commande tourner pendant quelques heures vous vous reconnectez sur le serveur, vous interrompez avec un tit ctrl + C tcpdump (screen -r pour retourner dans le screen abandonné). Vous rapatriez le fichier en local scp, sftp ou autre (il n&#8217;est pas trop gros en 7h30 de capture il fait 40Mo pour moi). Et vous l&#8217;ouvrez avec wireshark. Wireshark Vous pouvez maintenant avoir PLEIN d&#8217;infos sur ce qui s&#8217;est passé sur votre serveur pendant votre absence. Pour chaque affichage vous pouvez trier par la colonne de votre choix. Voilààààà en espérant que ça vous a aidé et que je vais me faire linker par @woueb :-P]]></description>
			<content:encoded><![CDATA[<p>Il y a quelques jours est venu un twitto @woueb demandant : comment faire pour voir l&#8217;origine d&#8217;une grosse fuite réseau ?<br />
Ayant même pas regardé qu&#8217;il y avait un GIGANTESQUE menu Statistics je l&#8217;ai mis à l&#8217;amande et me suis donné du boulot :-P</p>
<p>Faut d&#8217;abord commencer par logguer tout ce qui passe sur la machine pour pouvoir traiter les données après. Commande on ne peut plus simple :</p>
<h2>Tcpdump</h2>
<blockquote><p>screen tcpdump -w tcp.dmp</p></blockquote>
<p><span id="more-1144"></span></p>
<ul>
<li>screen : surtout pour éviter que le dump s&#8217;arrete au logout de la session ssh (oui screen intercepte le signal SIGHUP qui force l’arrêt des programmes)</li>
<li>tcpdump : sniffer de traffic</li>
<li>-w tcp.dump : au lieu de tout m&#8217;afficher à l&#8217;écran tu me l&#8217;écris dans ce fichier.</li>
</ul>
<p>Après avoir déconnecté (ctrl+A+D pr quitter screen) et laisser la commande tourner pendant quelques heures vous vous reconnectez sur le serveur, vous interrompez avec un tit ctrl + C tcpdump (screen -r pour retourner dans le screen abandonné).</p>
<p>Vous rapatriez le fichier en local scp, sftp ou autre (il n&#8217;est pas trop gros en 7h30 de capture il fait 40Mo pour moi). Et vous l&#8217;ouvrez avec wireshark.</p>
<h2>Wireshark</h2>
<p>Vous pouvez maintenant avoir PLEIN d&#8217;infos sur ce qui s&#8217;est passé sur votre serveur pendant votre absence. Pour chaque affichage vous pouvez trier par la colonne de votre choix.</p>
<div id="attachment_1148" class="wp-caption aligncenter" style="width: 770px"><a href="http://lgnap.helpcomputer.org/wp-content/uploads/2012/01/protoHierar.png"><img class="size-large wp-image-1148" title="protoHierar" src="http://lgnap.helpcomputer.org/wp-content/uploads/2012/01/protoHierar-1024x172.png" alt="" width="760" height="127" /></a><p class="wp-caption-text">Les protocoles qui ont été utilisés (bcp de tunnelling ssh pour mon cas)</p></div>
<p style="text-align: center;">
<div id="attachment_1145" class="wp-caption aligncenter" style="width: 770px"><a href="http://lgnap.helpcomputer.org/wp-content/uploads/2012/01/convIp.png"><img class="size-large wp-image-1145" title="convIp" src="http://lgnap.helpcomputer.org/wp-content/uploads/2012/01/convIp-1024x351.png" alt="" width="760" height="260" /></a><p class="wp-caption-text">Quelles sont les conversations qu&#39;il a tenu en IPv4</p></div>
<div id="attachment_1149" class="wp-caption aligncenter" style="width: 770px"><a href="http://lgnap.helpcomputer.org/wp-content/uploads/2012/01/convTcp1.png"><img class="size-large wp-image-1149" title="convTcp" src="http://lgnap.helpcomputer.org/wp-content/uploads/2012/01/convTcp1-1024x359.png" alt="" width="760" height="266" /></a><p class="wp-caption-text">Et celles en TCP (udp étant svt bêtement du DNS)</p></div>
<div id="attachment_1147" class="wp-caption aligncenter" style="width: 770px"><a href="http://lgnap.helpcomputer.org/wp-content/uploads/2012/01/endpoints.png"><img class="size-large wp-image-1147" title="endpoints" src="http://lgnap.helpcomputer.org/wp-content/uploads/2012/01/endpoints-1024x252.png" alt="" width="760" height="187" /></a><p class="wp-caption-text">Le plus interessant : avec qui et sur quel port il a parlé</p></div>
<p>Voilààààà en espérant que ça vous a aidé et que je vais me faire linker par @<a href="https://twitter.com/#!/woueb">woueb</a> :-P</p>
<img src="http://feeds.feedburner.com/~r/GeekeriesDiverses/~4/keLtQ_cYfPc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lgnap.helpcomputer.org/2012/01/trouver-une-fuite-reseau-sur-un-serveur/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lgnap.helpcomputer.org/2012/01/trouver-une-fuite-reseau-sur-un-serveur/</feedburner:origLink></item>
		<item>
		<title>Awstats – passer de Apache à Nginx</title>
		<link>http://feedproxy.google.com/~r/GeekeriesDiverses/~3/BcuUVljQFsE/</link>
		<comments>http://lgnap.helpcomputer.org/2012/01/awstats-passer-de-apache-a-nginx/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 00:30:30 +0000</pubDate>
		<dc:creator>El Gnap</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[awstats]]></category>
		<category><![CDATA[awstats.pl]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[stats]]></category>
		<category><![CDATA[switcher]]></category>

		<guid isPermaLink="false">http://lgnap.helpcomputer.org/?p=1131</guid>
		<description><![CDATA[Si vous pensez à faire le changement le jour où vous passez d&#8217;un serveur à l&#8217;autre c&#8217;est très simple. Il vous suffira d&#8217;éditer le fichier /etc/awstats/awstats-nom-de-domaine.conf et d&#8217;éditer la ligne LogFile=&#8221;" Et d&#8217;y mettre le path du nouveau fichier de log. Je parlerai dans un autre poste de la partie affichage grâce à nginx, ici on parse déjà les bons fichiers de log, c&#8217;est déjà pas mal. Heu, et si j&#8217;avais oublié? C&#8217;est là que ça se corse. Nginx fait automatiquement du renommage puis de la compression de ses anciens logs. Et donc quand awstats parse le log, il ne parse que les requêtes du jour. Il va donc falloir tout décompresser, agréger, demander à awstats de parser, puis nettoyer nos déchets. Décompression Allez dans le /var/log/nginx/ repérez le nom de domaine/log qui vous intéresse faites en sorte de lister que les ACCESS log gzippés. ls lgnap.helpcomputer.org-access.log*.gz #pour moi par exemple :) faites un gunzip sur ces fichiers gunzip lgnap.helpcomputer.org-access.log*.gz Rangement ensuite il nous faut les ranger dans le bon ordre ls lgnap.helpcomputer.org-access.log* &#124; sort -Vr sort : permet de trier -V : trie par version (et comme chaque fichier est suffixé par un numéro de &#8220;version&#8221; c&#8217;est niquel) -r : inverse (pour avoir la plus vieille version au début) Agrégation Il faudra encore afficher le contenu de chaque fichier du ls et tout globaliser dans un seul fichier. J&#8217;ai fait un mini script pour ça, le voici : #/bin/sh &#160; LIST=`ls lgnap.helpcomputer.org-access.log* &#124; sort -Vr` for i in $LIST....]]></description>
			<content:encoded><![CDATA[<p>Si vous pensez à faire le changement le jour où vous passez d&#8217;un serveur à l&#8217;autre c&#8217;est très simple.<br />
Il vous suffira d&#8217;éditer le fichier <em>/etc/awstats/awstats-nom-de-domaine.conf</em> et d&#8217;éditer la ligne</p>
<blockquote><p>LogFile=&#8221;"</p></blockquote>
<p>Et d&#8217;y mettre le path du nouveau fichier de log.</p>
<p>Je parlerai dans un autre poste de la partie affichage grâce à nginx, ici on parse déjà les bons fichiers de log, c&#8217;est déjà pas mal.</p>
<h2>Heu, et si j&#8217;avais oublié?</h2>
<p><span id="more-1131"></span></p>
<p>C&#8217;est là que ça se corse. Nginx fait automatiquement du renommage puis de la compression de ses anciens logs. Et donc quand awstats parse le log, il ne parse que les requêtes du jour. Il va donc falloir tout décompresser, agréger, demander à awstats de parser, puis nettoyer nos déchets.</p>
<h3>Décompression</h3>
<p>Allez dans le <em>/var/log/nginx/</em> repérez le nom de domaine/log qui vous intéresse faites en sorte de lister que les ACCESS log gzippés.</p>
<blockquote><p>ls lgnap.helpcomputer.org-access.log*.gz <span style="color: #000080;">#pour moi par exemple :)</span></p></blockquote>
<p>faites un gunzip sur ces fichiers</p>
<blockquote><p>gunzip lgnap.helpcomputer.org-access.log*.gz</p></blockquote>
<h3>Rangement</h3>
<p>ensuite il nous faut les ranger dans le bon ordre</p>
<blockquote><p>ls lgnap.helpcomputer.org-access.log* | sort -Vr</p></blockquote>
<ul>
<li>sort : permet de trier</li>
<li>-V : trie par version (et comme chaque fichier est suffixé par un numéro de &#8220;version&#8221; c&#8217;est niquel)</li>
<li>-r : inverse (pour avoir la plus vieille version au début)</li>
</ul>
<h3>Agrégation</h3>
<p>Il faudra encore afficher le contenu de chaque fichier du ls et tout globaliser dans un seul fichier. J&#8217;ai fait un mini script pour ça, le voici :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#/bin/sh</span>
&nbsp;
<span style="color: #007800;">LIST</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">ls</span> lgnap.helpcomputer.org-access.log<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> -Vr<span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #007800;">$LIST</span>
<span style="color: #000000; font-weight: bold;">do</span>
        <span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #007800;">$i</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">&amp;</span>gt; lgnap.agregated.log;
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<h3>Parser ce fichier</h3>
<p>Cfr la première étape vous allez indiquer le path du fichier dans lequel on a tout agrégé. Forcer le parsing du fichier avec la commande suivante :</p>
<blockquote><p>/usr/lib/cgi-bin/awstats.pl -config=lgnap.helpcomputer.org</p></blockquote>
<ul>
<li>awstats.pl le script</li>
<li>-config= &#8220;<span style="color: #ff0000;">nom-de-domaine</span>&#8221; (extrait de /etc/awstats/awstats-<span style="color: #ff0000;">nom-de-domaine</span>.conf)</li>
</ul>
<p>Un petit message vous dira ce qui a été parsé avec succès, vous n&#8217;avez plus qu&#8217;a faire comme si tout ceci n&#8217;avait jamais eu lieu et mettre le fichier de log de nginx original &#8220;<em>/var/log/nginx/lgnap.helpcomputer.org-access.log&#8221;</em> dans le fichier de config<em>.</em></p>
<h3>Nettoyage</h3>
<p>Il faudra ensuite (pour bien faire) regzipper les fichiers que vous avez gunzippé</p>
<blockquote><p>gzip &#8230;</p></blockquote>
<p>Et supprimer le fichier où on avait tout agrégé aussi <em>lgnap.agregated.log</em></p>
<p>Enjoy ;)</p>
<h2>Sources</h2>
<ul>
<li><a href="http://www.zmanda.com/quick-mysql-backup.html">http://www.zmanda.com/quick-mysql-backup.html</a></li>
<li><a href="http://openconcept.ca/mysql_permissions_for_backup">http://openconcept.ca/mysql_permissions_for_backup</a></li>
<li><a href="http://dev.mysql.com/doc/refman/5.0/fr/mysqldump.html">http://dev.mysql.com/doc/refman/5.0/fr/mysqldump.html</a></li>
<li><a href="http://sql-info.de/mysql/notes/compressing-mysqldump-output.html">http://sql-info.de/mysql/notes/compressing-mysqldump-output.html</a></li>
</ul>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/GeekeriesDiverses/~4/BcuUVljQFsE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lgnap.helpcomputer.org/2012/01/awstats-passer-de-apache-a-nginx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lgnap.helpcomputer.org/2012/01/awstats-passer-de-apache-a-nginx/</feedburner:origLink></item>
		<item>
		<title>Nginx – catch all</title>
		<link>http://feedproxy.google.com/~r/GeekeriesDiverses/~3/GARAkT_jsWg/</link>
		<comments>http://lgnap.helpcomputer.org/2012/01/nginx-catch-all/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 23:00:19 +0000</pubDate>
		<dc:creator>El Gnap</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[catchall]]></category>
		<category><![CDATA[default]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[no domain]]></category>

		<guid isPermaLink="false">http://lgnap.helpcomputer.org/?p=1107</guid>
		<description><![CDATA[Tout d&#8217;abord c&#8217;est quoi un catchall ? C&#8217;est une route par défaut. Si par exemple la personne qui a tapé votre adresse mail a fait une erreur comme lngap à la place de lgnap je ne vais pas recevoir votre mail. Mais si l&#8217;adminsys a bien fait ça il devrait avoir défini une adresse mail catchall qui récupère tout ce qui n&#8217;a pas de destinataire existant et/ou adéquat. Et bien pour les serveurs web c&#8217;est la même chose. Si vous ne spécifiez pas un host traité par le serveur dans l&#8217;url (par exemple une IP directe ou un nom de domaine pas prévu pour être utilisé sur le serveur web) on ne sait pas trop où il vous emmène. Voilà l’intérêt de ce serveur/domaine ci, le savoir et contrôler ce sur quoi ils peuvent tomber. Bref, voici le code : server &#123; listen localhost:8888 default; # le default indique que c'est le 'domaine/server' catchall server_name _; # This is just an invalid value which will never trigger on a real hostname. server_name_in_redirect off; &#160; index index.php index.htm index.html; #fichiers servant d'index qu'il va essayer de charger &#160; #J'ai pris le parti d'activer l'autoindex sur ce domaine location / &#123; autoindex on; autoindex_exact_size off; &#125; &#160; #nginx status pour munin (mais uniquement accèssible depuis localhost pr des raisons de sécurité) location /nginx_status &#123; #copied from http://blog.kovyrin.net/2006/04/29/monitoring-nginx-with-rrdtool/ stub_status on; allow 127.0.0.1; deny all; &#125; &#160; #on empeche la lecture d'htaccess qui traineraient location ~* \.htaccess$ &#123; deny all; &#125; &#160; #On passe....]]></description>
			<content:encoded><![CDATA[<p>Tout d&#8217;abord c&#8217;est quoi un catchall ? C&#8217;est une route par défaut. Si par exemple la personne qui a tapé votre adresse mail a fait une erreur comme lngap à la place de lgnap je ne vais pas recevoir votre mail. Mais si l&#8217;adminsys a bien fait ça il devrait avoir défini une adresse mail catchall qui récupère tout ce qui n&#8217;a pas de destinataire existant et/ou adéquat.</p>
<p>Et bien pour les serveurs web c&#8217;est la même chose. Si vous ne spécifiez pas un host traité par le serveur dans l&#8217;url (par exemple une IP directe ou un nom de domaine pas prévu pour être utilisé sur le serveur web) on ne sait pas trop où il vous emmène. Voilà l’intérêt de ce serveur/domaine ci, le savoir et contrôler ce sur quoi ils peuvent tomber.<br />
<span id="more-1107"></span><br />
Bref, voici le code :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">server <span style="color: #7a0874; font-weight: bold;">&#123;</span>
	listen localhost:<span style="color: #000000;">8888</span> default; <span style="color: #666666; font-style: italic;"># le default indique que c'est le 'domaine/server' catchall</span>
	server_name _; <span style="color: #666666; font-style: italic;"># This is just an invalid value which will never trigger on a real hostname.</span>
	server_name_in_redirect off;
&nbsp;
	index index.php index.htm index.html; <span style="color: #666666; font-style: italic;">#fichiers servant d'index qu'il va essayer de charger</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">#J'ai pris le parti d'activer l'autoindex sur ce domaine</span>
	location  <span style="color: #000000; font-weight: bold;">/</span>  <span style="color: #7a0874; font-weight: bold;">&#123;</span>
		autoindex  on;
		autoindex_exact_size off;
	<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">#nginx status pour munin (mais uniquement accèssible depuis localhost pr des raisons de sécurité)</span>
        location <span style="color: #000000; font-weight: bold;">/</span>nginx_status <span style="color: #7a0874; font-weight: bold;">&#123;</span> <span style="color: #666666; font-style: italic;">#copied from http://blog.kovyrin.net/2006/04/29/monitoring-nginx-with-rrdtool/</span>
                stub_status on;
                allow 127.0.0.1;
                deny all;
        <span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">#on empeche la lecture d'htaccess qui traineraient</span>
	location ~<span style="color: #000000; font-weight: bold;">*</span> \.htaccess$ <span style="color: #7a0874; font-weight: bold;">&#123;</span>
		deny all;	
	<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">#On passe les php a fastCGI</span>
	location ~ \.php$ <span style="color: #7a0874; font-weight: bold;">&#123;</span>
		include        fastcgi_params;
		fastcgi_pass   localhost:<span style="color: #000000;">9000</span>;
		<span style="color: #666666; font-style: italic;">#fastcgi_index  index.php;</span>
		fastcgi_param  SCRIPT_FILENAME  <span style="color: #007800;">$document_root</span><span style="color: #007800;">$fastcgi_script_name</span>;
	<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
	root  <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>nginx-default; <span style="color: #666666; font-style: italic;">#Document root (le dossier du serveur en fait...)</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">#logs</span>
	access_log  <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>catch.all-access.log;
	error_log  <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>catch.all-error.log;
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></div></div>

<img src="http://feeds.feedburner.com/~r/GeekeriesDiverses/~4/GARAkT_jsWg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lgnap.helpcomputer.org/2012/01/nginx-catch-all/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lgnap.helpcomputer.org/2012/01/nginx-catch-all/</feedburner:origLink></item>
		<item>
		<title>Tunnel SSH permanent</title>
		<link>http://feedproxy.google.com/~r/GeekeriesDiverses/~3/XdbHf5CPQcc/</link>
		<comments>http://lgnap.helpcomputer.org/2012/01/tunnel-ssh-permanent/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 11:09:18 +0000</pubDate>
		<dc:creator>El Gnap</dc:creator>
				<category><![CDATA[Au quotidien]]></category>
		<category><![CDATA[reliable]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[stable]]></category>
		<category><![CDATA[tunnel]]></category>

		<guid isPermaLink="false">http://lgnap.helpcomputer.org/?p=1119</guid>
		<description><![CDATA[Le simple script suivant lancé dans un screen fera parfaitement l&#8217;affaire (et propose même du logging pour savoir quand la connexion tombe et/ou est relancée) #!/bin/sh &#160; while true do #establish a ssh tunnel between localhost port 5555 and distant 2424 #tunnel enabled echo -n &#34;connection restart : &#34; &#62;&#62; tunnel.log date --rfc-3339=seconds &#62;&#62; tunnel.log ssh -L 5555:localhost:2424 user@host #connection dropped, logging, wait (socket issue if not) and restart echo -n &#34;connection dropped : &#34; &#62;&#62; tunnel.log date --rfc-3339=seconds &#62;&#62; tunnel.log #after a short sleep and try again ;-) sleep 10 done Nul besoin de dire qu&#8217;il faut des clés ssh pour pouvoir se connecter sans mdp sur un serveur distant et que il est approprié de n&#8217;offrir aucun droit sur le serveur ou presque à l&#8217;utilisateur qui se connecte en utilisant cette clé. Juste du port forwarding, ni plus ni moins.]]></description>
			<content:encoded><![CDATA[<p>Le simple script suivant lancé dans un screen fera parfaitement l&#8217;affaire (et propose même du logging pour savoir quand la connexion tombe et/ou est relancée)</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">true</span>
<span style="color: #000000; font-weight: bold;">do</span>
<span style="color: #666666; font-style: italic;">#establish a ssh tunnel between localhost port 5555 and distant 2424</span>
<span style="color: #666666; font-style: italic;">#tunnel enabled</span>
  <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;connection restart : &quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> tunnel.log
  <span style="color: #c20cb9; font-weight: bold;">date</span> <span style="color: #660033;">--rfc-3339</span>=seconds <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> tunnel.log
  <span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #660033;">-L</span> <span style="color: #000000;">5555</span>:localhost:<span style="color: #000000;">2424</span> user<span style="color: #000000; font-weight: bold;">@</span>host
<span style="color: #666666; font-style: italic;">#connection dropped, logging, wait (socket issue if not) and restart</span>
  <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;connection dropped : &quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> tunnel.log
  <span style="color: #c20cb9; font-weight: bold;">date</span> <span style="color: #660033;">--rfc-3339</span>=seconds <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> tunnel.log
<span style="color: #666666; font-style: italic;">#after a short sleep and try again ;-)</span>
  <span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #000000;">10</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>Nul besoin de dire qu&#8217;il faut des clés ssh pour pouvoir se connecter sans mdp sur un serveur distant et que il est approprié de n&#8217;offrir aucun droit sur le serveur ou presque à l&#8217;utilisateur qui se connecte en utilisant cette clé. Juste du port forwarding, ni plus ni moins.</p>
<img src="http://feeds.feedburner.com/~r/GeekeriesDiverses/~4/XdbHf5CPQcc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lgnap.helpcomputer.org/2012/01/tunnel-ssh-permanent/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lgnap.helpcomputer.org/2012/01/tunnel-ssh-permanent/</feedburner:origLink></item>
		<item>
		<title>Vim – montre tes caractères invisibles !</title>
		<link>http://feedproxy.google.com/~r/GeekeriesDiverses/~3/BocHEDqchB8/</link>
		<comments>http://lgnap.helpcomputer.org/2012/01/vim-montre-tes-caracteres-invisibles/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 15:46:55 +0000</pubDate>
		<dc:creator>El Gnap</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[caractères]]></category>
		<category><![CDATA[chars]]></category>
		<category><![CDATA[hidden]]></category>
		<category><![CDATA[invisible]]></category>
		<category><![CDATA[montrer]]></category>
		<category><![CDATA[show]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://lgnap.helpcomputer.org/?p=1109</guid>
		<description><![CDATA[Document original Afficher ou pas les caractères cachés peut se faire avec la commande (toggle function): :set invlist Ceci permet de les afficher :set list Et ceci fait la commande inverse :set list! Vous choisissez celle que vous retenez le plus facilement. Document avec les caractères tels quels Les deux caractères que j&#8217;aime voir sont les fins de ligne et les tabulations j&#8217;offre donc un traitement particulier à ces caractères avec la commande suivante : :set lcs=eol:$,tab:>- Document avec les caractères &#8216;améliorés&#8217; Tout ça venant de la bonne grosse doc officielle.]]></description>
			<content:encoded><![CDATA[<h2>Document original</h2>
<p><a href="http://lgnap.helpcomputer.org/wp-content/uploads/2012/01/hcShowed.png"><img src="http://lgnap.helpcomputer.org/wp-content/uploads/2012/01/hcShowed.png" alt="" title="hcShowed" width="902" height="207" class="aligncenter size-full wp-image-1115" /></a><br />
<span id="more-1109"></span><br />
Afficher ou pas les caractères cachés peut se faire avec la commande (toggle function):</p>
<blockquote><p>:set invlist</p></blockquote>
<p>Ceci permet de les afficher</p>
<blockquote><p>:set list</p></blockquote>
<p>Et ceci fait la commande inverse</p>
<blockquote><p>:set list!</p></blockquote>
<p>Vous choisissez celle que vous retenez le plus facilement.</p>
<h2>Document avec les caractères tels quels</h2>
<p><a href="http://lgnap.helpcomputer.org/wp-content/uploads/2012/01/hcClassic.png"><img src="http://lgnap.helpcomputer.org/wp-content/uploads/2012/01/hcClassic.png" alt="" title="hcClassic" width="881" height="223" class="aligncenter size-full wp-image-1114" /></a><br />
Les deux caractères que j&#8217;aime voir sont les fins de ligne et les tabulations j&#8217;offre donc un traitement particulier à ces caractères avec la commande suivante :</p>
<blockquote><p>:set lcs=eol:$,tab:>-</p></blockquote>
<h2>Document avec les caractères &#8216;améliorés&#8217;</h2>
<p><a href="http://lgnap.helpcomputer.org/wp-content/uploads/2012/01/hcBetter.png"><img src="http://lgnap.helpcomputer.org/wp-content/uploads/2012/01/hcBetter.png" alt="" title="hcBetter" width="915" height="204" class="aligncenter size-full wp-image-1116" /></a><br />
Tout ça venant de <a href="http://vimdoc.sourceforge.net/htmldoc/options.html#%27listchars%27">la bonne grosse doc officielle</a>.</p>
<img src="http://feeds.feedburner.com/~r/GeekeriesDiverses/~4/BocHEDqchB8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lgnap.helpcomputer.org/2012/01/vim-montre-tes-caracteres-invisibles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lgnap.helpcomputer.org/2012/01/vim-montre-tes-caracteres-invisibles/</feedburner:origLink></item>
		<item>
		<title>Php fcgi memory leaks</title>
		<link>http://feedproxy.google.com/~r/GeekeriesDiverses/~3/prVnA4ng4cY/</link>
		<comments>http://lgnap.helpcomputer.org/2012/01/php-fcgi-memory-leaks/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 21:58:35 +0000</pubDate>
		<dc:creator>El Gnap</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[fastCGI]]></category>
		<category><![CDATA[leak]]></category>
		<category><![CDATA[limit]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php-cgi]]></category>

		<guid isPermaLink="false">http://lgnap.helpcomputer.org/?p=1097</guid>
		<description><![CDATA[Avec la configuration que j&#8217;avais donnée auparavant pour charger php via FCGI, les enfants n&#8217;étaient jamais &#8220;killés&#8221; et les heures passant le serveur fastCGI prenait de plus en plus de mémoire au point de sérieusement entamer dans la RAM et donc passer sur le swap comme le montre la jolie montagne rouge. La solution est de faire comme apache et de forcer fastCGI a tuer son enfant après un nombre donné de requêtes. Plus grand est le nombre donné de requêtes moins souvent il devra rebooter (et sera donc disponible pour les clients et donc plus rapide à la détente), mais plus gros il sera en mémoire. J&#8217;ai essayé un premier chiffre de 500 requêtes. Comme dans mon cas j&#8217;ai 3 enfants php, ça signifie qu&#8217;il y aura eu reboot du pool complet toutes les 1500 requêtes +-. Il vous suffit de glisser le code ci entre la ligne DAEMON= et DAEMON_ARGS (la place n&#8217;a pas beaucoup d&#8217;importance tant que c&#8217;est dans les variables du début en réalité) # Specify the requests limit for a php instance (prevent memory leaks) PHP_FCGI_MAX_REQUESTS=500 export PHP_FCGI_MAX_REQUESTS; J&#8217;ai mis à jour la configuration dans mon script init.d évoqué précédemment donc si vous voulez tout le script n&#8217;hésitez pas.]]></description>
			<content:encoded><![CDATA[<p>Avec <a href="http://lgnap.helpcomputer.org/2012/01/script-init-d-pour-php-cgi-spawn-fcgi-php/">la configuration que j&#8217;avais donnée auparavant pour charger php via FCGI</a>, les enfants n&#8217;étaient jamais &#8220;killés&#8221; et les heures passant le serveur fastCGI prenait de plus en plus de mémoire au point de sérieusement entamer dans la RAM et donc passer sur le swap comme le montre la jolie montagne rouge.<br />
<span id="more-1097"></span><br />
<a href="http://lgnap.helpcomputer.org/wp-content/uploads/2012/01/memory-day.png"><img src="http://lgnap.helpcomputer.org/wp-content/uploads/2012/01/memory-day.png" alt="" title="memory-day" width="497" height="424" class="aligncenter size-full wp-image-1098" /></a><br />
La solution est de faire comme apache et de forcer fastCGI a tuer son enfant après un nombre donné de requêtes.<br />
Plus grand est le nombre donné de requêtes moins souvent il devra rebooter (et sera donc disponible pour les clients et donc plus rapide à la détente), mais plus gros il sera en mémoire. J&#8217;ai essayé un premier chiffre de 500 requêtes. Comme dans mon cas j&#8217;ai 3 enfants php, ça signifie qu&#8217;il y aura eu reboot du pool complet toutes les 1500 requêtes +-.</p>
<p>Il vous suffit de glisser le code ci entre la ligne DAEMON= et DAEMON_ARGS (la place n&#8217;a pas beaucoup d&#8217;importance tant que c&#8217;est dans les variables du début en réalité)</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Specify the requests limit for a php instance (prevent memory leaks)</span>
<span style="color: #007800;">PHP_FCGI_MAX_REQUESTS</span>=<span style="color: #000000;">500</span>
<span style="color: #7a0874; font-weight: bold;">export</span> PHP_FCGI_MAX_REQUESTS;</pre></div></div>

<p>J&#8217;ai mis à jour la configuration dans mon script init.d évoqué précédemment donc si vous voulez <a href="http://lgnap.helpcomputer.org/2012/01/script-init-d-pour-php-cgi-spawn-fcgi-php/">tout le script n&#8217;hésitez pas</a>.</p>
<img src="http://feeds.feedburner.com/~r/GeekeriesDiverses/~4/prVnA4ng4cY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lgnap.helpcomputer.org/2012/01/php-fcgi-memory-leaks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lgnap.helpcomputer.org/2012/01/php-fcgi-memory-leaks/</feedburner:origLink></item>
		<item>
		<title>Apache – config optimisée – étape par étape</title>
		<link>http://feedproxy.google.com/~r/GeekeriesDiverses/~3/iApYD2CXt0g/</link>
		<comments>http://lgnap.helpcomputer.org/2012/01/apache-config-optimisee-etape-par-etape/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 17:22:20 +0000</pubDate>
		<dc:creator>El Gnap</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[Keepalive]]></category>
		<category><![CDATA[MaxClients]]></category>
		<category><![CDATA[MaxKeepAliveRequests]]></category>
		<category><![CDATA[MaxRequestsPerChild]]></category>
		<category><![CDATA[MaxSpareServers]]></category>
		<category><![CDATA[MinSpareServers]]></category>
		<category><![CDATA[StartServers]]></category>
		<category><![CDATA[Timeout]]></category>

		<guid isPermaLink="false">http://lgnap.helpcomputer.org/?p=1063</guid>
		<description><![CDATA[Je suis tombé sur un excellent article en anglais, mais tout le monde ne maitrisant pas l&#8217;anglais j&#8217;ai entrepris de le traduire pour vous. Il explique comment choisir les valeurs les plus critiques dans apache (MaxClients, Keepalive, Timeout, MaxKeepAliveRequests, MinSpareServers, MaxSpareServers, StartServers, MaxRequestsPerChild) en suivant une procédure plutôt bien expliquée. Je propose une version step-by-step (pour débuter) suivie d&#8217;une sorte de raisonnement mathématique (pour juste avoir les calculs). Step by step version Lancer top Prendre dans la colonne RES la plus grande valeur utilisée par apache2 Quitter top (appuyer sur q) Couper apache : service apache2 stop Vérifier qu&#8217;apache est bien arrêté : ps -C apache2 devrait ne rien renvoyer Noter la mémoire utilisée (commande free -m lire sous la colonne used la ligne mem) Trouver la mémoire que votre machine ou VPS vous propose/garanti. Soustraire la mémoire utilisée de cette valeur garantie cela vous donnera une valeur que l&#8217;on notera FREE MEMORY POOL Multiplier cette dernière valeur par 0.8 de façon à avoir une valeur que l&#8217;on nommera  AVAILABLE APACHE POOL (nous laissons 20% pour les périodes de burst) Diviser cette dernière valeur par la valeur RES récoltée au point 2. Ceci vous donne la valeur MaxClients de votre apache2.conf Ne pas oublier que chaque valeur spécifiée dans le fichier de config doit être entière et non décimale. Une valeur inférieure vous fera peut être un serveur un tout petit peu plus lent mais avec nettement moins de risque qu&#8217;il parte dans les choux à long terme. Pensez y&#8230;....]]></description>
			<content:encoded><![CDATA[<p>Je suis tombé sur un excellent article en anglais, mais tout le monde ne maitrisant pas l&#8217;anglais j&#8217;ai entrepris de le traduire pour vous.</p>
<p>Il explique comment choisir les valeurs les plus critiques dans apache (<em>MaxClients, Keepalive, Timeout, MaxKeepAliveRequests, MinSpareServers, MaxSpareServers, StartServers, MaxRequestsPerChild</em>) en suivant une procédure plutôt bien expliquée.</p>
<p>Je propose une version step-by-step (pour débuter) suivie d&#8217;une sorte de raisonnement mathématique (pour juste avoir les calculs).<br />
<span id="more-1063"></span></p>
<h2>Step by step version</h2>
<ul>
<li>Lancer <em>top</em></li>
<li>Prendre dans la colonne RES la plus grande valeur utilisée par apache2</li>
<li>Quitter top (appuyer sur q)</li>
<li>Couper apache : <em>service apache2 stop</em></li>
<li>Vérifier qu&#8217;apache est bien arrêté : <em>ps -C apache2</em> devrait ne rien renvoyer</li>
<li>Noter la mémoire utilisée (commande <em>free -m</em> lire sous la colonne used la ligne mem)</li>
<li>Trouver la mémoire que votre machine ou VPS vous propose/garanti.</li>
<li>Soustraire la mémoire utilisée de cette valeur garantie cela vous donnera une valeur que l&#8217;on notera <span style="color: #800000;">FREE MEMORY POOL</span></li>
<li>Multiplier cette dernière valeur par 0.8 de façon à avoir une valeur que l&#8217;on nommera  <span style="color: #800000;">AVAILABLE APACHE POOL</span> (nous laissons 20% pour les périodes de burst)</li>
<li>Diviser cette dernière valeur par la valeur RES récoltée au point 2. Ceci vous donne la valeur <span style="color: #008000;">MaxClients</span> de votre apache2.conf</li>
</ul>
<p>Ne pas oublier que chaque valeur spécifiée dans le fichier de config doit être entière et non décimale. Une valeur inférieure vous fera peut être un serveur un tout petit peu plus lent mais avec nettement moins de risque qu&#8217;il parte dans les choux à long terme. Pensez y&#8230;</p>
<ul>
<li>Ouvrer votre apache2.conf et changer la valeur <span style="color: #008000;">MaxClients</span>.</li>
<li>Mettre <span style="color: #008000;">KeepAlive</span> à Off (le serveur traitera plus de requêtes/seconde avec cette valeur à on mais ce dernier prendra plus de mémoire -si vous n&#8217;avez pas laissé 20% de marge  dans l&#8217;<span style="color: #800000;">AVAILABLE APACHE POOL</span> alors ne mettez pas la valeur à On&#8211;)</li>
<li>Si vous avez mis <span style="color: #008000;">KeepAlive</span> à on settez la valeur la plus basse possible pour <span style="color: #008000;">KeepAliveTimeout</span>. Si vous rencontrez des problèmes de latence avec votre serveur augmentez la valeur vers 2-5 secondes</li>
<li>Un bon <span style="color: #008000;">TimeOut</span> devrait être de 10-30 si vos clients sont en xDSL/Cable, 30-120 devrait être ok pour les liaisons &#8220;d’antan&#8221;</li>
<li><span style="color: #008000;">MaxKeepAliveRequests</span> devrait être égal au nombre max d&#8217;objets que vous avez dans une page, si vous n&#8217;en n&#8217;avez pas la moindre idée une valeur entre 70-200 devrait suffir.</li>
<li><span style="color: #008000;">MinSpareServers</span> est égal à 10-25% de <span style="color: #008000;">MaxClients</span></li>
<li><span style="color: #008000;">MaxSpareServers</span> est égal à 25-50% de <span style="color: #008000;">MaxClients</span></li>
<li><span style="color: #008000;">StartServers</span> doit être égal soit à la valeur de <span style="color: #008000;">MinSpareServers</span> ou <span style="color: #008000;">MaxSpareServers</span> : quand apache est (re)démarré, c&#8217;est le nombre de serveurs qui sont automatiquement lancés en même temps. Si vous avez un site à petit trafic, il vaut mieux le faire correspondre à la valeur <span style="color: #008000;">Min</span>, sinon à la valeur <span style="color: #008000;">Max</span>.</li>
<li>MaxRequestsPerChild à mettre entre 500 (si vous voyez des augmentations rapides de consommation mémoire dans les enfants) et 10000 (Si vous n&#8217;avez pas la moindre fuite mémoire dans vos apps). Une valeur de 0 signifierait que les process enfants ne sont jamais killés ce qui pourrait résulter en une grande consommation mémoire inutile.</li>
<li>Sauvegarder le fichier et relancer apache : <em>service apache2 restart</em></li>
</ul>
<h2>Pseudo-code version</h2>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">/*J'ai décidé de l'écrire en pseudocode/php car ça me semblait être le plus adapté pour la coloration syntaxique, ce n'est PAS du php executable!!! */</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">const</span> BURST_RESERVE <span style="color: #339933;">=</span> <span style="color:#800080;">0.8</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$consoMaxProcess</span> <span style="color: #339933;">=</span> <span style="color: #990000;">max</span><span style="color: #009900;">&#40;</span>RES memory<span style="color: #339933;">/</span>apache process<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
arreter apache<span style="color: #339933;">;</span>
<span style="color: #000088;">$memoireUtilisee</span> <span style="color: #339933;">=</span> free <span style="color: #339933;">-</span>m <span style="color: #339933;">&gt;</span> ligne mem<span style="color: #339933;">,</span> colonne used<span style="color: #339933;">;</span>
<span style="color: #000088;">$memoireGarantie</span> <span style="color: #339933;">=</span> free <span style="color: #339933;">-</span>m <span style="color: #339933;">&gt;</span> ligne mem<span style="color: #339933;">,</span> colonne total <span style="color: #009900;">&#40;</span>or specs server<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$FREE_MEMORY_POOL</span> <span style="color: #339933;">=</span> memoireGarantie <span style="color: #339933;">-</span> memoireUtilisee<span style="color: #339933;">;</span>
<span style="color: #000088;">$AVAILABLE_APACHE_POOL</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$FREE_MEMORY_POOL</span> <span style="color: #339933;">*</span> BURST_RESERVE<span style="color: #339933;">;</span>
MaxClients <span style="color: #339933;">=</span> <span style="color: #000088;">$AVAILABLE_APACHE_POOL</span> <span style="color: #339933;">/</span> consoMaxProcess<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>lowest memory <span style="color: #339933;">||</span> BURST_RESERVE <span style="color: #339933;">&gt;</span> <span style="color:#800080;">0.8</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	KeepAlive Off<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
	KeepAlive On<span style="color: #339933;">;</span>
	KeepAliveTimeout <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>high latency with server<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		KeepAliveTimeout <span style="color: #cc66cc;">2</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>client xDsl<span style="color: #339933;">/</span>Cable<span style="color: #009900;">&#41;</span>
	Timeout <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">30</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span> <span style="color: #666666; font-style: italic;">//dialup link</span>
	Timeout <span style="color: #339933;">=</span> <span style="color: #cc66cc;">30</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">120</span><span style="color: #339933;">;</span>
&nbsp;
MinSpareServers <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">25</span><span style="color: #339933;">%</span> MaxClients<span style="color: #339933;">;</span>
MaxSpareServers <span style="color: #339933;">=</span> <span style="color: #cc66cc;">25</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">50</span><span style="color: #339933;">%</span> MaxClients<span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>High<span style="color: #339933;">-</span>traffic site<span style="color: #009900;">&#41;</span>
	StartServers <span style="color: #339933;">=</span> MaxSpareServers<span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span>
	StartServers <span style="color: #339933;">=</span> MinSpareServers<span style="color: #339933;">;</span>
&nbsp;
MaxRequestsPerChild <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//child processes never being killed, higher overall memory use -&gt; dangerous</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>rapid apache child process memory <span style="color: #000000; font-weight: bold;">use</span> growth<span style="color: #009900;">&#41;</span>
	MaxRequestsPerChild <span style="color: #339933;">=</span> <span style="color: #cc66cc;">500</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>no leaks in your applications<span style="color: #009900;">&#41;</span>
	MaxRequestsPerChild <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10000</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//Quelque part entre ses deux valeurs selon la &quot;qualité&quot; de votre code</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Source (en anglais) : <a href="https://www.virtacoresupport.com/index.php?_m=knowledgebase&amp;_a=viewarticle&amp;kbarticleid=102">https://www.virtacoresupport.com/index.php?_m=knowledgebase&amp;_a=viewarticle&amp;kbarticleid=102</a></p>
<img src="http://feeds.feedburner.com/~r/GeekeriesDiverses/~4/iApYD2CXt0g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lgnap.helpcomputer.org/2012/01/apache-config-optimisee-etape-par-etape/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lgnap.helpcomputer.org/2012/01/apache-config-optimisee-etape-par-etape/</feedburner:origLink></item>
		<item>
		<title>Nginx – deny .htaccess</title>
		<link>http://feedproxy.google.com/~r/GeekeriesDiverses/~3/C0s6aLcu1zI/</link>
		<comments>http://lgnap.helpcomputer.org/2012/01/nginx-deny-htaccess/#comments</comments>
		<pubDate>Sat, 07 Jan 2012 22:51:28 +0000</pubDate>
		<dc:creator>El Gnap</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[403]]></category>
		<category><![CDATA[access]]></category>
		<category><![CDATA[deny]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://lgnap.helpcomputer.org/?p=1090</guid>
		<description><![CDATA[Au cas où vous n&#8217;auriez pas supprimé les .htaccess dans l&#8217;article de comment migrer de apache à nginx il faut au moins les protéger d&#8217;une éventuelle lecture par un lecteur mal intentionné. C&#8217;est simple : location ~*\.htaccess$ { deny all; } Et ça veut dire que pour toutes les url (non sensible à la casse ~*) finissant ($) par .htaccess (le \ devant servant à échapper le . de la regexp), on en refuse tout simplement l&#8217;accès (deny all). Le client va se manger une jolie erreur 403 quand il essaiera de consulter le htaccess ;-) Évidemment les .htpasswd et autres où vous auriez pu stocker vos mdp ou autres sont à protéger aussi. Petit indice : les deux noms de fichiers contiennent &#8216;.ht&#8216; pourquoi ne pas faire une regexp là dessus? Enjoy it! Sources : Doc officielle de la directive location Doc officielle de deny/allow]]></description>
			<content:encoded><![CDATA[<p>Au cas où vous n&#8217;auriez pas supprimé les .htaccess dans l&#8217;article de <a href="http://lgnap.helpcomputer.org/2012/01/nginx-apache-htaccess/">comment migrer de apache à nginx</a> il faut au moins les protéger d&#8217;une éventuelle lecture par un lecteur mal intentionné. C&#8217;est simple :</p>
<blockquote><p>location <span style="color: #003366;">~*</span><span style="color: #ff0000;">\</span><span style="color: #003300;">.htaccess</span><span style="color: #800000;">$</span> {<br />
<span style="color: #800080;">deny all</span>;<br />
}</p></blockquote>
<p><span id="more-1090"></span></p>
<p>Et ça veut dire que pour toutes les url (<span style="color: #003366;">non sensible à la casse ~*</span>) finissant (<span style="color: #800000;">$</span>) par <span style="color: #003300;">.htaccess</span> (le <span style="color: #ff0000;">\ devant</span> servant à échapper le . de la regexp), on en refuse tout simplement l&#8217;accès (<span style="color: #800080;">deny all</span>).<br />
Le client va se manger une jolie erreur 403 quand il essaiera de consulter le htaccess ;-)</p>
<p>Évidemment les .htpasswd et autres où vous auriez pu stocker vos mdp ou autres sont à protéger aussi.<br />
Petit indice : les deux noms de fichiers contiennent &#8216;<em><span style="color: #800080;">.ht</span></em>&#8216; pourquoi ne pas faire une regexp là dessus? Enjoy it!</p>
<p>Sources :</p>
<ul>
<li><a href="http://wiki.nginx.org/NginxHttpCoreModule#location">Doc officielle de la directive location</a></li>
<li><a href="http://wiki.nginx.org/HttpAccessModule">Doc officielle de deny/allow</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/GeekeriesDiverses/~4/C0s6aLcu1zI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lgnap.helpcomputer.org/2012/01/nginx-deny-htaccess/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://lgnap.helpcomputer.org/2012/01/nginx-deny-htaccess/</feedburner:origLink></item>
	</channel>
</rss>

