<?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 &#187; apache</title>
	<atom:link href="http://blog.landm.net/tag/apache/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>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>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>
	</channel>
</rss>
