scieee Open visual document viewer

Integración de un proxy inverso Varnish Cache con un panel de control Virtualmin para crear una plataforma de servicios de hospedaje Web

Álvarez Baeza, Pablo

Abstract

[ES] La utilización de un proxy inverso es una técnica que permite mejorar prestaciones y reducir la carga de los servidores mientras que se mantiene compatibilidad con los servidores web más populares, como por ejemplo Apache. Virtualmin GPL es un panel de control y gestor de plataformas webs, opensource, que permite crear y configurar de forma automática todos los recursos asociados con un hospedaje web basado en el servidor Apache. El objeto de este proyecto es instalar este software en un servidor e integrarlo con el proxy inverso Varnish Cache de forma que se pueda gestionar desde el panel de control Virtualmin. El desarrollo se ha realizado en máquinas virtuales para tener mayor flexibilidad. Inicialmente, se han realizado configuraciones manuales, se han afinado los parámetros de configuración y posteriormente se han diseñado scripts de automatización. Se ha utilizado el S.O. Linux con distribución CENTOS.

Full text

Escola Tècnica Supe io d’Enginye ia In o mà ica Uni e si a Poli ècnica de València In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web. T abajo Fin de G ado G ado en Ingenie ía In o má ica Au o : Pablo Ál a ez Baeza Tu o : Julio Pons Te ol 2014/2015 2 Resumen La u ilización de un p oxy in e so es una écnica que pe mi e mejo a p es aciones y educi la ca ga de los se ido es mien as que se man iene compa ibilidad con los se ido es web más popula es, como po ejemplo Apache. Vi ualmin GPL es un panel de con ol y ges o de pla a o mas webs, opensou ce, que pe mi e c ea y con igu a de o ma au omá ica odos los ecu sos asociados con un hospedaje web basado en el se ido Apache. El obje o de es e p oyec o es ins ala es e so wa e en un se ido e in eg a lo con el p oxy in e so Va nish Cache de o ma que se pueda ges iona desde el panel de con ol Vi ualmin. El desa ollo se ha ealizado en máquinas i uales pa a ene mayo lexibilidad. Inicialmen e, se han ealizado con igu aciones manuales, se han a inado los pa áme os de con igu ación y pos e io men e se han diseñado sc ip s de au oma ización. Se ha u ilizado el S.O. Linux con dis ibución CENTOS. Palab as cla e: p oxy in e so, Va nish Cache, panel de con ol, Vi ualmin, hospedaje Web, Apache, Cen OS. Abs ac The usage o an in e se p oxy on a se e , usually leads o an imp o emen on he se e pe o mance and a educ ion o he se e load, while keeping sys em's compa ibili y wi h he mos popula web se es such as Apache. Vi ualmin GPL is a web hos ing, opensou ce, con ol panel o Linux and UNIX sys ems, which allows o au oma ically con igu e e e y web hos ing- ela ed esou ce on a sys em based on Apache web se e . The objec i e o his p ojec is o ins all his so wa e on a se e , and in eg a e i wi h Va nish Cache e e se p oxy, gi ing he adminis a o he ools o con olling e e y hing di ec ly om Vi ualmin. We will be using i ual machines in o de o imp o e lexibili y in he de elopmen p ocess. This p ojec will be de eloped in Cen OS Linux dis ibu ion. Keywo ds : Va nish cache, Apache, i ual se e , Py hon, Vi ualmin, Webmin, in eg a ion, e e se p oxy. 3 In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web 4 Índice 1.In oducción.....................................................................................9 1.1.Obje i o.....................................................................................................10 2.En o no de abajo........................................................................11 2.1.Sis ema ope a i o Cen OS.........................................................................11 2.2.Lenguaje Py hon........................................................................................11 2.3.Se ido web Apache.................................................................................12 2.4.Panel Vi ualmin........................................................................................14 2.5.Va nish Cache............................................................................................14 3.Plani icación de la solución...........................................................17 3.1.Si uación de pa ida....................................................................................17 3.2.Si uación obje i o......................................................................................18 3.2.1P oxy..................................................................................................................18 3.2.2P oxy in e so.....................................................................................................19 4.Concep os p e ios al desa ollo....................................................21 4.1.Panel Vi ualmin........................................................................................21 4.2.Se ido web Apache.................................................................................24 4.3.Va nish Cache............................................................................................25 4.3.1Con igu ación del se icio................................................................................26 4.3.2A qui ec u a del se icio...................................................................................26 5.Desa ollo del módulo...................................................................29 5.1.con . ile......................................................................................................29 5.2. a nishRLib.py..........................................................................................33 5.3.apacheCon .py...........................................................................................34 5.4.Va nishApache.py......................................................................................38 5.5.index.cgi.....................................................................................................42 5 In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web 5.6.S a s op.cgi...............................................................................................44 5.7.se ings.cgi.................................................................................................45 5.8.se ingsSa e.cgi..........................................................................................47 5.9.applySe ings.cgi........................................................................................47 5.10.edi File.cgi...............................................................................................49 5.11.edi FileSa e.cgi........................................................................................50 5.12.module.in o / ins all_check.pl..................................................................52 5.13.Fiche o a nish.........................................................................................53 5.14.Gene ación e ins alación del módulo.......................................................53 6.VCL................................................................................................59 6.1.Disponibilidad de las a iables en VCL.....................................................60 6.2.Backend y hea h-checks.............................................................................62 6.2.1Código po de ec o............................................................................................63 6.3. cl_ ec ......................................................................................................63 6.3.1Código po de ec o............................................................................................65 6.4. cl_ e ch....................................................................................................66 6.4.1Código po de ec o............................................................................................67 6.5. cl_hash.....................................................................................................67 6.5.1Código po de ec o............................................................................................68 6.6. cl_hi ........................................................................................................68 6.6.1Código po de ec o............................................................................................69 6.7. cl_miss.....................................................................................................69 6.7.1Código po de ec o............................................................................................69 6.8. cl_pass......................................................................................................69 6.8.1Código po de ec o............................................................................................70 6.9. cl_deli e .................................................................................................70 6 6.9.1Código po de ec o............................................................................................71 6.10. cl_e o ...................................................................................................71 6.10.1Código po de ec o..........................................................................................71 7.P uebas de uncionamien o..........................................................73 7.1.P uebas de uncionamien o del módulo.....................................................73 7.2.P uebas de uncionamien o de la cache......................................................77 7.2.1P uebas de acie o / allo de la cache.................................................................77 7.2.2P uebas de hea h-check.....................................................................................79 8.Conclusión......................................................................................83 8.1.T abajo u u o............................................................................................83 9.Re e encias.....................................................................................85 7 In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web 8 1. In oducción De un si io web en 1991, a mil millones de webs ac i as. Es la ci a máxima que, según Ne C a [1], se alcanzó en oc ub e del pasado año 2014. Desde en onces la ci a se ha man enido es able, bajando la cuen a a más de 950 millones debido a las di e en es luc uaciones de las es adís icas p oducidas po si ios web inac i os. Sin emba go se es ima que la ci a uel a a alcanza ese pico y lo supe e de mane a es able a lo la go del p óximo año. Y es que las páginas web, desde su apa ición a los p incipios de los años 90, han conseguido en a de lleno en nues o día a día o eciendo soluciones en p ác icamen e odos los campos imaginables. Hoy en día es ealmen e complicado encon a a un ciudadano medio que no sea capaz de ci a una web de no icias, de música, de in e acción social o de una emp esa, incluso aunque el campo de negocio de és a sea ajeno al mundo de las ecnologías de la in o mación. Y de ás de cada si io web hay uno o a ios se ido es web o eciendo odo ipo de con enidos las 24 ho as al día los 365 días al año. Es os se ido es web ejecu an una aplicación ambién denominada se ido web que se enca gan de a ende y p ocesa las pe iciones que le llegan desde In e ne a su di ección IP. El abajo de es as aplicaciones a g andes asgos es en ende la pe ición, busca en el disco el obje o que se es á solici ando y en ia lo a a és de la ed. Es en es e pun o donde apa ecen los p og amas conocidos como p oxies in e sos. Es os p og amas se colocan en e el se ido web e In e ne , ecibiendo odas las pe iciones di igidas al se ido . Almacenan la pe ición y la een ían al se ido web, el cual le emi i á la espues a co espondien e. En onces, el p oxy in e so almacena el pa pe ición- espues a y man iene la in o mación en cache. De es a o ma, si uel e a llega al se ido la misma pe ición, en cuan o la in e cep e el p oxy, se á él el que 9 Ilus ación 1: G á ica de si ios web en el mundo según Ne c a . In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web 16 3. Plani icación de la solución Lo más impo an e pa a esol e un p oblema es hace un co ec o plan eamien o p e io, an o del p oblema a esol e como de la solución que se a a desa olla . Remi iéndonos al apa ado de obje i o de es a memo ia p ocedemos a ecupe a la in o mación de la necesidad pa a de alla la de una o ma más conc e a. El obje i o del p oyec o es consegui in eg a Va nish pa a que uncione co ec amen e con un se ido web apache, c eando un módulo pa a Vi ualmin que pe mi a al adminis ado web con igu a de una o ma cómoda los pa áme os básicos de la in eg ación. 3.1. Si uación de pa ida El sis ema ope a i o de la máquina i ual cuen a con un se ido web Apache ya ins alado, así como con un panel de con ol Vi ualmin. El se ido web Apache se encuen a ac i o, escuchando las pe iciones HTTP que le lleguen po el pue o 80 a la di ección IP de la máquina, que en nues o caso es la di ección IP 192.168.0.103. 17 Ilus ación 3: Esquema del es ado inicial de nues o sis ema. In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web El panel Vi ualmin se encuen a ambién ac i o, siendo accesible po el pue o 10000 del se ido . Pa a conec a se hay que accede con un na egado web con sopo e pa a HTTPS y au en ica se como usua io álido del sis ema Cen OS. Se usa á oo pa a ene los pe misos adminis a i os necesa ios. Se a a de una con igu ación ípica y sencilla de un se ido web gené ico, sin ningún p oxy ins alado. Po es e mo i o, en es e caso es Apache el que ecibe, p ocesa y esponde odas las pe iciones web que le lleguen po el pue o es ánda de HTTP, el pue o 80. 3.2. Si uación obje i o A con inuación amos a explica cómo debe á de queda el sis ema una ez se ejecu e nues a solución de in eg ación de mane a co ec a. Pa a ello, an es de nada, explica emos a g oso qué es y como unciona an o un p oxy como un p oxy in e so. 3.2.1 P oxy Un p oxy, o se ido p oxy, en una ed in o má ica, es un se ido (un p og ama o sis ema in o má ico), que si e de in e media io en las pe iciones de ecu sos que ealiza un clien e a un se ido (nues a máquina con Apache). Po ejemplo, si una hipo é ica máquina A solici a un ecu so a C, lo ha á median e una pe ición a B (el p oxy), que a su ez aslada á la pe ición a C; de es a o ma C no sab á que la pe ición p ocedió o iginalmen e de A. Es a si uación es a égica de pun o in e medio suele se ap o echada pa a sopo a una se ie de uncionalidades: con ol de acceso, egis o del á ico, p ohibi cie o ipo de á ico, mejo a el endimien o, man ene el anonima o, p opo ciona cache web, e c; es e úl imo si e pa a acele a y mejo a la expe iencia del usua io median e elemen os de la web que gua da á el p oxy, es o se debe a que la p óxima ez que se isi en las páginas web no se ex ae á in o mación di ec amen e del se ido web, si no que se ecupe a a in o mación de la cache. 18 Ilus ación 4: Esquema de un p oxy si uado a la salida de una in ane . La si uación más ípica pa a un p oxy es a la salida de una ed in e na hacía In e ne , p opo cionando a los usua ios de es a in ane una pue a de salida hacía el ex e io . De es a o ma se consigue con ola odo el á ico de salida si se desea, pues debe de pasa po el p oxy. Así ambién se pueden educi iempos de na egación, pues sí el p oxy iene almacenado en cache el obje o solici ado desde la ed in e na, és e lo se i á ápidamen e, sin necesidad de en ia la pe ición al se ido ex e no y espe a su espues a. 3.2.2 P oxy in e so Cuando hablamos de un p oxy in e so, nos e e imos a un p oxy que se si úa en e uno o a ios se ido es web e In e ne . G acias a es a a qui ec u a de ed, los se ido es quedan p o egidos de a aques ex e nos, pues es el p oxy el que puede con ola y il a odas las pe iciones en an es. Sí además añadimos la ca ac e ís ica de p oxy cache in e so, consegui emos lib a a los se ido es de la ca ga que supond ía el p ocesado de odas las pe iciones que aho a son espondidas desde es e in e media io. De ca a al clien e, odo es e p oceso es anspa en e, y no pod á dis ingui si el que le si e la pe ición es el se ido o el p oxy. Con los concep os an e io es cla os, a con inuación conc e amos cómo queda nues a máquina y sus conexiones una ez ealizada la in eg ación de Apache con Va nish median e Vi ualmin. Al se el p oxy in e so el que debe ecibi las pe iciones HTTP, debe á escucha hacía In e ne en el pue o 80. Po consiguien e, dado que ejecu a emos en la misma máquina los se icios de Apache y de Va nish, debe emos mo e Apache de ese pue o y coloca lo en o o en el que no enga con lic o con o os se icios. Típicamen e y como buena p ác ica, apache se suele coloca en el pue o 8080 y en la di ección local loopback o localhos , és a es la 127.0.0.l. De es a o ma e i a emos que nadie pueda a aca el se ido web di ec amen e desde el ex e io de la máquina. Po úl imo debe emos con igu a Va nish pa a que sepa en qué di ección y pue o es á Apache, pa a así pode e ansmi i le las pe iciones cuando sea necesa io. 19 Ilus ación 5: Esquema de un p oxy in e so. In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web De es a o ma, en la si uación inal, an e una pe ición HTTP en an e, Va nish se á el enca gado de ecibi la y p ocesa la. En onces een ia á la susodicha pe ición p ocesada a Apache. El se ido en onces esponde á a la pe ición con el o los obje os necesa ios que se án ecibidos po Va nish. En es e momen o el p oxy almacena á en cache el pa pe ición/ espues a al mismo iempo que en ía los obje os a la di ección que o iginó la pe ición. Aho a, an e una pe ición en an e que enga que ecibi la misma espues a, se á Va nish el que la esponda di ec amen e con los obje os que enga en cache sin necesidad de que Apache eciba ni p ocese nada, alcanzando así la consiguien e educción de ca ga al sis ema y e i ando los iempos de p ocesado de pe iciones de Apache, que son supe io es a los de Va nish. 20 Ilus ación 6: Esquema de la si uación de nues o sis ema una ez comple ado el obje i o. 4. Concep os p e ios al desa ollo Una ez plani icada la solución que se busca, se ha p ocedido a es udia de o ma exhaus i a los di e en es in eg an es so wa e del p oyec o, con el in de conoce sus o mas de uncionamien o, iche os de con igu ación, lógicas de abajo y demás ac o es cla e que hay que conoce pa a pode abo da el desa ollo de o ma e icaz.. 4.1. Panel Vi ualmin En p ime luga amos a explica cómo se puede accede al panel de con ol desde una máquina emo a. Es el paso esencial pa a pode u iliza lo como adminis ado es. Aunque pueda esul a algo i ial, la máquina debe es a a ancada y uncionando, así como conec ada a la ed con una con igu ación álida. En onces, sí en el equipo se encuen a ins alado el panel Vi ualmin y se encuen a lanzado el se icio (cosa que se hace po de ec o al a anque del sis ema), desde un na egado ex e no debe emos in oduci la di ección IP de nues o se ido e indica que la conexión se ealice po el pue o 10000. También se debe de usa una conexión con SSL, es deci , hab á que in oduci la siguien e di ección en el na egado : •h ps://192.168.0.103:10000 Una ez lancemos la pe ición a esa di ección, nos apa ece á una en ana de login a a és de la cual pod emos accede al panel y a odas sus unciones ing esando nues as c edenciales, como la que se mues a en la igu a 7. 21 Ilus ación 7: Pan alla de acceso al panel webmin. In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web Es as c edenciales son las mismas que se u ilizan pa a inicia sesión en el sis ema ope a i o, po lo que nues o usua io y con aseña debe án es a dados de al a en nues o Cen OS, y po ende, al se una dis ibución Linux, debe án exis i en el iche o /e c/passwd donde se almacenan odos los usua ios c eados y sus p opiedades. Una ez au en icados en la en ana de login, en la máquina se lanza el ejecu able enca gado de lee la con igu ación del panel y ep esen a la in o mación en una página web h ml. Rema quemos que cuando un ejecu able abaja de es a o ma, es deci , p ocesando in o mación en el se ido y gene ando al uelo código HTML (o cualquie o o obje o MIME) pa a se ep esen ado en un na egado , se le denomina CGI (Common Ga eway In e ace ). Es a es la o ma gene al de abaja del panel de con ol en odas las si uaciones de in e acción. Cuando el adminis ado hace clic sob e los elemen os de la página del panel, el sis ema no hace más que lanza a ejecu a los CGIs asociados a esas acciones que se enca gan de p ocesa la in o mación en el se ido y gene a el código de la página web co espondien e que se mues a en el na egado . Es os ejecu ables de los paneles se componen de ins ucciones esc i as en Pe l, un lenguaje de p og amación in e p e ado, que el se ido aduce a código máquina y ejecu a, y ob eniendo como esul ado una página de código HTML que el sis ema en ía al na egado o igen de la pe ición. Aunque la g an mayo ía de los CGIs de Vi ualmin es én esc i os en Pe l, si nos in e esa desa olla a noso os mismos algún módulo o unción ex a, pod emos hace lo en cualquie lenguaje in e p e ado, siemp e y cuando la máquina en la que se ejecu e disponga del in é p e e co espondien e pa a el lenguaje escogido. En segundo luga , se ha analizado y es udiado la he amien a Vi ualmin. El obje i o es conoce a ondo los di e en es iche os que emplea pa a almacena oda la in o mación de con igu ación de los di e en es se ido es i uales que adminis a. También debemos conoce los di e sos ejecu ables que se lanzan cuando el adminis ado ejecu a acciones sob e la in e az web del panel de con ol. G acias a es os conocimien os, hemos podido diseña nues a solución pa a que sea capaz de in e ope a con Vi ualmin sin pe judica el co ec o uncionamien o an o del panel como de los se icios que enga ac i os el p opio se ido en la si uación p e ia a la in eg ación. El p ime paso es localiza el di ec o io aíz del panel, pa a así pode analiza pos e io men e su con enido. Reco damos que Vi ualmin es una ex ensión del panel de con ol Webmin, al que le añade la capacidad de ges iona se ido es i uales. Po lo an o pa ece azonable busca nues o obje i o den o de la amilia de di ec o ios de Webmin. De es a o ma el di ec o io donde se ins ala Vi ualmin en nues o sis ema Cen OS es: •/us /libexec/webmin/ i ual-se e / Como cu iosidad, podemos ap ecia que el p opio nomb e del di ec o io unicamen e hace e e encia a la uncionalidad que el panel añade a Webmin. En el in e io de es e di ec o io aíz de Vi ualmin se encuen an los a chi os ejecu ables que se lanzan cada ez que el adminis ado ealiza alguna acción en el panel. También se localizan aquí los di e en es iche os de con igu ación de esos ejecu ables así como di e sos iche os necesa ios pa a que Vi ualmin uncione en sin onía con Webmin. 22 De en e odos los iche os, el más impo an e pa a el desa ollo de nues o p oyec o es el diche o con ig. És e con iene una ex ensa lis a de a ibu os de con igu ación, en e los que se pueden encon a desde pa áme os po de ec o de con igu ación de pue os en los se ido es i uales has a u as de iche os que debe conoce el panel. Los a ibu os se o ganizan de o ma que al p incipio de cada linea apa ece el nomb e de la p opiedad y a con inuación, p ecedido po un símbolo “=” se encuen a el alo o los di e en es alo es sepa ados po comas en el caso de que ue a un a ibu o mul i aluado. Cada ez que un ejecu able del panel ealiza una llamada a la unción ini _con ig(), és a ca ga en memo ia odos los a ibu os o denados como una lis a de pa es cla e/ alo pa a así pode se leídos o esc i os co ec amen e po los p og amas del módulo que lo necesi en. El con enido del iche o se puede edi a a a és de di e sos o mula ios que mues a el panel al adminis ado en las secciones co espondien es a cada amilia de alo es, pe o si se desea ambién se puede edi a a mano, y mien as los alo es in oducidos sean cohe en es el uncionamien o del panel se á el co ec o. Una unción impo an e de Vi ualmin y que nos in e esa conoce es que a la ho a de c ea un nue o se ido i ual, o ece al adminis ado una plan illa con los pa áme os po de ec o en e los que se encuen an el pue o e IP de es e se ido . Es o, unido al esquema inal que que emos consegui pa a el sis ema hace que nues a solución deba cambia esa plan illa con los nue os alo es de comunicaciones pa a que coincidan con la di ección y pue o al que mo e emos Apache. Todos los a ibu os po de ec o de es a plan illa se encuen an en el iche o con ig de con igu ación mencionado con an e io idad. 23 Ilus ación 8: Ex ac o del iche o con de Vi ualmin In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web 4.2. Se ido web Apache T as analiza y comp ende el panel Vi ualmin y su uncionamien o, oca es udia el se ido web Apache, qué eco demos, es el que se enca ga en la si uación inicial de ecibi , p ocesa y esponde las pe iciones que le lleguen a a és de la IP en la que es é con igu ado. En el sis ema de nues a máquina i ual se encuen a ins alado un se ido Apache e sión 2.2. El di ec o io aíz del p og ama es: •/e c/h pd/ Den o de es e di ec o io hay dos di ec o ios cla e pa a noso os que son: •/e c/h pd/con / •/e c/h pd/con .d/ Den o del p ime di ec o io es án los iche os de con igu ación del se icio web que o ece Apache. De odos ellos el a chi o más impo an e es h pd.con que con iene odos los a ibu os de con igu ación del se icio. En es e iche o podemos encon a , en e o os a ibu os, el pue o o pue os y di ección o di ecciones IP en los que Apache se encuen a escuchando a la espe a de pe iciones en an es. También se especi ican aquí en qué u as del sis ema debe i Apache a busca los obje os necesa ios pa a esponde una pe ición. Además, en el iche o se encuen a de inido cualquie se ido i ual que exis a en la máquina. Apache sigue el mismo o ma o pa a odos sus iche os de con igu ación, incluido del que es amos a ando. Un a ibu o de con igu ación ocupa una linea, y los alo es que enga de inido es e a ibu o deben esc ibi se a con inuación en la misma línea, sepa ados del a ibu o po un espacio. Sí el alo de un a ibu o con iene espacios, es necesa io esc ibi lo en ecomillado con comillas dobles. Las líneas más impo an es en elación a nues o p oyec o son dos: •Lis en 80: Es e a ibu o especi ica en qué IP y pue o es á escuchando el se ido Apache a la espe a de pe iciones. En es e caso emos que Apache espe a en odas las IP disponibles y en el pue o 80. También pod ían habe o os o ma os de línea coexis iendo, como Lis en IP:pue o, o Lis en *:pue o. •NameVi ualHos *:80: Es a linea indica en qué di ección IP y pue o espe a Apache pe iciones que se an a en ia a los hos s i uales. El * indica que se espe an pe iciones en odas las di ecciones IP disponibles en la máquina. Los a ibu os del iche o pueden ag upa se en bloques de con igu ación, especi icando así a qué pa e conc e a del se ido se aplican esos alo es con enidos en el bloque. Es os apa ados se o ganizan siguiendo una es uc u a en o ma o XML, es deci , se delimi an al inicio y al inal po una línea con el nomb e del bloque en e los ca ac e es meno y mayo que (<, >). En el iche o se pueden encon a bloques de con igu ación de los siguien es ipos: <Di ec o y>, <Di ec o yMa ch>, <Files>, <FilesMa ch>, <Loca ion>, <Loca ionMa ch>, y <Vi ualHos >. Es e ul imo ipo de bloques de con igu ación son los que más nos in e esan de ca a al p oyec o, pues como se puede deduci a pa i de la e ique a que los iden i ica, cada uno con iene la con igu ación de cada se ido i ual alojado en el se ido web. 24 Un se ido i ual es una pa ición den o de un se ido web ísico (una máquina con Apache en nues o caso) que puede con i i uncionando simul áneamen e con o os se ido es i uales. G acias a es a abs acción, con una única máquina y un único se ido Apache podemos o ece al ex e io el se icio de an os se ido es como deseemos, sin que el usua io no e que es án odos en un único o denado . Pe o en onces los se ido es i uales deben di e encia se unos de o os y ene una iden i icación única que pe mi a a Apache decidi a qué se ido conc e o a des inada una pe ición en an e en la máquina. Es a di e enciación o iden i icación se puede consegui median e el nomb e de hos . Es o quie e deci que si po ejemplo enemos un se ido i ual con el a ibu o de con igu ación Se e Name con alo “ejemplo.com”, cuando llegue una pe ición web a Apache, és e mi a á la cabece a hos de la pe ición, y si coincide con el alo del a ibu o mencionado, se asigna á esa pe ición a ese se ido i ual. También es posible hace es a di e enciación en e se ido es i uales u ilizando di e en es di ecciones IP y/o pue os pa a cada hos i ual. De es a o ma, si una pe ición en a po la IP y pue o que enga asignado un se ido i ual, se á a es e al que Apache manda á la pe ición. Vol iendo al es udio de los di ec o ios de Apache, pasamos aho a a /e c/h pd/con .d/ en el que se encuen an los iche os de con igu ación que u ilizan los módulos de Apache ins alados en el equipo. Po ejemplo la ex ensión mod_dbd que añade a Apache la posibilidad de u iliza conexiones con una base de da os SQL. Exis en nume osos módulos o ex ensiones pa a Apache, con i iéndolo aún más si cabe en una au én ica na aja suiza de los se ido es web[19]. 4.3. Va nish Cache En es a sección es udiamos la he amien a que hace de p oxy in e so en nues o sis ema. Vemos como unciona y cómo se con igu a pa a pode abo da pos e io men e el desa ollo de la solución de la mejo o ma posible. Comenzamos con odo lo e e en e a la con igu ación de Va nish y obse amos que exis en dos g andes ca ego ías de con igu ación en el p og ama, la con igu ación po linea de comandos con los pa áme os del se icio, y el iche o VCL, qué con igu a emos más adelan e. 25 Ilus ación 9: Ejemplo de bloque de con igu ación de un i ual hos . <Vi ualHos 127.0.0.1:8080> SuexecUse G oup "#513" "#511" Se e Name p ueba.com Se e Alias www.p ueba.com Se e Alias webmail.p ueba.com Se e Alias admin.p ueba.com Documen Roo /home/p ueba.com/public_h ml </Vi ualHos > In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web • a nishLis enPo : 80 Pue o en el que amos a pone Va nish a escucha pe iciones. El pue o ecomendado es el pue o HTTP, es deci , el pue o 80 que coincide con el alo po de ec o. • a nishAdmLis enAdd: 127.0.0.1 Di ección IP po la cual se pod á accede a la consola de adminis ación de Va nish. Se ecomienda una di ección de la cual engamos la ce eza de que solo el adminis ado pod á ene acceso. Po de ec o iene la di ección loopback 127.0.0.1, lo que nos con ie e la segu idad de que solo se pod á accede a es e se icio a a és de la p opia máquina. • a nishAdmLis enPo : 6082 Pue o a a és del cual se pod á accede a la consola de adminis ación de Va nish. El alo po de ec o es el que se ecomienda en la documen ación del p og ama po con ención. • a nishS o ageSize: 400M Tamaño del espacio de memo ia que Va nish a a ese a pa a la cache. Se pueden u iliza los su ijos k (kiloby es), M (megaby es), G (gigaby es) y T ( e aby es). El alo po de ec o es 400M, pe o debe á se modi icado po el adminis ado pa a ajus a se a sus necesidades y limi aciones. Se habla á más adelan e de es e aspec o. • a nishS o age: malloc,${VARNISH_STORAGE_SIZE} Fo ma de ese a memo ia pa a cache de Va nish. El alo po de ec o es con un malloc del amaño especi icado en pa áme o an e io . Se debe á modi ica es e alo po medio de un edi o de ex o si se desea ese a la memo ia pa a cache con un iche o, pe o no es una p ác ica ecomendada pues pe demos pa e impo an e de la mejo a de endimien o. • a nishTTL: 120 Tiempo de ida (en segundos) du an e el cual se man end án los obje os en cache. Po de ec o se aplican 120 segundos, que es la con igu ación con la que se ins ala el so wa e Va nish. El adminis ado debe á cambia es e a ibu o median e el o mula io diseñado pa a ello y adap a lo a sus necesidades. • a nishMinH: 50 Núme o mínimo de hilos que man end á Va nish en espe a po cada pool de hilos. Po de ec o se ha decidido deja 50 hilos siemp e ac i os, pe o el alo puede se cambiado po el adminis ado en el o mula io pa a adap a la solución a sus ni eles de á ico. Reco demos que Va nish abaja con 2 pools de hilos po de ec o siendo es a la con igu ación más ecomendada. 32 • a nishMaxH: 1000 Núme o máximo de hilos que Va nish pod á ene en ejecución po cada pool de hilos. Po de ec o hemos asignado un alo de 1000 hilos, que combinado con los dos pool con los que abaja Va nish po de ec o, hacen un o al de 2000 hilos como máximo simul áneos, lo que se aduce en un máximo de 2000 pe iciones a endidas simul áneamen e. El alo pod á se edi ado po el adminis ado a a és del o mula io. 5.2. a nishRLib.py Después de explica cómo amos a gua da las con igu aciones de nues o módulo a a és del iche o desc i o an e io men e, p ocedemos a desmemb a y analiza la lib e ía que hemos c eado en Py hon a nishRLib.py. Podemos e un ex ac o del código del iche o en la siguien e imagen. Den o de es e iche o encon amos odas las unciones que ienen en común los dis in os ejecu ables del p oyec o, es po és o po lo que podemos denomina al iche o como una lib e ía. Den o del iche o podemos encon a unciones pa a lee nues o a chi o de con igu ación o ambién pa a esc ibi lo. Las de allamos a con inuación. •gua daCon ( ) Función que ab e el iche o de con igu ación con . ile y lo eco e línea a línea, compa ando las en adas con las de la a iable con ig, esc ibiendo los alo es de es a a iable en la línea co espondien e. 33 Ilus ación 11: Ex ac o de código de la uncion ca gaCon de la lib e ía de nues o módulo. ############################################################################ # Funcion que lee el iche o con . ile pa a ca ga la con igu acion # de los sc ip y la gua da en el dicciona io global "con ig" ############################################################################ de ca gaCon ( ): =open("con . ile"," ") lineas= . eadlines() .close() alo es=[] o linea in lineas: in=linea. ind(":") alo es= e.spli ("( s)+",linea) #gua da pa ame os alo es= alo es[1:] # qui a el p ime espacio alo es= alo es[1::2] # qui a el es o de espacios. con ig[linea[0: in]]= alo es #asigna la de con In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web •ca gaCon ( ) Función que ab e el iche o de con igu ación y lo eco e línea a línea, ca gando los alo es encon ados en la a iable con ig. •imp imeCon ( ) Función que eco e el iche o de con igu ación e imp ime los dis in os alo es de con igu ación encon ados. •log (cadenaLog) Función que ab e un iche o de log llamado logFile.log pa a esc ibi en és e el alo de la a iable que se le pasa como a gumen o, p ecedido de la ho a del sis ema en el momen o de la esc i u a. G acias a es a unción se man iene un egis o de las acciones ealizadas po los ejecu ables pa a acili a la a ea de debug. •esc ibeFiche o ( ich, con ) Función que ab e el iche o que se le pasa como pa áme o a a és de la a iable ich, pa a pos e io men e, añadi al inal del mismo el con enido de la a iable que se le pasa como pa áme o con . También gene a una linea de log al ejecu a se indicando qué iche o se ha esc i o. •leeFiche o ( ich, con ) Función que ab e el iche o que se le pasa como pa áme o a a és de la a iable ich, pa a eco e lo línea a línea. De uel e el con enido del iche o leído en la a iable con enido. Es a unción ambién gene a una en ada de log indicando qué iche o se ha leído. El mecanismo pa a pode ca ga y u iliza es as unciones en cualquie ejecu able es u iliza la ins ucción impo a nishRLib.py, de es a o ma, la lib e ía se enlaza con el ejecu able que la impo a, pe mi iendo la llamadas a sus unciones den o del código median e la ins ucción a nishRLib. unción(pa áme os de en ada), que e emos apa ece nume osas eces en los o os ejecu ables. 5.3. apacheCon .py Sob e es e sc ip ecaen las unciones iniciales pa a p epa a el se ido Apache pa a la in eg ación de nues o p oxy in e so. A con inuación se de alla el con enido de las unciones que lo componen así como su come ido, adjun ando alguna imagen que ayude al lec o a isualiza el código p og amado. 34 •comp uebaCon Apache( ) Es a unción se enca ga de ab i el iche o de con igu ación de apache, que se encon a á en la u a especi icada po el alo de n ConApache de nues o iche o de con igu ación, y de ca ga su con enido en una a iable. Pos e io men e en ía ese con enido a la unción Con Apache( ), la cual ealiza á las modi icaciones necesa ias que e emos más adelan e en es a misma sección de la memo ia. Después manda á ese con enido del iche o de con igu ación modi icado a la unción pu ga Apache( ), que ealiza á o as modi icaciones en el con enido. Po úl imo, si se ha modi icado algo del iche o, la unción lo gua da á en su si io con el nue o con enido modi icado. •con Apache (con ) La unción de la que a amos aho a, ecibe como pa áme o una a iable ca gada con el con enido del iche o de con igu ación de Apache. La llamada la ecibe de la unción que acabamos de analiza an e io men e. Su uncionamien o consis e en eco e esa con igu ación línea a línea pa a, median e el uso de exp esiones egula es, busca las en adas que indican en qué di ección o di ecciones IP y pue o o pue os se encuen a el se ido web Apache espe ando conexiones en an es. En p ime luga se buscan las en adas de ipo “NameVi ualHos IP:pue o”, de las cuales se ex ae an o el pue o como la IP que con ienen pa a compa a los con los alo es de di ección a los que se desea mo e el se ido web Apache. En el caso de que no sean los alo es deseados se cambia la línea con los nue os alo es de IP y pue o. Lo mismo se hace con las en adas ipo “Lis en IP:pue o” y sus posibles a iaciones que pueden se an o “Lis en pue o” como “Lis en *:pue o”. En odos los casos ci ados se sus i uye an o el pue o como la di ección IP po los alo es con igu ados en el módulo. Po úl imo se localizan las en adas del iche o de ipo “<Vi ualHos IP:pue o>” pa a p ocede a cambia el pue o de los se ido es i uales po el pue o con igu ado pa a Apache. Du an e la ejecución de la unción, se omi i án odas las en adas que mencionen el pue o SSL, es deci , el pue o 443, ya que Va nish no sopo a ese p o ocolo po lo que los se icios que lo usen debe án con inua ejecu ándose sin modi icación alguna de sus comunicaciones. •pu ga Apache(con ) A es a unción se le llama inmedia amen e después de que la unción an e io ealice las pe inen es modi icaciones al iche o de con igu ación de Apache que eco demos se encuen a ca gado en memo ia en una a iable. La u ilidad del código de es a unción es la de elimina cualquie en ada de ipo “Lis en IP:pue o” que se encuen e epe ida a lo la go del iche o. De no hace lo, al encon a se Apache con más de una en ada de es e ipo con la misma IP y pue o, no se ía capaz de a anca , dando un e o en el se icio. Puede e se el código de es a unción en la igu a 12. 35 In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web •comp oba Va nish( ) La sencilla a ea de es a unción del sc ip es la de comp oba si es á ac ualmen e Va nish ins alado en la máquina. Pa a ello in en a ab i el iche o de con igu ación del se icio, de ol iendo un alo False en caso de que no pueda encon a lo o lo que desencadena á la ejecución de la siguien e unción. •ins ala Va nish( ) Tal y como se in oducía an es, es e segmen o de código se lanza a ejecución en el caso de que la unción an e io de e mine que Va nish no se encuen a ins alado en el equipo. Al ejecu a se, la unción ins ala el eposi o io o icial del p og ama Va nish en su e sión 3 pa a Cen OS (o sis emas basados en RHEL). A con inuación ejecu a la o den de ins alación del p og ama y una ez comple ado es e p oceso, indica al sis ema que es e p og ama se lanza á al a anca la máquina. Puede e se el código de es a unción en la imagen 13. •comp oba RPAF( ) Es a unción comp ueba sí el módulo de Apache, RPAF, se encuen a ins alado en el equipo o no. Pa a ello se basa en el mismo mé odo que la unción comp oba Va nish( ). •ins ala RPAF( ) La unción de enca ga de desca ga e ins ala el módulo de Apache que le pe mi i á pode iden i ica el o igen de las pe iciones que le lleguen, al y como se explica más adelan e. •modPlan illaVmin( ) El código den o de es a unción se enca ga de ab i el iche o donde se encuen a la in o mación de la plan illa que o ece Vi ualmin al adminis ado del se ido a la ho a de c ea nue os se ido es i uales y ca ga el con enido en una a iable, pa a pos e io men e manda el con enido a edi a po o a unción. Una ez inalizada la modi icación, se p ocede a esc ibi el iche o con los nue os alo es en su si io. •con Plan illa (con ) Es a unción ecibe como pa áme o de en ada odo el con enido de del iche o indicado po el pa áme o de con igu ación n Plan illa. Reco e dicho con enido línea a línea buscando median e el uso de exp esiones egula es las en adas de ipo “web_po =” y “old_de ip=”. Ambas en adas se sus i uyen po el alo del pue o e IP al que se desea mo e a Apache. De es a o ma, cuando el adminis ado desee c ea un nue o se ido i ual, los alo es po de ec o que se le mos a án pa a es os pa áme os se án los deseados en la in eg ación. 36 Una ez conocidas odas las unciones que componen el sc ip , p ocedemos a jus i ica su u ilización. Así enemos que en p ime luga , pa a que la in eg ación uncione co ec amen e, es es ic amen e necesa io mo e al se ido web Apache del pue o 80 a o o pue o, pues en caso con a io se p oduci ía un con lic o con el se icio Va nish, que debe a ende pe iciones del ex e io en el pue o es ánda de HTTP, es o es el pue o 80. Pa a consegui mo e el se icio es necesa io cambia odas las en adas “Lis en” y “NameVi ualHos ” encon adas en el iche o de con igu ación. De es a o ma e i a emos los con lic os en e los se icios. En cuan o al módulo de Apache, RPAF, esul a necesa io pa a que la in eg ación con el p oxy in e so esul e plenamen e uncional. En una con igu ación es ánda en e Apache y un p oxy in e so, sin el módulo RPAF, las pe iciones que le lleguen al se ido web end án como IP de o igen la IP del p oxy in e so, pues es donde se in e cep an, se a an y desde donde se een ían a Apache. És o es lo que sucede a ni el de da ag ama IP, y en ealidad es la o ma co ec a de unciona según la implemen ación del p o ocolo, po lo que la modi icación de es e compo amien o no se con empla sencilla. El p incipal incon enien e de es a si uación es la gene ación y es udio de logs y iche os de es adís icas desde Apache, pues de es a mane a se ía imposible iden i ica co ec amen e de qué clien e son las pe iciones que ecibe, apa eciendo en odas nues o p oxy Va nish como o igen de és as. 37 Ilus ación 12: Ex ac o de código del iche o apacheCon .py que ilus a la unción pu ga Apache. ########################################################################### # Funcion que elimina las en adas Lis en epe idas pa a e i a p oblemas de con igu acion ########################################################################### de pu ga Apache (con ): con igu ado=False o n in ange(0,len(con )): linea=con [n] i e.ma ch("Lis en d{1,3} . d{1,3} . d{1,3} . d{1,3} : d{2,4} n", linea): ini=linea. ind(" ") in=linea. ind(":") IPan igua=linea[ini+1: in] pue oAn iguo=linea[ in+1:len(linea)-1] i pue oAn iguo== a nishRLib.con ig["nPue oAp"][0] and IPan igua== a nishRLib.con ig["IP"][0]: i con igu ado: con [n]="" i no con igu ado: con igu ado=T ue e u n con In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web La solución, en nues o, caso pasa po ecu i al ci ado módulo RPAF. Es e módulo nos pe mi e pode añadi de o ma p og amá ica una cabece a HTTP a las pe iciones cuando pasan po el p oxy in e so. En conc e o la cabece a es la “X-Fo wa ded-Fo ” y en ella se indica el alo de la di ección IP donde se o iginó la pe ición. G acias a es a solución, Apache puede in e p e a co ec amen e esa cabece a y consigue gene a unos logs y unas es adís icas co ec as que nos da án unos esul ados e ídicos, dando po sol en ado el p oblema. Más adelan e, cuando eamos la con igu ación del uncionamien o de la cache de Va nish en el iche o VCL, e emos como incluimos es a cabece a a las pe iciones p ocesadas. En lo e e en e al p o ocolo HTTPS, como ya se ha mencionado en an e io es ocasiones, el p oxy Va nish no iene compa ibilidad con és e, po lo que a la ho a de hace la in eg ación no se debe á oca ninguna en ada de con igu ación que mencione el pue o 443. De es a o ma se consigue que odas las web se idas a a és de es e pue o pe manezcan in ac as y ajenas a la ins alación del p oxy, uncionando con o al no malidad. Po úl imo, la mayo ía de acciones que ealiza el sc ip gene an una en ada en el iche o de log del módulo. G acias a és o, en el caso de que se p oduzca algún e o du an e la ejecución, se á más sencillo localiza el allo y co egi lo como se conside e opo uno. 5.4. Va nishApache.py Pasamos aho a a comen a y es udia el ejecu able que sigue a apacheCon .py según el o den lógico de ejecución. El sc ip Va nishApache.py iene como misión p incipal la de in eg a el ecién ins alado Va nish con Apache, haciendo que el p oxy en íe las pe iciones HTTP al pue o y di ección IP a los cuales hemos mo ido el se ido web. Al igual que con los sc ip s an e io es, p ocede emos a de alla las di e en es unciones que componen el a chi o en Py hon pa a más a de jus i ica su u ilización. 38 Ilus ación 13: Función del ejecu able apacheCon .py que ins ala Va nish. ########################################################################## # Funcion que ins ala Va nish en el sis ema. ########################################################################### de ins ala VARNISH ( ): p in "<b >"+"Ins alando y con igu ando Va nish" a nishRLib.log(" pm --nosigna u e -i h ps:// epo. a nish- cache.o g/ edha / a nish-3.0.el6. pm n") os.sys em(" pm --nosigna u e -i h ps:// epo. a nish-cache.o g/ edha / a nish- 3.0.el6. pm") a nishRLib.log("yum ins all a nish n") os.sys em("yum ins all a nish") a nishRLib.log("chkcon ig a nish on n")#A anque a nish al a anca la máquina os.sys em("chkcon ig a nish on") •mue eVi ualSe e s( ) Es a unción se enca ga de pone odos los se ido es i uales encon ados a lo la go del iche o de con igu ación de Apache en la di ección IP y pue o que el adminis ado haya indicado p e iamen e en la con igu ación del módulo. Pa a ello, el código ab e el iche o de con igu ación de Apache y lo eco e línea a línea compa ando cada en ada median e exp esiones egula es, al y como se ha hecho en si uaciones an e io es. Se buscan odas las líneas del iche o que con engan la cadena “<Vi ualHos IP:pue o>, pa a pos e io men e iden i ica es os alo es. En el caso de que el pue o del hos i ual sea el 443, se p ocede a igno a la en ada y no modi ica nada debido a la incompa ibilidad de Va nish con el p o ocolo HTTPS. Po el con a io, si el hos no se encuen a en el pue o 443, se ac ualiza la en ada del iche o man eniendo el mismo o ma o pe o con los alo es pa a la di ección IP y el pue o co espondien es ex aídos del iche o con . ile de nues o módulo. La unción ambién localiza y en ía cada uno de los bloques de con igu ación de hos s i uales a una unción que se enca ga á de modi ica las en adas cus omlog. Más adelan e se puede obse a una po ción del código de es a unción en la ilus ación 14. •con Cus omLog(bloque ) Es a unción se enca ga de busca las en adas cus omlog den o de un bloque de con igu ación de hos i ual que se le pasa como a gumen o. Las en adas se cambian pa a en ia los a chi os de los de cada se ido i ual al di ec o io aíz de Va nish Cache, iden i icando cada iche o con el nomb e del hos i ual pa a un mejo con ol de las es adís icas de ca a a las a eas de adminis ación. •c eaVScon Va nish( ) Es e agmen o de código basa su uncionamien o en llamadas al sis ema ope a i o. Lo que hace conc e amen e es, en p ime luga , copia el iche o VCL gené ico incluido po de ec o en el módulo, a su u a co espondien e. En segundo luga , ealiza la misma acción pe o es a ez con el iche o de con igu ación del se icio Va nish. •c ea Backend( ) Es a unción es la esponsable de conec a Va nish y Apache y lo consigue esc ibiendo en el iche o VCL del p oxy in e so los alo es de la di ección IP y pue o a los que se ha mo ido el se ido web. Se eco e el iche o de o ma secuencial has a encon a la en ada “backend de aul {“ pa a añadi a pa i de esa línea los alo es co espondien es indicados en el iche o de con igu ación de nues o módulo. Puede e se el código de es a unción en la imagen 15. 39 In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web •opcionesVa nish( ) El código Py hon den o de es a unción se enca ga de esc ibi den o del iche o de con igu ación del se icio de Va nish los alo es que el adminis ado haya in oducido en nues o iche o de con igu ación (o los alo es po de ec o en caso de no modi ica lo). Haciendo uso de exp esiones egula es, busca las en adas co espondien es a “VARNISH_LISTEN_ADDRESS”, “VARNISH_MIN_THREADS”, VARNISH_MAX_THREADS”, “VARNISH_TTL”, “VARNISH_LISTEN_PORT”, “VARNISH_STORAGE_SIZE” y “VARNISH_STORAGE” y ac ualiza los pa áme os den o del iche o, esc ibiéndolo en disco con sus alo es nue os de con igu ación. • einiciaSe ( ) Pa a e mina , la unción que a amos en es e pun o se enca ga de einicia los se icios de Apache y de Va nish con llamadas al sis ema. G acias a es o, las con igu aciones aplicadas ienen e ec o al momen o. Una ez que conocemos las di e en es unciones que con o man es e sc ip , podemos conc e a las a eas que se ealizan al ejecu a es e código y podemos azona la necesidad de ales a eas. 40 En p ime luga , esul a necesa io pa a una comple a in eg ación uncional el mo e los se ido es i uales al nue o pue o y di ección IP donde escucha Apache as mo e lo. De es e modo, las pe iciones web que en en en el se ido pod án llega a se a endidas po el hos i ual co ec o, ya que en el caso de que no coincidie an es os alo es, no se pod ía comunica pe iciones a es as páginas web. Con inuamos con las en adas cus om log de los se ido es i uales. Un cus om log es la o ma que iene Apache de gene a in o mación de acceso y de con ol sob e un se ido i ual, ya que de no u iliza los, el log que se gene ase desde Apache se ía compa ido po odos los di e en es se ido es i uales que es u ie an alojados en nues o equipo. Así, g acias a es e mecanismo, el adminis ado puede ene unas es adís icas más especí icas y pod á eje ce las a eas de adminis ación de una o ma más pe sonalizada. 41 Ilus ación 14: Ex ac o de código de la unción mue eVi ualSe e s del ejecu able Va nishApache.py. ########################################################################### # Funcion que eco e el iche o de con igu acion de apache buscando en adas de Vi ualHos # pa a mo e los a la IP y pue os nue os de apache. ########################################################################### de mue eVi ualSe e s(): inibloque=0 inbloque=0 bloque=[] lineas= a nishRLib.leeFiche o( a nishRLib.con ig["n Con Apache"][0]) a nishRLib.log(" INFO -> Leyendo con igu acion Vi ualHos de Apache n") o n in ange(0,len(lineas)): linea=lineas[n] i e.ma ch("<Vi ualHos (( d{1,3} . d{1,3} . d{1,3} . d{1,3})|(.+)) : d{2,4}>", linea ): a nishRLib.log(" INFO -> Encon ado Vi ualHos "+linea) a nishRLib.log(" INFO -> Mo iedo Vhos a IP/pue o de apache n") inibloque=n p in "<b >Vi ual Hos encon ado: "+linea #Cogemos IP y pue o ini=linea. ind(" ") in=linea. ind(":") IP ieja=linea[ini+1: in] #IP de VHos Apache pue o iejo=linea[ in+1:len(linea)-2] #Leemos el pue o en el que es a i pue o iejo=="443": p in "<b >Hos SSL omi ido" con inue In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web ambos. De es a o ma se consiguen ealiza odas las a eas necesa ias an o po una lado pa a p epa a el sis ema ins alando Va nish y el módulo de Apache RPAF en el caso de que no lo es én p e iamen e, como po o a pa e aplica a ambas he amien as las con igu aciones que igu en en el iche o de con igu ación de nues o módulo al y como se ha explicado en las secciones donde a ábamos es os sc ip s analizando su con enido y uncionamien o. A la ho a de accede a la página HTML que gene a es e CGI, el adminis ado e á en la en ana una se ie de sen encias in o ma i as sob e las di e en es acciones que se es én ejecu ando en segundo plano. A la inalización de las cuales, como es habi ual en nues o módulo, se mues a un hipe enlace que nos lle a a la página p incipal del modulo si lo pulsamos. Hay que des aca que al inal de la ejecución del código de nues o iche o CGI, se p ocede a lanza al sis ema la o den de einicia el se icio Webmin median e la ins ucción “se ice webmin es a ”. Debido a es o, la mayo ía de las eces la ejecución es an ápida que el na egado no es capaz de mos a odas y cada una de las sen encias in o ma i as que mencionábamos an e io men e, aunque sí se egis an odas las acciones en el conocido iche o de log de nues o módulo de in eg ación. 48 Ilus ación 23: Ex ac o de código del iche o applySe ings.cgi p in "<h ml><head><link el='s yleshee ' ype=' ex /css' h e ='/unau hen ica ed/ ese - on s-g ids-base.css'>" p in "<link el='s yleshee ' ype=' ex /css' h e ='/unau hen ica ed/ i ual-se e -s yle.css' />" p in "< i le>Se ido Va nish como P oxy in e so de Apache</ i le></head><body>" apacheCon .main() #lanzamos sc ip ins ala Va nish p oxy de apache Va nishApache.main() #lanzamos sc ip con igu a VHos de Apache p in "<b >Reiniciando Vi ualMin(Webmin)" p in "<b ><b >" p in "<a h e ='/ a nishRe e se/index.cgi'>Indice del Modulo</a>" p in "</body></h ml>" sys.s dou . lush() a nishRLib.log(" INFO - Reiniciando WebMin n") subp ocess.call(["se ice","webmin"," es a "]) 5.10. edi File.cgi Es e es el CGI cuya ejecución mues a al adminis ado un cuad o de ex o en el que pode edi a di ec amen e el iche o que con ola el compo amien o de la cache de Va nish, es deci , el iche o VCL del que se habla más adelan e. Pa a accede a la pan alla que gene a el sc ip , el adminis ado debe á pulsa en el icono de la de echa del odo de la en ana p incipal de nues o módulo de Vi ualmin. 49 Ilus ación 24: Cap u a de pa e de los mensajes in o ma i os que p opo ciona el módulo al aplica la in eg ación. Ilus ación 25: Ex ac o de código del iche o edi File.cgi que ca ga un iche o en pan alla. iche o= a nishRLib.con ig["n De aul Vcl"][0] p in "< o m class='ui_ o m' ac ion='edi FileSa e.cgi' me hod='pos ' enc ype='mul ipa / o m-da a'>" p in "<inpu class='ui_hidden' ype='hidden' name=' ile' alue='"+ iche o+"'>" p in "< ex a ea class='ui_ ex a ea' name='da a' ows='20' cols='80' s yle='wid h:100%'>" con = a nishRLib.leeFiche o( iche o) o linea in con : linea=linea. eplace(" n","") p in linea #Ca gamos las lineas del iche o en el cuad o de ex o p in "</ ex a ea><b >" p in "< able class='ui_ o m_end_bu ons' >< >" p in "< d><inpu class='ui_submi ' ype='submi ' name='sa e' alue='Sal a '>" p in "</ d>" p in "</ ></ able>" In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web Al ejecu a es e iche o, en el na egado de la pe sona que es é adminis ando el se ido apa ece á un cuad o de ex o, más conc e amen e un obje o HTML ex a ea, al y como puede e se en la imagen 26. El sc ip se enca ga de ellena ese cuad o de ex o con el iche o VCL que es é especi icado en el a ibu o n De aul Vcl de nues o a chi o de con igu ación del módulo. El código simplemen e ab e el iche o y lo eco e de o ma secuencial, copiando cada línea del mismo den o del elemen o ex a ea. Al mismo iempo, se le mues a al adminis ado un bo ón que lanza a ejecución el CGI edi FIleSa e, del cual habla emos a con inuación, pe o cuyo abajo a g andes asgos consis e en gua da los cambios que se hayan hecho a a és del cuad o de ex o. Po úl imo se mues a un enlace al índice del módulo, pa a pe mi i a la pe sona que es é na egando pode e o na a la pan alla p incipal sin u iliza los bo ones de su na egado web. 5.11. edi FileSa e.cgi És e es el CGI que se lanza a ejecución cuando el adminis ado pulsa el bo ón pa a gua da los cambios e ec uados en el iche o de Va nish VCL desde la en ana gene ada po el sc ip edi File.cgi. 50 Ilus ación 26: Cap u a de la en ana de nues o módulo que pe mi e edi a el iche o VCL de Va nish. En el código del iche o obse amos que en p ime luga se comp ueba que a a és de la llamada que ecibe el sc ip se en íe una a iable llamada ile. En caso con a io se de iene la ejecución y no se hace nada. En caso de que, e ec i amen e, engamos esa a iable, ca gamos su con enido en la a iable o m. Así, pos e io men e, median e el uso de las unciones de nues a lib e ía a nishRLib gua damos odo el con enido ecibido en el iche o VCL que indique la en ada n De aul VCL de nues o a chi o de con igu ación. Como paso inal, el código manda al sis ema la o den de einicia el se icio Va nish pa a que los cambios engan e ec os inmedia os. Du an e odo el p oceso se mues an en el na egado sen encias in o ma i as de las acciones que se lle an a cabo en segundo plano, gua dando ambién egis o de es as acciones en el iche o de log de nues o módulo. 51 Ilus ación 27: Ex ac o de código del iche o edi FileSa e.cgi. o m = cgi.FieldS o age() #Se ca gan los pa ame os i " ile" no in o m and "da a" no in o m : exi ()#Si no hay iche o ni da os salimos else : p in "P agma: no-cache" p in "Con en -Type: ex /h ml; Cha se =UTF-8 n" sys.s dou . lush() sys.s de . lush() sys.s de = sys.s dou p in "<h ml><head><link el='s yleshee ' ype=' ex /css' h e ='/unau hen ica ed/ ese - on s-g ids-base.css'>" p in "<link el='s yleshee ' ype=' ex /css' h e ='/unau hen ica ed/ i ual-se e -s yle.css' />" Ilus ación 28: Cap u a de los mensajes de con i mación que gene a el módulo al gua da los cambios en el iche o VCL. In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web Al inal de la en ana que e el adminis ado , como es habi ual en el en o no de nues o módulo, se mues a un enlace a la pan alla p incipal, es deci , a index.cgi. 5.12. module.in o / ins all_check.pl Es os dos iche os son de obligada inclusión a la ho a de desa olla cualquie módulo pa a el panel Webmin y ayudan al p opio panel a in eg a el módulo y ges iona lo. En p ime luga , el iche o module.in o con iene los me ada os e e en es a nues o módulo. Se compone de cua o a ibu os seguidos del símbolo “=” y del alo que necesi emos da les pa a nues o módulo. En nues o caso los a ibu os y sus alo es son: •desc=Van ish p oxy in e so Es e es el nomb e iden i ica i o de nues o módulo, es deci , con qué nomb e a a apa ece en la lis a dinámica de módulos de Webmin. •os_suppo =*-linux Es a en ada indica los sis emas ope a i os pa a los que nues o módulo es compa ible, po ello sopo a múl iples alo es sepa ados po comas. En nues o caso el sis ema ope a i o pa a el que o ecemos compa ibilidad es cualquie dis ibución Linux. • e sion=0.9 Como se puede deduci po en nomb e, en es a en ada del iche o indicamos el núme o de e sión de nues o módulo. En nues o caso hemos op ado po o ece una e sión p e ia a la 1.0, es deci , una e sión be a, pues aún con odo el desa ollo co ec o, se ía ecomendable da le a ios meses de odaje pa a puli posibles e o es que se hayan escapado y añadi uncionalidades en las que no hayamos caído. •ca ego y=se e s Es a línea del a chi o si e pa a indica la sección de los menús desde la cual se pod á accede a nues o módulo. En nues o caso, como el obje i o es ges iona se ido es i uales hemos decidido inclui la en la sección de se ido es, donde puede encon a se ambién el módulo de Apache. Po úl imo, según la documen ación de Webmin, el iche o ins all_check.pl es necesa io pa a que el p opio panel pueda e i ica que el módulo se ha ins alado co ec amen e, pa a lo cuál debe á de ol e el alo 0 al ejecu a se. Así que simplemen e hemos incluido la ins ucción e u n 0. 52 5.13. Fiche o a nish Es e a chi o, que du an e la ins alación del módulo se copia al di ec o io de Va nish en /e c/syscon ig/ a nish/, iene de inidas las di e en es a iables de en o no que u iliza el se icio del p oxy pa a a anca de la mane a deseada. Puede e se un es ac o del iche o en la imagen 29. Los alo es de sus en adas ienen de inidos po de ec o pa a una con igu ación es ánda . Pe o eco demos que la mayo ía de esos pa áme os son con igu ables a a és del o mula io de con igu ación de nues o módulo. Ya se han es udiado la inmensa mayo ía de en adas que con iene p e iamen e cuando explicamos nues o iche o de con igu ación con ig. ile. 5.14. Gene ación e ins alación del módulo Un iche o de ins alación de cualquie módulo de Webmin es un di ec o io comp imido en o ma o . a al que le cambiamos la ex ensión po .wbm. Con es o en men e, en nues o caso hemos u ilizado el p og ama 7zip [20] pa a comp imi el esquema de di ec o ios y iche os que hemos mencionado en odos los pun os an e io es y del cual se puede e un esquema en la siguien e ilus ación. De es a o ma conseguimos gene a con éxi o el a chi o que necesi a el panel de con ol pa a ins ala co ec amen e nues o módulo en el sis ema. En nues o caso gene amos el iche o a nishRe e se.wbm. 53 Ilus ación 29: Ex ac o del código del iche o de con igu ación del se icio Va nish VARNISH_STORAGE_SIZE=300M #Backend s o age speci ica ion VARNISH_STORAGE=" ile,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}" #De aul TTL used when he backend does no speci y one VARNISH_TTL=120 DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} - ${VARNISH_VCL_CONF} -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} - ${VARNISH_TTL} -w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},$ {VARNISH_THREAD_TIMEOUT} -u a nish -g a nish -S ${VARNISH_SECRET_FILE} -s ${VARNISH_STORAGE}" In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web Pos e io men e hemos p ocedido a ins ala nues o desa ollo en la máquina i ual Cen OS, que eco demos, ya iene ins alado un panel Vi ualmin y un se ido web Apache. Los pasos pa a ealiza la ins alación del módulo se ilus an a con inuación. En p ime luga debemos accede al panel de con ol Vi ualmin desde el na egado de la máquina donde enemos el a chi o .wbm y au en ica nos como un usua io álido pa a ealiza las a eas de adminis ación. Pa a ello ing esa emos en un na egado web la página h ps://192.168.0.103:10000 (en el caso de que el sis ema Cen OS enga una di ección IP di e en e se á esa la que debamos ing esa ). En onces nos apa ece á la en ana donde pod emos loguea nos con nues as c edenciales, al y como puede e se en la imagen 7. El paso siguien e se á na ega has a la sección de Webmin desde la que se ges iona la con igu ación del p opio panel. Pa a ello ha emos clic en el bo ón de acceso a Webmin que se encon a á en la esquina supe io izquie da de la pan alla, y a con inuación desplega emos el submenú la e al llamado “Webmin”, llegando a la pan alla que puede e se en la imagen 31. 54 Ilus ación 30: Esquema en á bol del di ec o io de iche os y ca pe as que se comp ime pa a gene a el iche o .wbm. Una ez ahí, como adminis ado es debe emos accede a la sección “Con igu ación de Webmin” y nos apa ece á una pan alla con odos los iconos que dan acceso a las di e en es opciones de con igu ación del panel, al y como mues a la siguien e imagen. El bo ón que nos in e esa pa a ins ala nues o módulo es el icono llamado “Módulos de Webmin”, pulsa emos en él y accede emos a la pes aña desde la que se añaden nue as ex ensiones a nues o panel. En es a pes aña apa ecen nume osas opciones a a és de las cuales pod íamos ins ala nues o módulo, pe o en nues o caso conc e o, la más cómoda es la al e na i a “Desde a chi o a ca ga ”. Así pues, ac i amos la opción y hacemos clic en el bo ón “Examina ...”. Se nos desplega á un na egado de a chi os y selecciona emos nues o módulo que, eco demos, empaque amos an e io men e como “ a nishRe e se.wbm”. A con inuación debe emos pulsa sob e el bo ón “Ins ala módulo”. 55 Ilus ación 31: Cap u a de la página p incipal de Webmin con el p ime menú la e al desplegado. Ilus ación 32: Cap u a de el menú de con igu ación p incipal del panel Webmin. In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web Cuando la ins alación se comple e, el panel nos mos a á un mensaje con i mándonos que el p oceso ha concluido con éxi o. En ese mismo mensaje end emos un enlace que pod emos pincha pa a i a la página p incipal de nues o módulo. A pa i de en onces pod emos encon a nues a ex ensión pa a Va nish en el panel de Webmin, den o del menú desplegable de “Se ido es”, pues esa es la sección que indicamos den o del iche o module.in o al y como eíamos unas páginas a ás (y como puede e se en la ilus ación 35). Y así es como ins alamos nues o módulo en el panel de con ol Vi ualmin. 56 Ilus ación 33: Cap u a del desplegable desde el cual subimos nues o módulo en o ma o .wbm Ilus ación 34: Mensaje de con i amción de Webmin as ins ala con éxi o nues o módulo. 57 Ilus ación 35: Localización del acceso a nues o módulo den o del panel de con ol webmin. In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web •Decidi las polí icas de cacheo de obje os, po ejemplo no almacena en cache pe iciones POST o solo almacena cie as URLs. •Ejecu a eglas de eesc i u a de algunos da os de clien e u ilizados po algunas aplicaciones web especí icas. •Añadi ba e as de segu idad pa a e i a a aques. Todas es as si uaciones han sido a adas e implemen adas más adelan e, eco dando que nues o desa olla busca se una solución gene al in en ando aba ca la máxima uncionalidad posible pa a el máximo nume o de se ido es posibles sin in en a esol e si uaciones muy conc e as que puedan esponde a necesidades de cie os se ido es y sus páginas. Vol iendo a cl_ ec , una ez ealizadas las acciones an e io es, es posible oma es caminos di e en es. En p ime luga podemos hace un pass, que supone ejecu a el es o de la lógica de p ocesamien o pe o sin busca coincidencias en la cache y sin a a de almacena la espues a gene ada. Es deci , se pedi á al backend la espues a y se le en ia á al clien e, sin más. O a opción, llegados al inal de cl_ ec , es hace un pipe. És o no es ni más ni menos que c ea una conexión di ec a en e nues o se ido backend y el clien e. Toda la ansmisión a a és de la pipe se á in e p e ada po Va nish como simples by es que e ansmi i á a un lado o a o o sin in en a comp ende los. Po es e mo i o, cualquie pe ición que se gene e a consecuencia del pipe mien as el iempo keep-ali e connec ion siga ac i o pasa á ambién po el p oxy con la misma écnica. La opción que más nos in e esa es busca (o hace un lookup) de la pe ición en la cache, espondiendo con la espues a co espondien e en caso de que se encon a a o almacenando la espues a gene ada po el backend en el caso de que no se encon a a en la cache. Po úl imo, en cl_ ec podemos gene a una espues a de e o desde Va nish, indicando una edi ección o cualquie cosa que nos in e ese. És o se hace con e o . 64 6.3.1 Código po de ec o P ocedemos a ilus a el código de la unción cl_ ec ( ) que incluimos po de ec o al aplica la in eg ación con nues o módulo. 65 Ilus ación 38: Código que incluimos po de ec o en la unción cl: ec ( ). #VCL con igu acion sub cl_ ec { #Anñadimos a la pe icion la IP del clien e pa a es adis icas i ( eq. es a s == 0) { i ( eq.h p.x- o wa ded- o ) { se eq.h p.X-Fo wa ded-Fo = eq.h p.X-Fo wa ded-Fo + ", " + clien .ip; } else { se eq.h p.X-Fo wa ded-Fo = clien .ip; } } i ( eq. eques != "GET" && eq. eques != "HEAD" && eq. eques != "PUT" && eq. eques != "POST" && eq. eques != "TRACE" && eq. eques != "OPTIONS" && eq. eques != "DELETE") { /* Pe icion no exi en e en RFC2616*/ e u n (pipe); } i ( eq. eques != "GET" && eq. eques != "HEAD") { /*Solo cacheamos GET y HEAD*/ e u n (pass); } i ( eq.h p.Au ho iza ion || eq.h p.Cookie) { /*Si hay cookie o se negocia una conexion no cacheamos*/ e u n (pass); } #Con olamos que el se ido es a a iba i ( eq.backend.heal hy) { se eq.g ace = 30s; } else { /*Si Apache down, g ace y aguan amos los obj 1h*/ se eq.g ace = 1h; } e u n (lookup); } In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web La p ime a pa e del código es la que hace uso del mencionado módulo RPAF de Apache. Lo que hace es añadi en una cabece a de la pe ición que a a en ia al se ido web, la di ección IP del clien e que o iginó la pe ición en p ime a ins ancia. G acias a es o, como hemos comen ado an e io men e, las es adís icas de Apache son más comple as y se egis an los accesos con la IP que deben egis a se, y no con la del se icio Va nish, que es lo que sucede ía en caso de que no aplicá amos és a écnica. En segundo luga , nues o código comp ueba que la pe ición en an e se una que cumpla con el es ánda HTTP según el RFC2616. En caso con a io, se en iende que Va nish no a a se capaz de a a la pe ición, po lo que c ea una conexión di ec a en e clien e y se ido , es deci , se hace un pipe. El código que sigue se enca ga de in en a manda a cache an solo las pe iciones HEAD y GET, pues no esul a de in e és ni u ilidad po lo gene al in en a gua da en cache o os ipos de pe iciones como pueda se POST. También disc imina las pe iciones que ienen una cookie o que lle an la cabece a de negocio de conexión au ho iza ion. Si la pe ición cumple cualquie a de es as condiciones, se de i a á como un pass, es deci , no in en a á ecupe a la espues a de la cache. Po úl imo emos dónde se ealizan los heal h-checks que hemos de inido en la sección an e io . Tal y como puede e se, en caso de que Va nish decla e el se ido Apache caído, pond á los obje os pe ición en modo g ace du an e una ho a, es deci , se ob ia á el iempo TTL y se man end án los obje os elacionados con sus pe iciones du an e sesen a minu os, dando iempo al adminis ado a soluciona las incidencias écnicas. Como esul a e iden e, es e mecanismo debe á elimina se en caso de que un si io web no pueda se i con enido an iguo a los clien es. 6.4. cl_ e ch La unción cl_ e ch es la equi alen e a cl_ ec pe o po pa e del se ido web o backend. Mien as que en una podemos u iliza la di e en e in o mación p opo cionada po el clien e pa a ac ua en consecuencia con unas polí icas de cache u o as, en cl_ e ch enemos la di e encia de que el que nos p opo ciona in o mación ú il es el se ido web. En es a unción se aconseja hace las siguien es a eas: •Sob esc ibi el iempo que se man iene en cache un obje o de una URL de e minada. •Elimina las cabece as se -cookie que sean dispensables. •C ea un obje o hi _ o _pass. Den o de la unción enemos disponibles di e en es da os de la espues a, de los cuales el más impo an e y usado es be esp. l. Es a a iable asociada a un obje o espues a del se ido indica a Va nish du an e cuán o iempo se man end á el obje o gene ado en la cache. Po de ec o és e alo coincidi á con el alo que le hayamos asignado al se icio Va nish en el campo de aul _TTL. Pa a e mina la ejecución de es a unción enemos dos caminos di e en es. Po un lado podemos hace un e u n(deli e ), con lo cual Va nish en ia á al clien e su espues a y la gua da á en cache sí es posible. Po o o lado, enemos la opción de e mina con un e u n(hi _ o _pass). Es a ins ucción ha á que Va nish almacene en cache un obje o de ipo homónimo hi _ o _pass enlazado a la pe ición que lo gene ó. Es muy impo an e ene en cuen a 66 que el TTL del obje o hi _ o _pass se aplica como a un obje o no mal. De es e modo, cualquie pe ición pos e io que sea igual que la que gene ó és e obje o, sí en a a Va nish den o del iempo TTL del obje o, en a á en la unción pass( ) de o ma au omá ica. Es deci , c eando un hi _ o _pass es a emos almacenando en cache la decisión de que esas pe iciones hagan un pass du an e un pe iodo de iempo de e minado. 6.4.1 Código po de ec o A con inuación ilus amos la unción cl_ e ch( ) que incluimos po de ec o en nues o iche o VCL. La p ime a pa e de código de nues a unción hace que en caso de que el se ido web Apache con es e una pe ición con una cabece a se -cookie ma ca emos esa espues a como hi _ o _pass y la acción se eco da á pa a odas las pe iciones que gene en la misma espues a du an e los p óximos dos minu os. Es ex emadamen e ex año que se desee gua da en cache una espues a con una cabece a de ese ipo. Po úl imo, al inal del código podemos e como asignamos un alo de g ace de una ho a a odas las espues as que se gua den en cache. Reco demos que es e iempo solo se end á en cuen a en cuan o se caiga el se ido Apache. Mien as eso no suceda, el alo del a ibu o TTL es el que manda. 6.5. cl_hash En es a unción se de ine la cla e de dispe sión que se á usada pa a asocia un obje o en cache con la pe ición que le co esponde. En o as palab as, decide qué es único en una pe ición. Se ejecu a inmedia amen e después de cl_ ec . 67 Ilus ación 39: Código de la unción cl_ e ch( ) que u ilizamos po de ec o. sub cl_ e ch { i (be esp. l <= 0s || be esp.h p.Se -Cookie || be esp.h p.Va y == "*") { /* Ma camos como Hi Fo Pass du an e 2 min*/ se be esp. l = 120 s; e u n (hi _ o _pass); } /*Ac i amos modo g ace*/ se be esp.g ace = 1h; e u n (deli e ); } In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web Un posible uso de es a sección pod ía se añadi un nomb e de usua io conc e o pa a un obje o de la cache que sea de uso especí ico pa a ese usua io, sin emba go, es una p ác ica a iesgada pues de es a o ma dispe sa íamos mucho el con enido de la cache, pe diendo e icacia y e iciencia, ya que el obje i o es almacena en cache los obje os que eciban más pe iciones po pa e de los clien es en gene al, no de uno unicamen e. 6.5.1 Código po de ec o De allamos el código que u ilizamos pa a iden i ica un obje o espues a con su pe ición en la cache. El sencillo código de nues a unción de dispe sión de Va nish nos p opo ciona una solución e icaz pa a la mayo ía de sis emas. Las pe iciones se di e encian unas de o as según la URL y la cabece a hos (o la di ección IP de des ino en caso de que la pe ición no enga dicha cabece a). G acias a es o ob enemos un co ec o uncionamien o de la cache, e i ando la edundancia de obje os. 6.6. cl_hi El código de es a sección se ejecu a en cuan o un obje o se localiza con éxi o en la cache de Va nish. En es a unción se puede cambia el a ibu o TTL de un obje o, po ejemplo amplia el TTL en el caso de que nues o se ido Apache es é caído. También es la unción desde la que se pueden ealiza pu gas de los obje os, és o es elimina los de la cache. 68 Ilus ación 40: Código de la unción cl_hash( ) que incluimos po de ec o en el módulo. sub cl_hash { #U ilizamos la ULR de la pe icion hash_da a( eq.u l); #Y la cabece a HOST si exis e i ( eq.h p.hos ) { hash_da a( eq.h p.hos ); } else { #O la IP del se ido hash_da a(se e .ip); } e u n (hash); } 6.6.1 Código po de ec o En el caso de que el obje o se encuen e en la cache, nues o código simplemen e ac i a á la unción que se enca ga de en ega lo al clien e. 6.7. cl_miss Se ejecu a después de busca un obje o en la cache y no encon a lo. La p incipal unción que se le da a es a sección es ealiza la pu ga de los obje os de la cache. En e siones de Va nish an e io es, ambién se u ilizaba es a unción pa a modi ica las cabece as de las pe iciones que amos a en ia al se ido web, pe o ac ualmen e esas acciones se ealizan en cl_ ec . 6.7.1 Código po de ec o Al igual que ocu e con la unción hi ( ), el código de cl_miss( ) es muy sencillo pe o uncional. Cuando un obje o no se encuen a en cache, se ac i a la unción que se enca ga de pedi lo al se ido web Apache. 6.8. cl_pass Es a unción podemos engloba la en el mismo g upo que cl_hi y cl_miss. Su código se ejecu a después de que una búsqueda en cache o la unción cl_ ec de e minan que el obje o no se encuen a en cache, pe o que ampoco es posible cachea lo (po ejemplo si iene cookies de usua io). La u ilidad de es a unción es limi ada, pe o ípicamen e se puede u iliza pa a con ola aspec os que hayas implemen ado an o en cl_hi como en cl_miss. El uso más ex endido pa a es a unción es e i a que una pe ición de pu ga de la cache llegue a nues o se ido Apache. 69 Ilus ación 41: Código po de ec o que incluimos en la unción cl_hi ( ) sub cl_hi { e u n (deli e ); } Ilus ación 42: Código po de ec o que incluimos en la unción cl_miss( ). sub cl_miss { e u n ( e ch); } In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web 6.8.1 Código po de ec o Tal y como sucede con las ul imas dos unciones an e io es, el código de es a unción es básico y uncional. Lanza la pe ición al se ido como pass en el caso de que en cl_ ec ( ) se de uel a un pass o al busca el obje o co espondien e en la cache, és e es é ma cado como hi _ o _pass. 6.9. cl_deli e La unción de la que a amos aho a es el pun o de salida de la lógica de ejecución del iche o VCL pa a odas las unciones menos pa a cl_pipe. Su u ilidad es p incipalmen e es ea y debuguea , pues pe mi e modi ica di ec amen e la espues a que en ía Va nish al clien e, independien e de sí ha salido de cache o del se ido web Apache. Aquí podemos elimina cabece as HTTP que no nos in e esen, o añadi las que deseemos (que no hab emos añadido an es po que no que emos que se almacenen en cache). Las p incipales a iables que podemos modi ica en es a unción son las siguien es. • esp.h p.* Conjun o de cabece as que se an a en ia al clien e. Pueden añadi se o qui a se. • esp.s a us Código de es ado de la espues a HTTP (200, 404, 503, e c). • esp. esponse Mensaje de espues a, no malmen e asociado al código de la espues a (“Ok”, “File no ound”, “Se ice ena ailable”, e c). •obj.hi s Núme o de eces que se ha ob enido un obje o con éxi o de la cache. Puede se a ado como una cadena, po lo que no hab á que con e i ningún ipo de da os a o o pa a usa lo. • eq. es a s Nume o de einicios que ha p o ocado una espues a en la lógica VCL. 70 Ilus ación 43: Código po de ec o de la unción cl_pass( ). sub cl_pass { e u n (pass); } 6.9.1 Código po de ec o A con inuación de ilus a y explica el código po de ec o que hemos incluido en la unción cl_deli e ( ). Nues a unción cl_deli e ( ) ayuda al adminis ado a p oba la e ec i idad de la cache. Lo que hace es añadi en el obje o que se de uel e al clien e, una cabece a HTTP X-Cache que ald á MISS en el caso de que el obje o no se haya ecupe ado de la cache, o HIT en el caso de que sí se haya espondido a la pe ición con el obje o de cache. Además, añadimos el núme o de eces que se ha conseguido un acie o en el obje o, an es de que sea e i ado de memo ia cuando acabe su TTL. 6.10. cl_e o Tal y como el nomb e de la unción indica, es a unción se ejecu a cuando sucede un e o a la ho a de p ocesa una pe ición. Es posible gene a una página HTML sin é ica desde el código de es a sección, po lo que Va nish no iene po qué ecupe a esa página de e o que se le a a mos a al usua io de ningún se ido web conc e o. 6.10.1 Código po de ec o El código que incluimos en la unción de e o de Va nish es el mismo que o ecen en su documen ación como solución es ánda . La decisión esponde a que al se un mensaje de e o , es muy p obable que un adminis ado desee pe sonaliza lo y adap a lo a su si io web pa a mejo a lo máximo posible la expe iencia de los usua ios de su web en el caso de que se p oduzca una si uación de allo. 71 Ilus ación 44: Código po de ec o de la unción cl_deli e ( ). sub cl_deli e { i (obj.hi s > 0) { se esp.h p.X-Cache = "HIT "+obj.hi s; } else { se esp.h p.X-Cache = "MISS"; } e u n (deli e ); } In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web Tal y como puede ap ecia se, se a a de una página HTML sin é ica, es deci , que se gene a al uelo e incluye cie a in o mación e e en e al obje o que ha causado el e o . 72 Ilus ación 45: Código po de ec o de la unción cl_e o ( ). sub cl_e o { se obj.h p.Con en -Type = " ex /h ml; cha se =u -8"; se obj.h p.Re y-A e = "5"; syn he ic {" <?xml e sion="1.0" encoding="u -8"?> <!DOCTYPE h ml PUBLIC "-//W3C//DTD XHTML 1.0 S ic //EN" "h p://www.w3.o g/TR/xh ml1/DTD/xh ml1-s ic .d d"> <h ml> <head> < i le>"} + obj.s a us + " " + obj. esponse + {"</ i le> </head> <body> <h1>E o "} + obj.s a us + " " + obj. esponse + {"</h1> <p>"} + obj. esponse + {"</p> <h3>Gu u Medi a ion:</h3> <p>XID: "} + eq.xid + {"</p> <h > <p>Va nish cache se e </p> </body> </h ml> "}; e u n (deli e ); } 7. P uebas de uncionamien o 7.1. P uebas de uncionamien o del módulo Pa a pode comenza a p oba nues o módulo, debemos p epa a el sis ema pa a c ea un en o no donde podamos obse a con ce eza si el módulo ealiza co ec amen e sus a eas o no. Po es e mo i o p ocedemos a a anca nues a máquina i ual y nos conec a emos al panel Webmin que ya ae p eins alado. El p ime paso que hemos hecho ha sido pone el se ido web Apache a espe a pe iciones en la di ección IP de nues a máquina i ual y en dos pue os, en el 80 y en el 443. Pa a consegui lo podemos p ocede de dos o mas di e en es. Una de ellas es edi a a mano el iche o de Apache donde de se especi ica en qué di ecciones y pue o a a escucha pe iciones. Y la o a o ma es a a és de la in e az g á ica que nos o ece Webmin pa a con igu a Apache. Independien emen e del mé odo que decidamos u iliza , los esul ados se án los mismos, pues lo que hace la in e az g á ica a ni el in e no, es p ecisamen e modi ica el iche o localizado en /e c/h pd/con /, po eso amos a ilus a cómo hace lo desde el en o no g á ico pa a pos e io men e e los cambios en el iche o. Sabiendo és o, amos al menú desplegable de Webmin llamado “Se ido es” y hacemos clic en “Se ido web Apache”. Una ez ahí, pinchamos sob e la pes aña “Global con igu a ion”, en la que nos apa ece án odas las opciones de Apache. Aquí pulsa emos sob e el icono de “Redes y di ecciones” pa a accede al menú desde el cual edi a las di ecciones en las que se encuen a Apache, al y como se e en la igu a 46. Una ez aquí, en la sección del o mula io donde dice “Escucha en di ecciones y pue os”, in oduci emos la di ección IP de nues a máquina y en el cuad o de pue o pond emos el pue o 80. Ha emos lo mismo en el ecuad o in e io , solo que es a ez pond emos el pue o 443. Po úl imo ha emos clic en el bo ón in e io pa a sal a los da os de con igu ación. 73 Ilus ación 46: Cap u a del o mula io de con igu ación de "Redes y di ecciones" de Apache. In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web Como podemos obse a , el obje o se encuen a en cache. Es momen o de desconec a Apache: Aho a, con Apache desconec ado, espe amos más de 120 segundos, que es el iempo TTL de los obje os en cache que hemos pues o po de ec o. Una ez pase ese iempo, lanzamos o a pe ición equi alen e al hos “p ueba.com”. Fijándonos en la imagen 57, podemos e como se ha compo ado el p oxy in e so an e la caída del se ido web. Nos ha con es ado a la pe ición con el obje o que enía en cache, pe o si nos ijamos en la cabece a “Age: 135” emos que ese alo es supe io al máximo de 120 es ablecido po de ec o. Es o sucede po que al desconec a Apache, Va nish pone los obje os de la cache en es ado g ace, el cual hemos especi icado que aguan e du an e una ho a si iendo el con enido cacheado. Cuando un obje o es á en es ado g ace, su a ibu o TTL es omi ido, y se man iene en cache an o iempo como hayamos indicado al a ibu o obj.g ace. Sí po el con a io, ealizamos una pe ición HTTP al hos “p ueba.es”, cuyo obje o de espues a no se encon aba en la cache an es de umba Apache, emos como e ec i amen e Va nish nos esponde con un e o , pues no es capaz de se i nos el obje o solici ado ni desde la cache ni (e iden emen e) desde el se ido web desconec ado . 80 Ilus ación 56: O den de pa ada al se icio de Apache. Ilus ación 57: Lanzamien o de la segunda pe ición al hos "p ueba.com" ue a del iempo TTL es ablecido. Como hemos podido comp oba con las p uebas ealizadas, an o nues o módulo de in eg ación, como la con igu ación VCL que incluimos po de ec o unciona co ec amen e. 81 Ilus ación 58: Respues a de e o que nos de uel e Va nish al no pode sa is ace nues a pe ición po ningún medio. In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web 82 8. Conclusión El desa ollo de es e p oyec o nos ha enseñado cómo a la ez que la ecnología e oluciona, an apa eciendo nue as necesidades po cub i . Es pa e de nues a o mación como ingenie os el descub i , abo da y ap o echa esas necesidades de la o ma más e icien e y e icaz posible. He ap endido cómo desa olla un módulo pa a el panel de con ol Vi ualmin. Que además, es capaz de añadi nue as he amien as al sis ema y con igu a las pa a que abajen en a monía con odos los demás componen es. Mejo ando las p es aciones y se icios de sis emas ampliamen e u ilizados en el sec o . Al mismo iempo, hemos enido que ap ende a desa olla una solución lo más gené ica posible, eniendo que decidi donde pone el lími e en cie as con igu aciones, pa a no educi el núme o de po enciales bene iciados de nues o desa ollo. A ni el pu amen e o ma i o, he enido que ap ende un nue o lenguaje de p og amación, Py hon, que nunca había u ilizado an es en odos los años de o mación académica. También he conseguido sen i me cómodo u ilizando la he amien a Va nish Cache, de la que nunca an es había oído habla . Y en gene al, he ap endido las bases del uso de cualquie p oxy in e so y he mejo ado mucho mis habilidades de abajo con se ido es web. Al inal hemos conseguido cumpli el obje i o, adqui iendo nue os conocimien os y mejo ando los que ya eníamos po el camino. La sa is acción ecibida po el abajo bien ealizado nos anima a segui a on ando e os, sin impo a de qué magni ud sean, po que g acias a ello c ece emos como ingenie os y como pe sonas. 8.1. T abajo u u o Pese a habe cumplido el obje i o del p oyec o, la na u aleza de nues o desa ollo hace que és e enga innume ables posibilidades de ampliación y mejo a. Desde añadi más uncionalidades, has a amplia la compa ibilidad con más en o nos. Una posible ía de mejo a se ía que el módulo leyese la con igu ación y a qui ec u a del sis ema pa a ajus a el se icio Va nish au omá icamen e lo máximo posible, sin que el adminis ado enga que oca nada. Es o nos pe mi i ía omi i muchos alo es po de ec o iniciales. O a suge encia pa a mejo a nues o desa ollo puede se añadi a la in e az de nues o módulo una nue a en ana en la que el adminis ado pueda e el es ado del se icio Va nish Cache en iempo eal, así como es adís icas o a isos impo an es de e o es. Una úl ima posibilidad de ampliación que se es u o ba ajando es la de inclui un amplio abanico de iche os VCL po de ec o, cada uno espondiendo a las necesidades de di e en es si ios web ipo. De es a o ma, el adminis ado an solo end ía que elegi qué ipo de si io web es á alojando en su se ido pa a consegui una con igu ación po de ec o algo más adap ada a sus necesidades. 83 In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web 84 9. Re e encias [1] In e ne Li e S a s. To al numbe o websi es. [úl ima consul a 20/05/2015] h p://www.in e ne li es a s.com/ o al-numbe -o -websi es/ [2] Ne c a L d. Web Se e Su ey. [úl ima consul a 20/05/2015] h p://news.ne c a .com/a chi es/ca ego y/web-se e -su ey/ [3] Cen OS.o g. Wiki Cen OS. [úl ima consul a 15/06/2015] h p://wiki.cen os.o g/ [4] Py hon So wa e Founda ion. [úl ima consul a 16/06/2015] h ps://www.py hon.o g/ [5] Py hon So wa e Founda ion. Wiki Py hon. [úl ima consul a 16/06/2015] h ps://wiki.py hon.o g/ [6] Apache So wa e Founda ion. Wiki Apache. [úl ima consul a 16/06/2015] h p://wiki.apache.o g/gene al/ [7] Apache So wa e Founda ion. [úl ima consul a 16/06/2015] h p://h pd.apache.o g [8] Ku ose, James F. y Ross, Kei h w (2010). Redes de compu ado as. Un en oque descenden e (5a ed). Mad id: Pea son. [úl ima consul a 1/07/2015] [9] Webmin. Webmin documen a ion. [úl ima consul a 16/06/2015] h p://dox e .webmin.com/Webmin/In oduc ion/ [10] Webmin. Webmin modules. [úl ima consul a 16/06/2015] h p://dox e .webmin.com/Webmin/Webmin_Modules/ [11] Vi ualmin Inc. Specs Compa a ion. [úl ima consul a 20/06/2015] h ps://www. i ualmin.com/compa e.h ml [12] Va nish So wa e. Wiki Va nish. [úl ima consul a 5/07/2015] h ps://www. a nish-cache.o g/ ac [13] Va nish So wa e. Main. [úl ima consul a 20/06/2015] h ps://www. a nish-cache.o g [14] Va nish So wa e. Wo king wi h i ual hos s. [úl ima consul a 26/06/2015] h ps://www. a nish-so wa e.com/blog/ge ing- i ual-hos s- igh - a nish-cache [15] S ackExchange. P og ame s sec ion. [úl ima consul a 20/06/2015] h p://p og amme s.s ackexchange.com/ques ions/83818/wha -does-p oxy- o-mean [16] CCM.ne . Di e encias en e po xy y p oxy in e so. [úl ima consul a 16/06/2015] 85 In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web h p://es.ccm.ne /con en s/297-se ido es-p oxy-y-se ido es-de-p oxy-in e sos [17] Apache So wa e Founda ion. Name-based Vi ual hos ing. [úl ima consul a 20/06/2015] h p://h pd.apache.o g/docs/cu en / hos s/name-based.h ml [18] Apache So wa e Founda ion. Vi ualHos Examples. [úl ima consul a 1/07/2015] h p://h pd.apache.o g/docs/2.2/ hos s/examples.h ml [19] Apache So wa e Founda ion. Module Index. [úl ima consul a 1/07/2015] h p://h pd.apache.o g/docs/2.2/mod/ [20] Igo Pa lo . 7-zip main si e. [úl ima consul a 21/06/2015] www.7-zip.o g/ [21] Na e Haug. Con igu ing Va nish o high a aliabili y. [úl ima consul a 30/06/2015] h ps://www.lullabo .com/a icles/con igu ing- a nish- o -higha ailabili y-wi h- mul iple-web-se e s [22] Va nish So wa e. O icial Va nish 3.0 Docs. [úl ima consul a 4/07/2015] h ps://www. a nish-cache.o g/docs/3.0/index.h ml [23] Kwalsh. Online Py hon In e p e e . [úl ima consul a 25/06/2015] h p://ma hcs.holyc oss.edu/~kwalsh/py hon/ [24] Blackhold. Con igu ando Apache pa a al o endimien o. [úl ima consul a 30/06/2015] h p://blackhold.nusepas.com/2010/05/con igu ando-apache-pa a-la-gue a-al o- endimien o/ [25] Va nish So wa e. VCL Examples. [úl ima consul a 3/07/2015] h ps://www. a nish-cache.o g/ ac/wiki/VCLExamples [26] Va nish So wa e. 1O common Van ish mis akes. [úl ima consul a 3/07/2015] h ps://www. a nish-so wa e.com/blog/10- a nish-cache-mis akes-and-how- a oid- hem [27] S acko e low. Va nish Hi o Pass meaning. [úl ima consul a 26/06/2015] h p://s acko e low.com/ques ions/12691489/ a nish-hi - o -pass-means [28] Ned P oduc ions L d. A pe ec con igu ed Va nish VCL. [úl ima consul a 4/07/2015] h p://www.nedp oduc ions.biz/wiki/a-pe ec ed- a nish- e e se-caching-p oxy- cl-sc ip [29] Va nish So wa e. Why no SSL? [úl ima consul a 21/06/2015] h ps://www. a nish-cache.o g/docs/3.0/phk/ssl.h ml [30] Buil Wi h P y L d. Web se e usage s a is ics. [úl ima consul a 2/07/2015] h p:// ends.buil wi h.com/web-se e 86 [31] Vi ualmin Inc. Open Sou ce Web Hos ing and Cloud Con ol Panels [úl ima consul a 4/07/2015] h p://www. i ualmin.com/ [32] Wessels Duane (2001). Web caching. O'Reilly [úl ima consul a 5/07/2015] [33] Va nish So wa e. The Va nish Book. [úl ima consul a 5/07/2015] 87 In eg ación de un p oxy in e so Va nish Cache con un panel de con ol Vi ualmin pa a c ea una pla a o ma de se icios de hospedaje Web 88 89