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