<?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>El blog de LandM</title>
	<atom:link href="http://blog.landm.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.landm.net</link>
	<description>System Administrators and IT experts Blog</description>
	<lastBuildDate>Thu, 17 Jun 2010 08:34:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>There is no public key available for the following key IDs:</title>
		<link>http://blog.landm.net/2009/12/there-is-no-public-key-available-for-the-following-key-ids/</link>
		<comments>http://blog.landm.net/2009/12/there-is-no-public-key-available-for-the-following-key-ids/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 13:30:10 +0000</pubDate>
		<dc:creator>lucas</dc:creator>
				<category><![CDATA[debian]]></category>
		<category><![CDATA[gpg debian error apt-get update]]></category>

		<guid isPermaLink="false">http://blog.landm.net/?p=156</guid>
		<description><![CDATA[When you try to update debian and you get this error:
There is no public key available for the following key IDs: 9AA38DCD55BE302B
there are two ways to solve the issue:


gpg --keyserver wwwkeys.eu.pgp.net --recv-keys 9AA38DCD55BE302B; 
apt-key add .gnupg/pubring.gpg


sudo aptitude install debian-keyring debian-archive-keyring


If you have network problems because of your firewall try the second one. The error, in this [...]]]></description>
			<content:encoded><![CDATA[<p>When you try to update debian and you get this error:</p>
<pre>There is no public key available for the following key IDs: 9AA38DCD55BE302B</pre>
<p>there are two ways to solve the issue:</p>
<ol>
<li>
<pre style="padding-left: 20pt;"><strong><strong>gpg --keyserver wwwkeys.eu.pgp.net --recv-keys </strong></strong>9AA38DCD55BE302B<strong>; </strong></pre>
<pre style="padding-left: 20pt;"><strong></strong><strong>apt-key add .gnupg/pubring.gpg</strong></pre>
</li>
<li>
<pre style="padding-left: 20pt;"><code>sudo aptitude install debian-keyring debian-archive-keyring</code></pre>
</li>
</ol>
<p>If you have network problems because of your firewall try the second one. The error, in this case, is something like:</p>
<p>gpg: keyserver timed out</p>
<p>Debian power&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.landm.net/2009/12/there-is-no-public-key-available-for-the-following-key-ids/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql purge binary logs</title>
		<link>http://blog.landm.net/2009/05/mysql-purge-binary-logs/</link>
		<comments>http://blog.landm.net/2009/05/mysql-purge-binary-logs/#comments</comments>
		<pubDate>Sat, 09 May 2009 10:58:52 +0000</pubDate>
		<dc:creator>lucas</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[mysql purge bin-log logs]]></category>

		<guid isPermaLink="false">http://blog.landm.net/?p=146</guid>
		<description><![CDATA[get into mysql as root
and execute:
purge binary logs before ''''2008-12-31'''';
exit
That&#8221;&#8217;&#8217;s all!!!
You save a lot of disk space.
]]></description>
			<content:encoded><![CDATA[<p>get into mysql as root</p>
<p>and execute:</p>
<pre>purge binary logs before ''''2008-12-31'''';
exit</pre>
<p>That&#8221;&#8217;&#8217;s all!!!</p>
<p>You save a lot of disk space.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.landm.net/2009/05/mysql-purge-binary-logs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Creating a swap file under Linux</title>
		<link>http://blog.landm.net/2008/12/creating-a-swap-file-under-linux/</link>
		<comments>http://blog.landm.net/2008/12/creating-a-swap-file-under-linux/#comments</comments>
		<pubDate>Thu, 25 Dec 2008 16:49:32 +0000</pubDate>
		<dc:creator>Mario</dc:creator>
				<category><![CDATA[System]]></category>
		<category><![CDATA[swap]]></category>
		<category><![CDATA[swapfile]]></category>

		<guid isPermaLink="false">http://blog.landm.net/?p=132</guid>
		<description><![CDATA[Last week Lucas my co-worker Lucas noticed that in one of our servers didn’t have a swap partition, until now things were going ok because server didn’t have much RAM usage, but now servers is getting more traffic each day and sometimes free ram gets extremely low.
In a normal situation the process here should be, [...]]]></description>
			<content:encoded><![CDATA[<p>Last week Lucas my co-worker Lucas noticed that in one of our servers didn’t have a swap partition, until now things were going ok because server didn’t have much RAM usage, but now servers is getting more traffic each day and sometimes free ram gets extremely low.</p>
<p>In a normal situation the process here should be, reboot the server, and using gparted or similar create a small amount of free space and allocate that as a swap partition. Fortunately this not needed nowadays, since Kernel 2.6 swap file performance has increased dramatically so the possible benefits from having a dedicated swap partition against  a swap file are so small that in some situations it is preferable to have a swap file in case you wan’t to increase / decrease it’s size.</p>
<p>The process for building this kind of swap files is very simple:</p>
<p><em># dd if=/dev/zero of=/home/swap bs=1M count=1024</em></p>
<p>Replacing 1024 with the number of megabytes you want will change the swap file size.</p>
<p>Now that we have the size we want on disk we can prepare it for usage as a swap partition:</p>
<p><em># mkswap /home/swap</em></p>
<p>Now the swap file has being built you must introduce the following line in /etc/fstab file so this partition get’s mounted once the system is rebooted:</p>
<p><em>/home/swap       swap            swap    defaults 0       0</em></p>
<p>And finally to test the swap file you should type, which would activate all the partitions marked as “swap” in /etc/fstab</p>
<p><em># swapon –a</em></p>
<p>Now finally we can check that the swap partition has being activated:<br />
<em><br />
# free -m<br />
total       used       free     shared    buffers     cached<br />
Mem:          2028       1719        308          0        132       1119<br />
-/+ buffers/cache:        468       1559<br />
Swap:         1023          0       1023<br />
</em></p>
<p>Finally there are two useful commands you should be aware if you are playing around with swap files:</p>
<p><em># swapon | swapoff <swapfile></em></p>
<p>This commands activate and deactivate the usage of swap file.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.landm.net/2008/12/creating-a-swap-file-under-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Qpsmtpd FAQ</title>
		<link>http://blog.landm.net/2008/12/qpsmtpd-faq/</link>
		<comments>http://blog.landm.net/2008/12/qpsmtpd-faq/#comments</comments>
		<pubDate>Wed, 24 Dec 2008 11:37:31 +0000</pubDate>
		<dc:creator>lucas</dc:creator>
				<category><![CDATA[qpsmtpd]]></category>
		<category><![CDATA[auth]]></category>
		<category><![CDATA[auth_imap]]></category>
		<category><![CDATA[auth_smtpd]]></category>
		<category><![CDATA[badmailfromto]]></category>
		<category><![CDATA[cdb]]></category>
		<category><![CDATA[message]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[queue]]></category>
		<category><![CDATA[relay client]]></category>
		<category><![CDATA[relayclients]]></category>
		<category><![CDATA[rfc]]></category>
		<category><![CDATA[rhsbl]]></category>
		<category><![CDATA[smtp-forward]]></category>
		<category><![CDATA[validrcptto]]></category>

		<guid isPermaLink="false">http://blog.landm.net/?p=113</guid>
		<description><![CDATA[Life is easier since we use qpsmtpd. So we want to write some little tips about it.

How to queue messages ?

The easiest way to queue messages is use qmail-queue, but if you don&#8217;t have qmail, use your actual mail server in localhost and plugin smtp-forward:
queue/smtp-forward 127.0.0.1 25
Don&#8217;t forget to accept all mail from localhost and [...]]]></description>
			<content:encoded><![CDATA[<p>Life is easier since we use qpsmtpd. So we want to write some little tips about it.</p>
<ul>
<li><em>How to queue messages ?</em></li>
</ul>
<p>The easiest way to queue messages is use qmail-queue, but if you don&#8217;t have qmail, use your actual mail server in localhost and plugin smtp-forward:</p>
<p>queue/smtp-forward 127.0.0.1 25</p>
<p>Don&#8217;t forget to accept all mail from localhost and remove spam and antivirii from your mail server. Now your mail server is acting as <a title="Mail Delivery Agent" href="http://es.wikipedia.org/wiki/Mail_Delivery_Agent">MDA</a>. Let qpsmtpd do all filters (antispam, antivirii, &#8230;).</p>
<ul>
<li><em>Auth plugins</em></li>
</ul>
<p>Try to use standard method like smtpd or imap. It will allow you to change any piece of software whenever without affect your qpsmtpd setup.</p>
<p>auth/auth_imap 127.0.0.1 993</p>
<p>auth/auth_smtpd 127.0.0.1 25</p>
<ul>
<li><em>Check valid rcptto</em></li>
</ul>
<p>Maybe the most important plugin to avoid dictionary attacks. There are scripts to extract valid users from qmail installation: John M. Simpson has some scripts to dump all users to a cdb file. <a title="mkvalidrcptto" href="http://qmail.jms1.net/scripts/mkvalidrcptto.shtml">Link</a></p>
<p>But if you don&#8217;t have qmail you have to do two things in order to have qpsmtpd workproperly:</p>
<ol>
<li>Dump all domains into config/rcpthosts file. Use shell or perl scripts.</li>
<li>Dump all valid users into validrcptto.cdb file. Don&#8217;t forget this file is a <a title="cdb" href="http://cr.yp.to/cdb.html">cdb</a>. There are <a title="cdbmake" href="http://cr.yp.to/cdb/cdbmake.html">tools (like cdbmake)</a> to help you to build a cdb file. Send the valid list to a pipe like this :</li>
</ol>
<p>E.g.: perl getValidUsers.pl |/usr/local/bin/cdbmake-12 /opt/qpsmtpd/config/validrcptto.cdb /opt/qpsmtpd/validrcptto.tmp</p>
<p>And you will have a validrcptto.cdb file. Be careful and don&#8217;t forget mailing lists!!!.</p>
<p>When you have the file generated add this line:</p>
<p>check_validrcptto_cdb /opt/qpsmtpd/config/validrcptto.cdb -</p>
<p>before rcpt_ok plugin</p>
<ul>
<li><em>How to stop mails from an address to a valid users.</em></li>
</ul>
<p>Use this plugin: check_badmailfromto</p>
<p>Create a file (config/badmailfromto) with two columns: from to (separated with 	ab)</p>
<p>That&#8217;s all. Easy as qpsmtpd.</p>
<ul>
<li><em>How to accept mails from a relay client.</em></li>
</ul>
<p>First of all be sure the relay client is a trust client. To accept all mail from the ip, include the ip in config/relayclients file. But the best way to do it is authenticate the client via standard method.</p>
<ul>
<li><em>How to accepts mails from servers that don&#8217;t use rfc.<br />
</em></li>
</ul>
<p>Strange?, not at all. We are in Spain where an official mail server (Seguridad Social) doesn&#8217;t respect rfc. So we had to remove rhsbl plugin from our config.</p>
<ul>
<li><em>How to avoid spamassassin for relay clients.</em></li>
</ul>
<p>Just add this lines in hook_data_post method, after this line:</p>
<p>return (DECLINED) if $transaction-&gt;data_size &gt; 500_000;</p>
<p>The code:</p>
<p>&#8230;</p>
<p>if ( $self-&gt;qp-&gt;connection-&gt;relay_client ) {<br />
# failsafe<br />
$self-&gt;log(LOGALERT, &#8220;Allowing relay client past spamassassin&#8221;);<br />
return (DECLINED);<br />
}</p>
<p>&#8230;</p>
<p>So, if it is a relayed client it doesn&#8217;t send the message to spamassassin daemon.<span id="more-113"></span></p>
<p style="text-align: left;"><!--more--></p>
<p style="text-align: left;">As you can see, qpsmtpd is powerful and easy to configure. Give it a chance. Since we use it we are very confident of our mail service and proud of performance. In another post we will comment some tips about performance.</p>
<p style="text-align: left;">The <a title="qpsmtpd plugins" href="http://wiki.qpsmtpd.org/plugins">plugin page</a> must be your reference when implementing qpsmtpd. There is a lot of information about all you need. Thank <a title="Ask" href="http://www.askbjoernhansen.com/">Ask Bjørn Hansen</a> and the active community very much for your work.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.landm.net/2008/12/qpsmtpd-faq/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>generate pem file for qpsmtpd+ssl 465</title>
		<link>http://blog.landm.net/2008/12/generate-pem-file-for-qpsmtpdssl-465/</link>
		<comments>http://blog.landm.net/2008/12/generate-pem-file-for-qpsmtpdssl-465/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 18:56:42 +0000</pubDate>
		<dc:creator>lucas</dc:creator>
				<category><![CDATA[Servidores Correo]]></category>
		<category><![CDATA[qpsmtpd]]></category>
		<category><![CDATA[generate]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[pem file]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[stunnel]]></category>

		<guid isPermaLink="false">http://blog.landm.net/?p=102</guid>
		<description><![CDATA[If you want to use qpsmtpd in port 465 you have to use ssl. The easiest way to do it is following the qpsmtpd instructions: http://wiki.qpsmtpd.org/config:smtps. But you have to create a certificate.
This is the simpliest way to do it:

Use your favorite app manager for your linux distro. Install stunnel.
cd /etc/ssl (in debian) and generate [...]]]></description>
			<content:encoded><![CDATA[<p>If you want to use qpsmtpd in port 465 you have to use ssl. The easiest way to do it is following the qpsmtpd instructions: <a title="smtps" href="http://wiki.qpsmtpd.org/config:smtps" target="_blank">http://wiki.qpsmtpd.org/config:smtps</a>. But you have to create a certificate.</p>
<p>This is the simpliest way to do it:</p>
<ol>
<li>Use your favorite app manager for your linux distro. Install stunnel.</li>
<li>cd /etc/ssl (in debian) and generate pem file.</li>
<li>$openssl req -new -x509 -days 3650 -nodes -config openssl.cnf -out stunnel.pem -keyout stunnel.pem</li>
<li>You have to fill in the next questions: Country Name, State or Province Name, Locality Name, Organization Name, Organizational Unit Name, Common Name and Email Address.</li>
<li>After this step you will have a stunnel.pem file.</li>
<li>$openssl gendh 512 &gt;&gt; stunnel.pem</li>
<li>This generates Diffie-Hellman parameters, and appends them to the pem file.</li>
<li>To check the process and verify the certificate is ok, type: &#8220;openssl x509 -subject -dates -fingerprint -in stunnel.pem&#8221; and check the information.</li>
</ol>
<p>After having generate the pem file, follow the instructions and you will have qpsmtpd runing in 465 port properly.</p>
<p>Remember the stunnel version is 3 or the wrapper for version 3 built in version 4.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.landm.net/2008/12/generate-pem-file-for-qpsmtpdssl-465/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dnscache stop working suddenly</title>
		<link>http://blog.landm.net/2008/09/dnscache-stop-working-suddenly/</link>
		<comments>http://blog.landm.net/2008/09/dnscache-stop-working-suddenly/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 19:55:01 +0000</pubDate>
		<dc:creator>lucas</dc:creator>
				<category><![CDATA[djb]]></category>
		<category><![CDATA[dnscache]]></category>
		<category><![CDATA[stop]]></category>
		<category><![CDATA[suddenly]]></category>
		<category><![CDATA[svscan]]></category>
		<category><![CDATA[svscanboot]]></category>
		<category><![CDATA[working]]></category>

		<guid isPermaLink="false">http://blog.landm.net/?p=97</guid>
		<description><![CDATA[It happened twice and the first time it started working after a machine reboot. The second time we realized svscanboot and svscan were executing twice. So we had two instances of svscanboot and svscan. Dnscache didn&#8217;t answer any petition and all the services involved were crashing. So review your init scripts and remember svscanboot is [...]]]></description>
			<content:encoded><![CDATA[<p>It happened twice and the first time it started working after a machine reboot. The second time we realized svscanboot and svscan were executing twice. So we had two instances of svscanboot and svscan. Dnscache didn&#8217;t answer any petition and all the services involved were crashing. So review your init scripts and remember svscanboot is usually in /etc/inittab. It is a stupid mistake, but we think it happens.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.landm.net/2008/09/dnscache-stop-working-suddenly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exchange 2007: Configuracion de Whitelists</title>
		<link>http://blog.landm.net/2008/08/exchange-2007-whitelists/</link>
		<comments>http://blog.landm.net/2008/08/exchange-2007-whitelists/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 11:51:20 +0000</pubDate>
		<dc:creator>Mario</dc:creator>
				<category><![CDATA[Exchange Server]]></category>
		<category><![CDATA[Servidores Correo]]></category>
		<category><![CDATA[exchange 2007]]></category>
		<category><![CDATA[whitelist]]></category>

		<guid isPermaLink="false">http://blog.landm.net/?p=81</guid>
		<description><![CDATA[A menudo cuando gestionamos servidores Exchange 2007, nos encontramos ante la situación de que Exchange 2007 se niega a recibir emails de un determinado origen (ya sea dominio o una cuenta especifica) por que no pasa sus políticas de filtrado de emails.
En los casos en el que el origen es confiable, podemos específicamente indicarle a [...]]]></description>
			<content:encoded><![CDATA[<p>A menudo cuando gestionamos servidores Exchange 2007, nos encontramos ante la situación de que Exchange 2007 se niega a recibir emails de un determinado origen (ya sea dominio o una cuenta especifica) por que no pasa sus políticas de filtrado de emails.</p>
<p>En los casos en el que el origen es confiable, podemos específicamente indicarle a Exchange 2007 que queremos que acepte email de un determinado origen de forma incondicional. Para poder llevar a cabo esto prácticamente todos los MTA soportan una funcionalidad que se conoce como whitelists.</p>
<p>En Exchange 2007, una de las formas de acceder a la configuración de las Whitelists es a traves del PowerShell que se instala automáticamente cuando instalamos Exchange 2007. Una vez abierta la shell la gestión de las whitelist se realiza con los comando <code>set-ContentFilterConfig</code> y <code>get-ContentFilterConfig</code></p>
<p>Para añadir un determinado email origen a la whitelist:</p>
<p><code>set-ContentFilterConfig -BypassedSenders usuario@dominio.com</code></p>
<p>En el caso de que queramos crear una whitelist para un dominio origen completo:</p>
<p><code>set-ContentFilterConfig -BypassedSenderDomains dominio.com</code></p>
<p>Además de crear whitelists para dominios origen, podemos hacerlo de la forma contraria, si queremos que todo lo que vaya a un determinado usuario de un dominio que alojamos nosotros podemos hacer whitelists en destino de la siguiente forma:</p>
<p><code>set-ContentFilterConfig -BypassedRecipients abc@tudominio.com,info@tudominio.com</code></p>
<p>Como podemos observar aquí la diferencia es que utilizamos el comando BypassedRecipients en vez de BypassedSenders.</p>
<p>La consulta del estado de las whitelists es muy sencilla y se realiza con el comando <code>get-ContentFilterConfig</code> esto nos devolverá el estado actual de la configuración de los filtros de una forma bastante detallada.</p>
<p>Para hacer más cómoda la introducción de múltiples dominios, el comando <code>set-ContentFilterConfig</code> acepta atributos con múltiples valores, esto nos permite solucionar el hecho de que este comando sobrescribe siempre el valor que hayamos metido en la whitelist. Por lo tanto la forma de introducir un número de emails y/o dominios es separarlos con comas.</p>
<p><code>Set-ContentFilterConfig -BypassedSenderDomains "dominio1.com","dominio2.com","dominio3.com"</code></p>
<p>Para una gestión más eficiente de las listas, existe la posibilidad de introducir y eliminar elementos de forma individual de las listas sin que se vean afectados el resto de los elementos de la lista, para ello podemos utilizar un poco de scripting de PowerShell</p>
<p>Si quisiéramos añadir un dominio sin tocar el resto de lo que tengamos en la whitelist:</p>
<p><code>$foo=Get-ContentFilterConfig<br />
$foo.BypassedSenderDomains +="undominio.com"<br />
$foo | Set-ContentFilterConfig</code></p>
<p>Análogamente, para eliminar un dominio de dicha lista, podemos utilizar los  siguientes comandos:</p>
<p><code>$foo=Get-ContentFilterConfig<br />
$foo.BypassedSenderDomains -="undominio.com"<br />
$foo | Set-ContentFilterConfig</code></p>
<p>Hasta aquí, es todo lo que necesitamos saber para hacer una gestión de Whitelists en Exchange 2007.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.landm.net/2008/08/exchange-2007-whitelists/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>memcache: Cacheando el contenido dinámico</title>
		<link>http://blog.landm.net/2008/08/memcache-cacheando-el-contenido-dinamico/</link>
		<comments>http://blog.landm.net/2008/08/memcache-cacheando-el-contenido-dinamico/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 08:18:34 +0000</pubDate>
		<dc:creator>Mario</dc:creator>
				<category><![CDATA[Servidores Web]]></category>
		<category><![CDATA[memcached]]></category>
		<category><![CDATA[cacheo contenido dinamico]]></category>
		<category><![CDATA[memcache]]></category>
		<category><![CDATA[optimizacion]]></category>

		<guid isPermaLink="false">http://blog.landm.net/?p=67</guid>
		<description><![CDATA[En toda infraestructura más o menos grande, hay un punto de inflexión importante y es el momento en el que los frontales no son capaces de dar más resultados por segundo. Las causas por las que esto ocurren pueden ser de diversa índole, pero suelen estar muy relacionadas con la naturaleza del contenido Web. Últimamente [...]]]></description>
			<content:encoded><![CDATA[<p>En toda infraestructura más o menos grande, hay un punto de inflexión importante y es el momento en el que los frontales no son capaces de dar más resultados por segundo. Las causas por las que esto ocurren pueden ser de diversa índole, pero suelen estar muy relacionadas con la naturaleza del contenido Web. Últimamente las tendencias es a que todo sea dinámico y generado “on the fly” apoyándose para todo en la base de datos y eso crea un cuello de botella importante en el momento en el que los frontales tienen que interactuar con la BD.</p>
<p><strong>Posibles soluciones para esto hay varias:</strong></p>
<ul>
<li><strong>Estatificar el contenido:</strong> Pongamos por caso una aplicación típica cuyo contenido es dinámico: Fotolog, LiveJournal, etc. Este tipo de sitios Web podrían aumentar el hitrate notablemente estatificando el contenido de sus páginas. Si lo pensamos, realmente estas páginas solo se modifican en el momento en el que se añaden comentarios, fotos o similar, no sería excesivamente difícil estatificar todo el contenido y regenerarlo cuando haya modificaciones. Las ventajas son muchas. Aumentamos el hitrate de las maquinas ya que únicamente sirven contenido estático y disminuimos drásticamente los posibles fallos de seguridad que puedan surgir, al no haber aplicación, no hay fallo que buscar. En un post anterior ya comentamos posibles usos de proxy http para segregar contenido. Como en toda solución, tenía que tener algo negativo. Hay que modificar la aplicación para que genere contenido de naturaleza estática, esto normalmente a no ser que estemos desarrollando nosotros mismos la aplicación es realmente complicado ya que estatificar todo el contenido implicaría reescribir y convertir una aplicación que fue pensada como dinámica en un backend de generación de contenido estático.</li>
</ul>
<ul>
<li><strong>Cacheo dinámico de contenido</strong>: Esta es la solución de moda a día de hoy. Surgió como solución intermedia entre estatificar el contenido y sacarlo directamente de base de datos, la solución pasa por tener un numero de maquinas dedicadas que almacenan en RAM a modo de hash los resultados de las consultas a base de datos. Con esto conseguimos que, si esa consulta que íbamos a lanzar a la BD ha sido pedida recientemente, la recogemos directamente desde la memoria RAM del cache, y la devolvemos directamente. En caso de que no estuviera, la pedimos a la BD y la almacenamos en el cache, usando como “key” del hash la consulta a la base de datos serializada. De esta forma el rendimiento aumenta muchísimo al disminuir notablemente la interacción con la base de datos, con todo lo que eso implica (interfaz con la BD, consultas SQL, acceso a disco, recuperar la información, etc.). Como en toda solución, siempre hay aspectos a tener en cuenta, lo primero es la inversión en hardware, se necesitan maquinas con una CPU moderada pero con una cantidad de RAM muy elevada y además hay que hacer pequeños cambios en las aplicaciones que vayan a utilizar cacheo de contenido dinámico.</li>
</ul>
<p>Si nos decidimos a implementar un cacheo de contenido dinámico, una de las principales aplicaciones en este mundo es <a title="memcached" href="http://www.danga.com/memcached/" target="_blank">memcached</a>, esta aplicación fue desarrollada por <a href="http://www.danga.com/" target="_blank">Danga</a>, que es la empresa creadora de LiveJournal. Desde su creación ha ido evolucionando y ganando adeptos hasta el punto en el que lo están utilizando sitios de tanta repercusión como: YouTube, LiveJournal, Slashdot, Wikipedia, SourceForge, Wordpress.com, GameFAQs, Facebook, Digg, Twitter, Fotolog, BoardGameGeek, NYTimes.com, deviantART, Jamendo, Kayak, VxV y Netlog</p>
<p><strong>Modificación de una aplicación para que funcione con memcached</strong></p>
<p>Si finalmente nos decidimos a montar memcached como solución de cacheo dinámico, tenemos que afrontar el tema de las modificaciones a realizar en la aplicación. El aspecto positivo de todo esto es que si la aplicación que queremos montar bajo memcached es OpenSource hay muchas posibilidades de que alguien ya se haya ocupado de hacer las modificaciones, como es el caso de aplicaciones tan conocidas como WordPress,WikiMedia y phpBB. ¿Pero, y en el caso de que no sea una aplicación conocida, o incluso que estemos desarrollando nuestra propia aplicación? En este caso, la solución pasa por meter unas pocas llamadas en el flujo de la aplicación para que en vez de realizar la consulta directamente a la BD, primero consultemos al cache.</p>
<p>Un escenario típico podría ser el siguiente. Tenemos una función que realiza una consulta a la BD:</p>
<p><code>function get_foo (int userid) {<br />
result = db_select("SELECT * FROM users WHERE userid = ?", userid);<br />
return result;<br />
}</code></p>
<p>Tras realizar las modificaciones, para que primero se consulte a memcached la función quedaría de la siguiente forma:<br />
<code>function get_foo (int userid) {<br />
result = memcached_fetch("userrow:" + userid);<br />
if (!result) {<br />
result = db_select("SELECT * FROM users WHERE userid = ?", userid);<br />
memcached_add("userrow:" + userid, result);<br />
}<br />
return result;<br />
}</code><br />
En este caso, primero consultamos al cache, si el cache tiene almacenada esa clave la devuelve directamente. En caso contrario, preguntamos a la base de datos y lo almacenamos en el cache para que las siguientes consultas sean desde RAM.</p>
<p>Así mismo, las actualizaciones en BD hay que modificarlas porque si no el cache empezaría a devolver información incorrecta, la forma más fácil de hacer esto es directamente desde la aplicación, en el momento en el que se produzca una actualización, directamente eliminamos esa “key” y la substituimos por la nueva de la siguiente forma:<br />
<code>function update_foo(int userid, string dbUpdateString) {<br />
result = db_execute(dbUpdateString);<br />
if (result) {<br />
data = createUserDataFromDBString(dbUpdateString);<br />
memcached_set("userrow:" + userid, data);<br />
}<br />
}</code></p>
<p>Con modificaciones similares las explicadas, y una buena configuración de la plataforma de cacheo, se consigue un hitrate de un 70%, esto quiere decir que un 70% de las peticiones le llegan directamente a memcached sin que llegue un solo byte a la BD.</p>
<p>En posteriores artículos haremos un ejemplo completo de cómo se monta un memcached con un par de ejemplillos de acceso y alguna estadística.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.landm.net/2008/08/memcache-cacheando-el-contenido-dinamico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>proxy inverso y cómo pasar la ip real al servidor del backend</title>
		<link>http://blog.landm.net/2008/08/proxy-inverso-y-como-pasar-la-ip-real-al-servidor-del-backend/</link>
		<comments>http://blog.landm.net/2008/08/proxy-inverso-y-como-pasar-la-ip-real-al-servidor-del-backend/#comments</comments>
		<pubDate>Sun, 03 Aug 2008 21:37:57 +0000</pubDate>
		<dc:creator>lucas</dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[pasar ip]]></category>
		<category><![CDATA[proxy inverso]]></category>

		<guid isPermaLink="false">http://blog.landm.net/?p=51</guid>
		<description><![CDATA[Cuando se monta una infraestructura algo más compleja que las normales, se suele utilizar un frontend web para servir contenido estático y el resto pasarlo al backend para que sea interpretado por un servidor de aplicaciones (java, php, &#8230;). Esto es muy cómodo de administrar y se puede montar alta disponibilidad desde el frontend.
En este [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando se monta una infraestructura algo más compleja que las normales, se suele utilizar un frontend web para servir contenido estático y el resto pasarlo al backend para que sea interpretado por un servidor de aplicaciones (java, php, &#8230;). Esto es muy cómodo de administrar y se puede montar alta disponibilidad desde el frontend.</p>
<p>En este caso se hace un proxy inverso, es decir, se envían las peticiones desde el frontend al backend. El &#8220;problema&#8221; es que las peticiones tienen origen (frontend) 127.0.0.1 (si en el backend está en la misma máquina) o la ip interna 192.x.x.x (si el backend está en la red interna). Si el frontend es suficientemente flexible soporta balanceo entre servidores. Esta es una lista de frontends que funcionan muy bien:</p>
<ul>
<li><a title="pond" href="http://www.apsis.ch/pound/index_html" target="_blank">pound</a>: básicamente es un balanceador, pero muy eficiente</li>
<li><a title="perbal" href="http://www.danga.com/perlbal/" target="_blank">perlbal</a>: balanceador hecho en perl y servidor web para archivos estáticos. El código perl es sencillo y muy pontente, por lo que se pueden añadir funcionalidades rápidamente. Muy eficiente.</li>
<li><a title="Squid" href="http://www.squid-cache.org/" target="_blank">squid</a>: el de siempre. Se ha utilizado mucho para hacer proxy directo en vez de inverso, pero también se puede utilizar. Funciona muy bien y tiene un montón de funcionalidades, pero es menos eficiente que los anteriores.</li>
<li><a title="HAProxy" href="http://1wt.eu/articles/2006_lb/index.html#intr" target="_blank">HAPrroxy</a>: si buscas información detellada no te pierdas la documentación. Al final existe una <a href="http://1wt.eu/articles/2006_lb/index_10.html" target="_blank">explicación</a> de la arquitectura separada en contenido estático y dinámico. Es uno de los mejores balanceadores/proxy, aunque incluye más funcionalidades.</li>
<li><a title="Lighttpd" href="http://www.lighttpd.net/" target="_blank">lighttpd</a>: es un servidor web que nos puede servir páginas estáticas y hacer de proxy para el resto de peticiones. Una de las funcionalidades más interesantes es que puedes aplicar <em>regular expressions</em> para decidir el backend. Lo utilizamos en alguna ocasión con éxito.</li>
<li><a title="nginx" href="http://nginx.net/" target="_blank">nginx</a>: es un servidor web que cada día tiene mejor pinta. Es muy eficiente, rápido y sencillo de configurar. Cada día peligra más la hegemonía del apache. Permite servir un tipo de contenido y reenviar el resto al backend. Permite también <em>regular expressions</em>. Lo tenemos como frontend en algunos servidores y es una maravilla.</li>
</ul>
<p>Pues bien, todas estas soluciones hay que configurarlas para que envíen la ip real al backend. Por ejemplo, en el caso del nginx hay que poner estas líneas:</p>
<p>proxy_set_header X-Real-IP $remote_addr;</p>
<p>proxy_set_header Host $host;</p>
<p>proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</p>
<p>Sin embargo, el apache siempre pinta la ip del que viene la petición: 127.0.0.1 o la ip interna. Para lograr que pinte la ip real hay que utilizar un pequeño módulo: <a title="mod_rpaf" href="http://stderr.net/apache/rpaf/" target="_blank">mod_rpaf</a>.</p>
<p>El montaje es sencillo:</p>
<pre class="code">$ wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.5.tar.gz
$ tar xzf mod_rpaf-0.5.tar.gz
$ cd mod_rpaf-0.5
$ vi Makefile (editar la variable APXS)
$ make rpaf; make install (para el apache 1.x)
$ make rpaf-2.0; make install-2.0 (para el apache 2.0.x)</pre>
<p>Luego hay que editar la configuración del apache y añadir estas líneas:</p>
<pre>LoadModule rpaf_module        libexec/mod_rpaf.so
AddModule mod_rpaf.c
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 192.168.1.1
RPAFheader X-Forwarded-For</pre>
<p>Ojo, en la línea RPAFproxy_ips hay que poner todas las ips desde donde vengan las peticiones al apache. Reiniciamos el apache y ya están las ips reales en los ficheros de logs.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.landm.net/2008/08/proxy-inverso-y-como-pasar-la-ip-real-al-servidor-del-backend/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manejar la cola en exim</title>
		<link>http://blog.landm.net/2008/07/manejar-la-cola-en-exim/</link>
		<comments>http://blog.landm.net/2008/07/manejar-la-cola-en-exim/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 15:05:16 +0000</pubDate>
		<dc:creator>lucas</dc:creator>
				<category><![CDATA[Servidores Correo]]></category>
		<category><![CDATA[exim]]></category>
		<category><![CDATA[flush]]></category>
		<category><![CDATA[queue]]></category>

		<guid isPermaLink="false">http://blog.landm.net/?p=31</guid>
		<description><![CDATA[Para ver los mensajes que hay en la cola:
$exim -bp &#124;more
Borrar los que llevan 18 días en la cola:
$exim -bp &#124; grep 18d &#124; awk ‘{ print $3 }’ &#124; xargs exim -Mrm 
Hacer flush a la cola, o lo que es lo mismo reprocesar la cola:
$exim -qf
o
$exim -qff
y para hacer debug del flush de [...]]]></description>
			<content:encoded><![CDATA[<p>Para ver los mensajes que hay en la cola:</p>
<p><em>$exim -bp |more</em></p>
<p>Borrar los que llevan 18 días en la cola:</p>
<p><em>$exim -bp | grep 18d | awk ‘{ print $3 }’ | xargs exim -Mrm </em></p>
<p>Hacer flush a la cola, o lo que es lo mismo reprocesar la cola:</p>
<p><em>$exim -qf</em></p>
<p>o</p>
<p><em>$exim -qff</em></p>
<p>y para hacer debug del flush de la cola hay que poner -d (debug) al final.</p>
<p>Para procesar también los correos &#8220;frozen&#8221;</p>
<p>Otras opciones para todos los mensajes y para mensajes concretos:</p>
<p>-bp : Queue email in Server<br />
-bpc : Count Queue email in Server<br />
-M : Force delivery<br />
-Mar : Add recipient<br />
-Meb : Edit message body<br />
-Mes : Edit sender<br />
-Mf : Freeze message<br />
-Mg : Give up (and bounce message)<br />
-Mmad : Mark all recipients as delivered<br />
-Mmd : Mark recipient as delivered<br />
-Mrm : Remove message (no bounce)<br />
-Mt : Thaw message<br />
-Mvb : View message body<br />
-Mvh : View message header<br />
-Mvl : View message log</p>
<p><strong>OJO!!!!, todo esto es válido si se utiliza el configure por defecto. Si se utiliza otro hay que añadir -C /opt/exim/configure.queseutiliza</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.landm.net/2008/07/manejar-la-cola-en-exim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>qmail como MX secundario</title>
		<link>http://blog.landm.net/2008/07/qmail-como-mx-secundario/</link>
		<comments>http://blog.landm.net/2008/07/qmail-como-mx-secundario/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 22:04:42 +0000</pubDate>
		<dc:creator>lucas</dc:creator>
				<category><![CDATA[Servidores Correo]]></category>
		<category><![CDATA[qmail]]></category>
		<category><![CDATA[secondary MX]]></category>

		<guid isPermaLink="false">http://blog.landm.net/?p=26</guid>
		<description><![CDATA[Para añadir un dominio y que qmail lo acepte e intente enviarlo al MX principal hay que añadirlo en control/rcpthosts y no en control/locals
El primero dice a qmail los dominios que aceptamos y el segundo los que son locales.
Luego hay que recrear las bases de datos , más bien los cdbs mediante el comando:
/var/qmail/bin/qmail-newmrh
en el [...]]]></description>
			<content:encoded><![CDATA[<p>Para añadir un dominio y que qmail lo acepte e intente enviarlo al MX principal hay que añadirlo en control/rcpthosts y no en control/locals</p>
<p>El primero dice a qmail los dominios que aceptamos y el segundo los que son locales.</p>
<p>Luego hay que recrear las bases de datos , más bien los cdbs mediante el comando:</p>
<p>/var/qmail/bin/qmail-newmrh</p>
<p>en el caso que lo añadamos al control/morercpthosts porque el rctphost está muy lleno.</p>
<p>Por cierto, esto lo aprendimos allá por la primavera del 2000, cuando Mario puso un mensajito en la lista de qmail: <a href="http://www.mail-archive.com/qmail@id.wustl.edu/msg20929.html">msg20929.html</a></p>
<p>Y además, si buscas <a href="http://www.google.es/search?q=qmail+MX+secondary&amp;btnG=Buscar&amp;meta=">qmail+MX+secondary</a> aparece como primer link la pregunta al foro de Mario <img src='http://blog.landm.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.landm.net/2008/07/qmail-como-mx-secundario/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>relay para una ip en concreto</title>
		<link>http://blog.landm.net/2008/07/relay-para-una-ip-en-concreto/</link>
		<comments>http://blog.landm.net/2008/07/relay-para-una-ip-en-concreto/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 21:55:00 +0000</pubDate>
		<dc:creator>lucas</dc:creator>
				<category><![CDATA[Servidores Correo]]></category>
		<category><![CDATA[qmail]]></category>
		<category><![CDATA[open relay]]></category>
		<category><![CDATA[tcp.smtp]]></category>
		<category><![CDATA[tcprules]]></category>

		<guid isPermaLink="false">http://blog.landm.net/?p=23</guid>
		<description><![CDATA[Para abrir el qmail a una determinada ip, lo único que hay que hacer es añadir la ip al fichero cdb de los relays.
Generalmente, un qmail-smtp tiene una pinta así:
exec /usr/local/bin/softlimit -m 20000000
/usr/local/bin/tcpserver -v -H -R -P -l 0
-x /home/vpopmail/etc/tcp.smtp.cdb
-c &#8220;$MAXSMTPD&#8221;
-u &#8220;$QMAILDUID&#8221; -g &#8220;$NOFILESGID&#8221; $IP 25
/var/qmail/bin/qmail-smtpd
/home/vpopmail/bin/vchkpw /bin/true 2&#62;&#38;1
Este, por ejemplo, funciona para vpopmail. Pues el [...]]]></description>
			<content:encoded><![CDATA[<p>Para abrir el qmail a una determinada ip, lo único que hay que hacer es añadir la ip al fichero cdb de los relays.</p>
<p>Generalmente, un qmail-smtp tiene una pinta así:</p>
<p>exec /usr/local/bin/softlimit -m 20000000<br />
/usr/local/bin/tcpserver -v -H -R -P -l 0<br />
-x /home/vpopmail/etc/tcp.smtp.cdb<br />
-c &#8220;$MAXSMTPD&#8221;<br />
-u &#8220;$QMAILDUID&#8221; -g &#8220;$NOFILESGID&#8221; $IP 25<br />
/var/qmail/bin/qmail-smtpd<br />
/home/vpopmail/bin/vchkpw /bin/true 2&gt;&amp;1</p>
<p>Este, por ejemplo, funciona para <a title="Vpopmail" href="http://www.inter7.com/index.php?page=vpopmail">vpopmail</a>. Pues el fichero /home/vpopmail/etc/tcp.smtp.cdb es donde están las ips abiertas, es decir para las que se hace relay. Para actualizar ese fichero basta con añadir esta línea al fichero /home/vpopmail/etc/tcp.smtp</p>
<p>x.x.x.x:allow,RELAYCLIENT=&#8221;",RBLSMTPD=&#8221;"</p>
<p>Ojo, poner mejor delante de la última línea que será algo así como:</p>
<p>:allow,QMAILQUEUE=&#8221;/var/qmail/bin/simscan&#8221;</p>
<p>Luego hay que <em>compilar</em> las reglas con:</p>
<p>/usr/local/bin/tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp &lt; /home/vpopmail/etc/tcp.smtp</p>
<p>Ojo, dejar los permisos correctamente de los ficheros. Puede ser que haya algún proceso que los cambie o lee y podemos fastidiarlo. También hay que tener en cuenta que todos los ficheros .cdb, .tmp y el de las reglas tienen que estar en el mismo filesystem. Si no es así da un error un poco feo y poco explicado.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.landm.net/2008/07/relay-para-una-ip-en-concreto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evolución de los servidores web</title>
		<link>http://blog.landm.net/2008/07/evolucion-de-los-servidores-web/</link>
		<comments>http://blog.landm.net/2008/07/evolucion-de-los-servidores-web/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 21:47:02 +0000</pubDate>
		<dc:creator>lucas</dc:creator>
				<category><![CDATA[Servidores Web]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[netcraft]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[servidor web]]></category>

		<guid isPermaLink="false">http://blog.landm.net/?p=12</guid>
		<description><![CDATA[Cuando empezamos a utilizar los servidores web, aquello eran servidores de páginas estáticas sin más. Utilizamos entonces apache como estándar de facto. Era el único servidor web open source y el que más ayuda tenía. En realidad existían otros, pero su precio era prohibitivo, hablamos de NCSA. Para subir páginas se utilizaban clientes de ftp [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando empezamos a utilizar los servidores web, aquello eran servidores de páginas estáticas sin más. Utilizamos entonces <a href="http://httpd.apache.org/">apache </a>como estándar de facto. Era el único servidor web open source y el que más ayuda tenía. En realidad existían otros, pero su precio era prohibitivo, hablamos de <a href="http://hoohoo.ncsa.uiuc.edu/">NCSA</a>. Para subir páginas se utilizaban clientes de ftp o editores web con posibilidad de subir los archivos vía ftp.</p>
<p><span id="more-12"></span>Más adelante, se empezó a hablar de lenguajes de programación que convertían el contenido estático en páginas dinámicas. Se utilizaban cgis en C o en perl. Si el servidor estaba en unix incluso se podía utilizar shell scripts. Esos cgis en C permitían conectar con gran cantidad de sistemas en backend, desde bases de datos al uso a entornos hosts o middleware creados al efecto. Todas las empresas decidieron que era el momento de sacar sus aplicaciones a internet. Fue el primer boom, proyectos faraónicos y muchas, muchas horas de programación. Era la anarquía. Pero esto era coto cerrado para grandes empresas que invertían grandes cantidades de dinero. El resto se conformaban con una página web estática y un link que enviaba un mail. <!--more--></p>
<p>Pero en 1995, <a title="Rasmus Lerdorf" href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a> creó un lenguaje de programación que llamó <a href="http://www.php.net/">PHP</a> (Personal Home Page). Empezó como un cgi en C que interpretaba páginas con contenido estático y un lenguaje muy sencillo para poder generar el contenido dinámico. Tras varias versiones se incluyó el cgi como módulo del apache y su popularidad empezó a crecer. En ese momento existía un servidor web, llamado apache con un módulo de php que permitía crear páginas web dinámicas de forma sencilla y económica. A partir de ahí se produjo una segunda explosión de la web.<!--more--></p>
<p>Sin embargo no eran muchas las empresas que se fiaban de <em>&#8220;eso del open source&#8221;</em>, confundiendo una vez más los terminos y descalificando las tecnologías sin conocerlas. De ahí que muchas empresas comenzaran a crear nuevas tecnologías y dar soporte para que las grandes empresas tuvieran la tranquilidad de entrar en un mundo nuevo. Compañías como <a href="http://www.sun.com/">Sun Microsystems</a>, <a href="http://en.wikipedia.org/wiki/Netscape_Communications_Corporation">Netscape</a>, <a href="http://www.bea.com/">Bea</a>, <a href="http://www.ibm.com/">IBM </a>o <a href="http://www.microsoft.com/">Microsoft </a>entraron en un nuevo nicho de mercado: los servidores de aplicaciones. Sun fue una de las primeras en entrar con su lenguaje <a href="http://java.sun.com/">java</a>. Fue uno de los lenguajes que más rápido se popularizó. Una de las ventajas era su caracter abierto a la comunidad de desarrolladores. Sun mientras tanto se dedicó a vender su servidor de aplicaciones. Bea fue otro de los competidores que entró de la mano de su producto Weblogic. IBM suele llegar tarde al mercado, pero con el tiempo se impone al resto. Es un corredor de fondo. Su producto Websphere Application Server tardó más que el resto en llegar, sin embargo a día de hoy es el líder frente a sus competidores en el apartado de servidor de aplicación en java. IBM utiliza como frontal web apache. Microsoft emplea sus propios lenguajes que ejecutan sus motores. La web más reconocida para este benchmark es <a href="http://www.netcraft.com/">Netcraft</a> que publica semanalmente un informe (por ejemplo <a href="http://news.netcraft.com/archives/2008/06/22/june_2008_web_server_survey.html">Junio 2008</a>), donde muestra este gráfico actualizado:</p>
<p style="text-align: center;"><img class="aligncenter" src="http://news.netcraft.com/archives/2008/06/overallc.gif" alt="Junio 2008" /></p>
<p style="text-align: left;"><!--more--></p>
<p style="text-align: left;">Lo que nos indica claramente el gráfico es la supremacía de los servidores de código abierto sobre los propietarios, y no sólo por apache. Hay que incluir <a href="http://www.lighttpd.net/">lighttpd</a>, <a href="http://nginx.net/">nginx </a>o <a href="http://en.wikipedia.org/wiki/Google_Web_Server">google</a>, que aunque no está liberado está basado en apache (al menos eso se dice en la red y es uno de los conocimientos que piden para entrar a trabajar en Google).</p>
<p style="text-align: left;">Esta es la teoría, en un siguiente post, mostraremos la evolución tecnológica y cómo se mejora el rendimiento con los nuevos productos. LandM empezó con servidores apache sin ningún tipo de lenguaje de programación. Hoy tenemos un frontal para servir contenido estático, un servidor apache que ejecuta cierta lógica y el contenido dinámico que es interpretado por otro motor. Además incorporamos caches intermedias para acelerar la respuesta. ¡Cómo hemos cambiado!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.landm.net/2008/07/evolucion-de-los-servidores-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>smtproutes: envío de correo a través de otro servidor</title>
		<link>http://blog.landm.net/2008/07/smtproutes-envio-de-correo-a-traves-de-otro-servidor/</link>
		<comments>http://blog.landm.net/2008/07/smtproutes-envio-de-correo-a-traves-de-otro-servidor/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 21:46:13 +0000</pubDate>
		<dc:creator>lucas</dc:creator>
				<category><![CDATA[qmail]]></category>
		<category><![CDATA[envío mail]]></category>
		<category><![CDATA[qmail smtp]]></category>
		<category><![CDATA[smtp route]]></category>

		<guid isPermaLink="false">http://blog.landm.net/?p=18</guid>
		<description><![CDATA[Para enviar todo el correo de un determinado dominio a través de otro servidor:
$echo &#8220;dominiodestino:ipdelsmarthost&#8221;&#62; /var/qmail/control/smtproutes
Para enviar todo el correo de todos los dominios a través de otro servidor:
$echo &#8220;:ipdelsmarthost&#8221;&#62; /var/qmail/control/smtproutes
Esto viene muy bien cuando por alguna razón nos han metido en alguna blacklist y hay que enrutar todo el correo a través de otra [...]]]></description>
			<content:encoded><![CDATA[<p>Para enviar todo el correo de un determinado dominio a través de otro servidor:</p>
<p>$echo &#8220;dominiodestino:ipdelsmarthost&#8221;&gt; /var/qmail/control/smtproutes</p>
<p>Para enviar todo el correo de todos los dominios a través de otro servidor:</p>
<p>$echo &#8220;:ipdelsmarthost&#8221;&gt; /var/qmail/control/smtproutes</p>
<p>Esto viene muy bien cuando por alguna razón nos han metido en alguna blacklist y hay que <em>enrutar</em> todo el correo a través de otra máquina.</p>
<p>Lo lógico es no olvidar quitarlo cuando se ha corregido el error de la blacklist.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.landm.net/2008/07/smtproutes-envio-de-correo-a-traves-de-otro-servidor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
