scieee Science in your language
[Es] (orig)

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

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, open source, 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 NGINX en su modialidad de proxy inverso de forma que se pueda gestionar de forma transparente desde el panel de control Virtualmin. El desarrollo se realizará en máquinas virtuales para tener mayor flexibilidad. Se realizarán inicialmente configuraciones manuales, se afinarán los parámetros de configuración y posteriormente se diseñarán scripts de automatización. Se utilizará el S.O. Linux con distribución CENTOS.

Read accessible full text

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

Author: Molina Coronado, Borja
Publisher: Universitat Politècnica de València
Year: 2015
Source: https://riunet.upv.es/bitstream/10251/54167/2/MOLINA%20-%20Integraci%c3%b3n%20de%20un%20proxy%20inverso%20NGINX%20con%20un%20panel%20de%20control%20Virtualmin%20para%20crear%20una%20....pdf
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 NGINX
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 : Bo ja Molina Co onado
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 web, open sou 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 NGINX en su modalidad de
p oxy in e so, de mane a que se pueda ges iona de o ma anspa en e desde el panel de con ol
Vi ualmin. El desa ollo se ha ealizado en una máquina i ual pa a ene mayo lexibilidad.
Inicialmen e se han analizado las he amien as y diseñado los sc ip s de au oma ización que
ealizan odas las con igu aciones. Todo ello, bajo el S.O. Linux con dis ibución Cen OS.
Palab as cla e: NGINX, Apache, se ido i ual, Py hon, Vi ualmin, WebMin,
in eg ación, p oxy in e so, Linux, CENTOS.
Abs ac
The use o a e e se p oxy is a echnique ha allows you o imp o e he pe o mance and
dec ease he se e s load while he compa ibili y wi h he mos popula web se e s like Apache
is kep . Vi ualmin GPL is an open sou ce con ol panel and hos ing manage ha allows you o
c ea e and con igu e au oma ically all esou ces associa ed wi h an Apache based hos ing web.
The pu pose o his p ojec is o ins all his so wa e on a se e and in eg a e i wi h NGINX in
e e se p oxy mode, so i can be managed in a anspa en way om Vi ualmin. The
de elopmen has been made on a i ual machine o g ea e lexibili y. Ini ially he ools ha e
been analyzed and hen he au oma iza ion sc ip s ha make all he con igu a ions ha e been
designed. All o his was done using Cen OS Linux Ope a ing Sys em dis ibu ion.
Keywo ds : NGINX, Apache, i ual se e , Py hon, Vi ualmin, WebMin, in eg a ion,
e e se p oxy, Linux, CENTOS.
3
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
4
Tabla de con enidos
1.In oducción...................................................................7
1.1.Obje o.............................................................................................7
2.Con ex o ecnológico......................................................9
2.1.Vi ualMin......................................................................................9
2.2.NGINX..........................................................................................10
2.3.Apache..........................................................................................11
2.4.Cen OS.........................................................................................12
2.5.Py hon..........................................................................................13
3.Desc ipción del p oblema............................................15
3.1.Esquema inicial del se ido .......................................................15
3.2.Esquema con p oxy in e so.........................................................16
3.3.Esquema obje i o.........................................................................17
4.Implemen ación...........................................................19
4.1.Análisis de Vi ualMin.................................................................19
4.2.Análisis de Apache.......................................................................21
4.3.Desa ollo....................................................................................22
4.3.1con . ile....................................................................................................................................23
4.3.2Lib e ia nginxRe e selib.py....................................................................................................24
4.3.3Sc ip ApaCon .py..................................................................................................................27
4.3.4Sc ip Ap2Nginx.py................................................................................................................31
4.3.5Con igu ación de Vi ual Se e s en NGINX.........................................................................33
4.3.6Módulo pa a Webmin..............................................................................................................44
5.P uebas........................................................................53
5.1.Sis ema p oxy in e so..................................................................53
5.2.Comp esión de ecu sos..............................................................57
5.3.Cache NGINX...............................................................................58
5

In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
6.Conclusiones................................................................61
6.1.T abajo u u o..............................................................................61
7.Re e encias..................................................................63
Anexos.............................................................................67
Anexo 1: Análisis es adís ico.............................................................67
Clase Main.ja a...............................................................................................................................68
Clase Desca gaWeb.ja a.................................................................................................................71
Clase TCPCon.ja a.........................................................................................................................73
Clase Pe icion.ja a...........................................................................................................................75
Anexo 2: Análisis comp esion GZIP...................................................77
Anexo 3. Gene ación de cla e RSA y ce i icado au o i mado..........78
6
1. In oducción
Hoy en día, el campo de las ecnologías de la in o mación (IT po sus siglas en inglés) pone de
mani ies o su impo ancia en el ámbi o de los negocios, acili ando aspec os ales como: gana
isibilidad en el me cado, mejo a la e iciencia y p opo ciona soluciones ecnológicas en base a
las necesidades especi icas de cada uno de ellos.
Pa a cub i algunas de es as necesidades han su gido en los úl imos años dis in as al e na i as a las
que ya se encon aban implan adas. Es e auge de soluciones ecnológicas ha p o ocado que es as
he amien as ya a aigadas engan que abaja en a monía con las nue as aplicaciones que se han
enido desa ollando a lo la go del iempo. Además, se han ido implan ando de o ma pa alela
paneles so wa e como Vi ualMin —a un ni el más al o— acili ando la con igu ación y
au oma izando muchas de las a eas necesa ias pa a desplega dichas soluciones en los cen os de
da os. Es e es uno de los mo i os po los que la in eg ación de aplicaciones so wa e que u ilizan
ecnologías dis in as se ha con e ido en una de las esponsabilidades mas des acadas den o del
campo de la in o má ica e In e ne .
Esa o e de babel de ecnologías y p o ocolos de ansmisión de da os, que llamamos In e ne ,
donde la lengua que mayo i a iamen e se habla desde 1990 es el p o ocolo de ans e encia de
hipe ex o (HTTP), desa ollado po el conso cio Wo ld Wide Web (W3C de sus siglas en inglés) y
es anda izado po la In e ne Enginee ing Task Fo ce (IETF), es el que se u iliza en la web
siguiendo un modelo de a qui ec u a clien e-se ido , en el que el p og ama se ido es quien
ecibe las pe iciones de los usua ios, que se án los que den inicio a la conexión. Pues o que cada
clien e puede ab i una o a ias conexiones sob e el mismo se ido pa a ecibi la in o mación
solici ada, uno de los g andes incon enien es de es a a qui ec u a es la cen alización de la
in o mación.
La u ilización de un p oxy HTTP in e so es una écnica anspa en e pa a los clien es que ealicen
pe iciones al se icio, p opo cionando mejo as en el endimien o y educción en la ca ga de los
se ido es a la ez que se man iene compa ibilidad con las aplicaciones de se ido web más
ex endidas, como po ejemplo Apache. Es a es una de las p incipales azones po las que es e ipo
de despliegues comienza a oma un papel impo an e den o de las a qui ec u as de ed de las
emp esas de se icios de In e ne , que comienzan a e negocio en las posibilidades que o ece,
come cializando soluciones segu as, dis ibuidas y e icien es; aunque, pueden llega a se
complejas de ges iona .
1.1. Obje o
Debido a la expansión den o del campo de las ecnologías de la in o mación que es a
expe imen ando el se ido NGINX, aumen a a su ez la necesidad de p opo ciona he amien as
que acili en el manejo y la ges ión de es e p oduc o. G acias a es a ama que el se ido ha
alcanzado —sob e odo en su modalidad como p oxy in e so—, y debido a la complejidad de
in eg ación con Apache y la ausencia de soluciones desa olladas —ya que no exis en módulos
que cub an es as a eas pa a los paneles de ges ión opensou ce como son Webmin o Vi ualMin—,
7
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
su ge la necesidad de implemen a una se ie de he amien as que cumplan con es e come ido,
e i ando al adminis ado la labo iosidad de ealiza a mano odas y cada una de la ope aciones
eque idas.
La inalidad de es e p oyec o es in eg a NGINX de o ma que abaje como se ido p oxy
in e so conjun amen e con Apache, y más conc e amen e con los dis in os se ido es i uales
ges ionados desde un panel de con ol Vi ualMin. Pa a ello, se desa olla á un módulo con una
in e az in ui i a y que se á capaz de ealiza odas las a eas necesa ias pa a desplega dicha
con igu ación en el se ido sin in e e i con los dis in os se icios que pueda habe en
uncionamien o en el sis ema, p opo cionando anspa encia y agilidad en su ges ión.
El desa ollo se ealiza á usando una maquina i ual, es o es, una aplicación en un sis ema
in o má ico que emula un o denado ísico, p opo cionando agilidad y aislamien o al desa ollo.
Es e emulado dispone de una ins alación del sis ema ope a i o de código abie o Linux Cen OS
en su e sión 6.6. Es e sis ema ope a i o, además de las he amien as y ecnologías u ilizadas,
se án a ados con mas de alle en el pun o 2, donde se explica el con ex o ecnológico del p esen e
abajo pa a acili a al lec o su comp ensión.
Además se de alla el p ocedimien o lle ado a cabo pa a la c eación del módulo. Desde los sc ip s
de au oma ización de las a eas habi uales de ins alación del se ido NGINX y las he amien as
necesa ias pa a que uncione jun o con Apache, has a la ins alación del módulo c eado pa a el
panel de con ol, pasando po las con igu aciones necesa ias pa a que ambos se icios abajen en
sin onía.
8
2. Con ex o ecnológico
2.1. Vi ualMin
Basado en el panel web de código abie o pa a adminis ación de sis emas Webmin, Vi ualmin ha
conseguido posiciona se como una al e na i a lib e y iable a paneles de con ol de pago como
cPanel o Plesk pa a la ges ión de múl iples se ido es web Apache. Exis en dos modalidades de la
aplicación: una g a ui a y o a come cial, siendo la misma he amien a pe o con sopo e o ecido
po la emp esa Vi ualMin LLC.
Concebido pa a acili a la ges ión de a eas de hos ing, cen alizando en una pagina web con una
in e az g á ica de usua io (GUI po sus siglas en Inglés) amigable la adminis ación de odos los
si ios web alojados po un se ido — ambién llamados Vi ual Se e s—. Un ejemplo de su
in e az puede obse a se en la igu a 1, en la que se mues a la pan alla de con igu ación de un
se ido i ual de Apache.
Como se puede e en la imagen, p opo ciona mé odos sencillos pa a la ges ión de se ido es
i uales den o de una misma máquina median e la isualización de menús y o mula ios en los
que se pueden indica los dis in os ajus es, enca gándose po sí mismo de o ma anspa en e pa a
el adminis ado , de odas las a eas necesa ias pa a su c eación y con igu ación.
9
Figu a 1 – WebMin GUI pa a con igu ación del Vse e p ueba.com
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
adminis ación emo a. En es a implemen ación, es el se ido quien se enca ga di ec amen e de
se i odas las pe iciones HTTP que le llegan desde in e ne con des ino a su IP.
3.2. Esquema con p oxy in e so.
Una ez conocemos la con igu ación ípica de un se ido web como la que disponemos pa a el
desa ollo, es necesa io explica de qué se compone su a ian e con p oxy in e so. Pe o pa a ello,
se hace necesa io explica cómo uncionan es e ipo de se ido es.
Un p oxy es un elemen o in e medio en e los clien es y el se ido que ac úa como se ido pa a
el clien e —la di ección des ino en la cabece a IP se á la del p oxy, y la de o igen, la del clien e
o iginal—; es o es, como des ino de odas las pe iciones que el clien e en ía hacia el se ido web,
y como clien e pa a el se ido web, es deci , como o igen de odas las pe iciones que és e ecibe
—la di ección o igen en la cabece a IP es la del p oxy y la de des ino la del se ido web, en
nues o caso Apache—, siendo es e p oceso o almen e anspa en e pa a los usua ios [31][44].
Además, es e ipo de se icios poseen la capacidad de almacena obje os en memo ia, lo que e i a
ealiza pe iciones pa a esos ecu sos al se ido . Es e ipo de diseños hacen las unciones de
cache web, p opo cionando mejo as en el endimien o alige ando la ca ga de un se ido web
debido al g an núme o de pe iciones que puede ecibi .
A di e encia de una con igu ación p oxy no mal, los su oga es o p oxy in e sos se si úan en las
edes in e nas de los se ido es web y no en las edes de los clien es. Es a di e encia adica en el
p opósi o del p oxy, ya que en la ed del clien e se u ilizan p incipalmen e pa a il a y ealiza
unciones de moni o ización de á ico, y en cambio, un p oxy in e so es una o ma más e icaz de
alige a la ca ga de los se ido es web acele ando los iempos de espues a.
En compa ación con el esquema inicial mos ado en la igu a 4, es e diseño le o o ga un g ado de
complejidad al y como puede e se en la igu a 5.
De es a o ma, el ga eway se á el que ecibe oda la ca ga que a des inada al se ido Apache (el
se ido web) y esponde á a odas la pe iciones —capacidad po la cual ambién son llamados
acele ado es web o su oga es—. En caso de que el p oxy no disponga de ninguna copia en
16
Figu a 5. Diseño ed con P oxy

memo ia cache del obje o solici ado o la copia que iene no es é ac ualizada, en ía una solici ud al
se ido o iginal pa a ob ene el ecu so. Una ez el su oga e ha ecibido la espues a de Apache,
és e almacena una copia en memo ia pa a que disponga de ella en la siguien e ocasión, y
inalmen e, lo een ía al clien e que lo solici ó o iginalmen e. Además, es as copias no son
pe manen es ya que ienen un pe iodo de alidez as el cuál son bo adas, e i ando así la mala
ges ión po despe dicio de memo ia.
Así, el mecanismo de p oxy in e so p incipalmen e esuel e un incon enien e, el al o iempo
medio de espues a de Apache en e a NGINX debido al g an núme o de componen es que
Apache sopo a y que ca ga en memo ia, lo que e a ec ado su endimien o, consumiendo mas
CPU y memo ia RAM po cada pe ición que ecibe.
3.3. Esquema obje i o.
O a a ian e ( éase igu a 6), que su ge como esul ado de una mezcla en e los dos esquemas
an e io es y en la que podemos dispone de ambos se icios (su oga e y se ido web) ins alados
en el mismo equipo, es la que se desa olla a lo la go de es e abajo. Es e ipo de diseño elimina la
necesidad de habili a dos máquinas dis in as pa a albe ga cada uno de los se icios,
simpli icando el esquema —aunque no la con igu ación—.
En es e diseño el su oga e, NGINX en nues o caso, se encuen a ins alado en el mismo equipo
que el se ido web Apache, con la ca ac e ís ica undamen al de que el se icio que ha de
pe manece a la espe a de pe iciones HTTP en el pue o 80 es el p oxy —en ealidad es o no es
obliga o io ya que se pueden u iliza écnicas como el Po Fo wa ding ( edi ección de pue os)
siemp e y cuando se edi eccione desde el pue o 80 (po de ec o HTTP) hacia el pue o en que se
encuen a el p oxy—, y el se ido web (Apache) se con igu a en cualquie o o pue o al e na i o
en el cuál ecibe las pe iciones p oceden es del su oga e.
Así, a modo de esumen, la con igu ación del se ido queda de la siguien e o ma:
17
Figu a 6. Esquema con se ido p oxy y web en la misma máquina
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
•NGINX con igu ado pa a a ende pe iciones HTTP en el pue o 80 de la IP
192.168.15.128
•Apache con igu ado a la espe a de solici udes HTTP en el pue o 9080 de la IP en la
que se encuen en con igu ados los se ido es i uales, que son mencionados más
adelan e (po de ec o 192.168.15.128).
•Webmin con el módulo Vi ualMin ins alado y p epa ado en el pue o 10000 de la IP
192.168.15.128
El obje i o de es e esquema es que NGINX sea el que esponda odas las pe iciones si iendo el
con enido es á ico, ya sean imágenes o documen os HTML (Hipe Tex Ma kup Language)2,
mien as que odo el con enido que sea gene ado de o ma dependien e de los da os de la pe ición
po medio de CGIs (dinámico), se án solici adas al se ido Apache desde el p oxy.
Así, del pá a o an e io se puede deduci que NGINX unciona á como un se ido web no mal
—al ma gen de Apache— pa a odo el con enido es á ico, es o es posible ya que el se icio se
encuen a en el mismo equipo que los ecu sos que con o man las webs, pe mi iendo al su oga e
accede al disco du o pa a su lec u a de una o ma mas e icien e, debido al uso de unciones
na i as del sis ema ope a i o, y pos e io en ío hacia el clien e. Además, NGINX se á el
enca gado de ci a y comp imi odas las comunicaciones pues, en es as a eas, es ambien más
e icaz que Apache.
Po o o lado, Apache —que ambien se encuen a ins alado en el mismo se ido —, se á el
enca gado de ecibi desde NGINX las pe iciones de los clien es pa a odo el con enido dinámico,
es deci , aquel con enido que se gene a en base a alguno de los alo es incluidos en la pe ición, ya
sea en las cabece as o en el cue po de la misma. De es a o ma, Apache sólo se ocupa á de una
pa e mínima de odo el con enido que compone las webs alojadas en el se ido , y NGINX
almacena á en su memo ia cache aquellos ecu sos p e iamen e gene ados po Apache, que se
enca ga á de ecupe a y ansmi i a los clien es en caso de que és os uel an a se solici ados,
ac uando así, como un p oxy o acele ado web.
2 Lenguaje de ma cas pa a c ea con enido web. Mas in o mación en [42]
18
4. Implemen ación
En p ime luga , se ha es udiado el uncionamien o in e no de Vi ualMin, así como sus iche os
de con igu ación y ejecu ables, con el obje i o de conoce qué iche os son necesa ios pa a su
lec u a o modi icación po pa e de la he amien a desa ollada. Del mismo modo en que se ha
es udiado el uncionamien o del panel, ambién se han analizado y comp endido los iche os de
con igu ación de Apache, que el p opio Vi ualMin modi ica en unción de las acciones que el
adminis ado ealice desde la in e az del panel.
Pa iendo del análisis p e io, se ha p ocedido a desa olla los sc ip s de au oma ización en Py hon
que ealizan la in eg ación, y pos e io men e, se ha hecho un simple análisis es adís ico, median e
el uso de una sencilla aplicación desa ollada en Ja a, pa a deduci con qué alo es con igu a
NGINX de la o ma más e icien e posible.
Po úl imo, haciendo uso de odo lo desa ollado de o ma p e ia, se ha c eado un módulo pa a el
panel de con ol Webmin que posibili e de o ma anspa en e, desde la in e az, la in eg ación de
NGINX en modo p oxy in e so con Apache pa a los se ido es i uales o webs ges ionados
desde Vi ualMin.
4.1. Análisis de Vi ualMin
El p ime paso en el desa ollo ha sido in es iga el uncionamien o in e no de Vi ualMin, los
iche os que emplea, en los cuáles se almacenan los da os de con igu aciones de los se ido es
i uales que pueden se ges ionados desde el panel y los ejecu ables que se lanzan cuando el
adminis ado ealiza una acción en el mismo. De es a o ma y conociendo el uncionamien o de
las he amien as en las que debíamos in eg a nues o desa ollo, nues a aplicación es capaz
in e acciona con Vi ualMin modi icando el con enido de los iche os necesa ios sin in e umpi
el co ec o uncionamien o del panel de con ol.
El di ec o io de ins alación de Vi ualMin en Cen OS es /us /libexec/webmin/ i ual-
se e /. Es o se debe a que, en ealidad, Vi ualMin no es mas que un módulo de Webmin
llamado i ual-se e , que aumen a las capacidades del panel, lo que hace necesa io que
és e úl imo se encuen e ins alado en el sis ema pa a que Vi ualMin uncione.
En el in e io del di ec o io de ins alación de Vi ualMin encon amos los a chi os ejecu ables que
el panel lanza cuando el adminis ado ealiza alguna acción desde la in e az web, es o son: los
CGI, los a chi os con las con igu aciones de los CGI, y los iche os necesa ios pa a que Webmin
in e p e e co ec amen e el módulo.
De la misma o ma que el di ec o io con los ejecu ables (CGI) se encuen a bajo el di ec o io de
Webmin, den o de /e c/webmin/ se localilzan los di ec o ios con iche os de con igu ación de
los módulos ins alados en dicho panel y, po lo an o, ambién se encuen a el di ec o io
co espondien e pa a Vi ualMin, cuya u a es /e c/webmin/ i ual-se e /.
19
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
Den o de es e di ec o io, el a chi o mas impo an e es el iche o con ig, cuyo con enido es un
a ibu o de con igu ación con su alo asignado en cada linea, éase la igu a 7. Es e iche o es
ca gado en una a iable de ipo hash3 (dicciona io) cuando cualquie CGI del módulo ealiza una
llamada a la unción ini _con ig(), y además, es u ilizado po el panel de con ol pa a
pe mi i que los ajus es de con igu ación sean edi ables po el adminis ado , como son las u as
hacia o os iche os de con igu ación u o as opciones pa a con ola el compo amien o del
módulo.
Es en es e iche o en el que se encuen a la con igu ación de la plan illa po de ec o que
Vi ualMin asigna en la c eación de los dis in os se ido es i uales pa a Apache, po lo que
nues os sc ip s deben modi ica es os alo es con o me a los eque imien os del adminis ado .
Figu a 7. Ex ac o del iche o con ig de Vi ualMin modi icado
Ya analizados cuáles son los luga es en que se encuen an los iche os de ins alación y
con igu ación del panel de con ol, es impo an e ealiza una b e e desc ipción de cuál es el
compo amien o gene al del panel pa a en ende mejo su uncionamien o.
Una ez el equipo con el panel es pues o en ma cha, enemos una web de ges ión disponible desde
la que pod emos u iliza lo, indicando en el na egado la di ección IP del se ido y el pue o en
que se encuen e uncionando el se icio, que es el enca gado de mos a el esul ado de los CGI
que con o man el panel —pues es os, al in y al cabo son ejecu ables—. Es o es, el pue o 10.000
po de ec o, quedando la u l en nues o se ido de p uebas como sigue
h ps://192.168.15.128:10000. Véase igu a 8.
3 Es uc u a de da os e icien e — ambién llamada a ay asocia i o— en la que puede accede se a su con enido di ec amen e a
a és de una cla e “única” que iene asociado un alo .
20
Figu a 8. Acceso de Webmin en el se ido
backup_ ea u e_log o a e=1
mysql_chg p=1
log o a e_con ig= o a e 5 weekly comp ess pos o a e [ ! -
/ a / un/nginx.pid ] || kill -USR1 `ca / a / un/nginx.pid`
/e c/ c.d/ini .d/h pd g ace ul ; sleep 5 endsc ip sha edsc ip s
show_sysin o=2
a ail_mailboxes=1
de o ceunde =0
alias_ ypes=1,2,5,6,7,8,9,10,11,12,13
spam_lock=0
key_size=2048
webmin_ssl=0
Es p eciso señala que cuando iniciamos sesión en el panel se ealiza el mismo p oceso que cuando
hacemos login en el equipo, es deci , se consul an los usua ios egis ados en el se ido
(con enidos po el iche o /e c/shadow) pa a pe mi i nos con ola el equipo.
A con inuación de que hemos iniciado la sesión en el equipo, el se ido web p opio de Webmin
si uado en el pue o 10.000, se á el enca gado de lee del disco du o el CGI de inicio del panel,
ejecu a lo y de ol e nos el esul ado que el na egado es el enca gado de ep esen a en pan alla.
Es e p oceso se epi e pa a odos los p og amas ejecu ables que con o man el panel y que sean
demandados po el adminis ado desde el na egado median e los clics que és e ealice en la
in e az.
Cada uno de es os ejecu ables es a compues o po ó denes esc i as en un lenguaje de
p og amación conc e o, que el se ido in e p e a, ecogiendo el esul ado y e o nándolo al o igen
de la pe ición. Po de ec o, odos los CGI de Vi ualMin es án implemen ados en Pe l, pe o se
o o ga al desa ollado la libe ad de elegi cualquie o o lenguaje, siemp e y cuando el equipo
disponga de un in e p e e ins alado que sea capaz de en ende lo.
4.2. Análisis de Apache
Una ez enemos una idea mas cla a del uncionamien o de Vi ualMin, es necesa io acla a cómo
unciona y se con igu a el se ido web Apache, sob e odo lo ela i o a los se ido es i uales, ya
que como hemos dicho an es, es os son con los que el panel abaja.
Pa iendo de la con igu ación inicial de nues o se ido de p uebas, Apache se encuen a ins alado
en /e c/h pd/ en cuyo in e io se hayan dos di ec o ios impo an es con y con .d. El
p ime o de ellos albe ga los iche os de con igu ación del se icio web, mien as que el segundo
con iene los iche os de con igu ación de los módulos que Apache iene ins alado.
Den o de /e c/h pd/con / el iche o mas impo an e, llamado h pd.con , es el de
con igu ación del se icio. Es en es e iche o en el que podemos indica po ejemplo el pue o o
pue os en el que que emos que Apache se encuen e espe ando pe iciones web —Apache iene la
capacidad de pode escucha simul aneamen e pe iciones en dis in os pue os y di ecciones IP—, a
que u as i á a busca los documen os solici ados po las pe iciones y, lo mas impo an e en es e
abajo, los se ido es i uales.
El o ma o de odos los iche os de con igu ación de Apache cons a de una di ec i a po cada
linea, y po cada una de las di ec i as, sus a gumen os han de es a sepa ados po un espacio en
blanco. En caso de que el alo de una di ec i a con enga espacios, es e debe i en e comillas
(“”). Todas las di ec i as se aplican al se ido . Sin emba go, el alcance de las di ec i as puede
limi a se ag upándolas en bloques, en cuyo caso, és as solo se aplican a una pa e del se ido [37].
Cada sección a delimi ada al p incipio po el nomb e de la sección ence ado en e <>, y al inal,
po </>. Podemos encon a bloques 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 >[37]. A con inuación, en la igu a 9, se mues a un ex ac o co espondien e al
iche o de con igu ación de Apache en el se ido ela i o a ges ión de p ocesos, lo que nos da un
ejemplo de cómo se o ganiza la in o mación en és e ipo de a chi os.
21

In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
Lis en 80
NameVi ualHos 172.20.30.40
<Vi ualHos 172.20.30.40>
Documen Roo /www/example1
Se e Name www.example.com
</Vi ualHos >
<Vi ualHos 172.20.30.40>
Documen Roo /www/example2
Se e Name www.example.o g
</Vi ualHos >
<Vi ualHos 172.20.30.40>
Documen Roo /www/example3
Se e Name www.example3.ne
</Vi ualHos >
# IP-based
<Vi ualHos 172.20.30.50>
Documen Roo /www/example4
Se e Name www.example4.edu
</Vi ualHos >
<Vi ualHos 172.20.30.60>
Documen Roo /www/example5
Se e Name www.example5.go
</Vi ualHos >
Figu a 9. Ex ac o h pd.con pa a con igu ación de Vi ualHos
De odos los bloques que con iene el iche o de con igu ación, pa a es e abajo los mas
impo an es son los co espondien es a los se ido es i uales, es deci , las secciones
<Vi ualHos >. Un se ido i ual es la capacidad de Apache pa a se i di e en es si ios
web ubicados en un mismo equipo, di e enciándolos po su nomb e (name-based) —indicado po
la di ec i a Se e Name— o, pue o o di ección IP des ino de las pe iciones (IP-based)[36].
En caso de se ido es i uales name-based, las di ec i as ipo NameVi ualHos indican a
Apache que debe di e encia po el nomb e los se ido es con igu ados en la di ección IP y el
pue o que acompañan al pa áme o. De es a o ma cuando eciba pe iciones web a a és de la
in e az de ed que enga dicha di ección IP, Apache comp ueba que el nomb e de la web
(Se e Name) coincida con el alo indicado en el campo Hos de la cabece a HTTP. Véase la
igu a 9 ex aída de la documen ación de Apache [33].
Po o a pa e, en el di ec o io /e c/h pd/con .d/ se ubican odos los iche os de
con igu ación necesa ios pa a los dis in os módulos de Apache que engamos ins alados en el
se ido , como po ejemplo los iche os de con igu ación del módulo de sopo e pa a PHP
(/e c/h pd/con .d/php.con ).
4.3. Desa ollo
La idea básica del desa ollo cons a de la ealización de los sc ip s que ealizan el p oceso de
in eg ación de NGINX pa a las con igu aciones del se ido web Apache desplegadas en
Vi ualmin. Pos e io men e, se de alla el p oceso de desa ollo de un módulo pa a el panel
22
Webmin que haga uso de los ejecu ables p e iamen e desa ollados pa a su acil ejecución desde el
panel.
Después de analiza las he amien as con las que debemos ealiza la in eg ación, el siguien e paso
es de alla el con enido de los sc ip s de in eg ación y el desa ollo del módulo pa a Webmin desde
el que se puedan ges iona de o ma ácil.
4.3.1 con . ile
Debido a la lexibilidad que se ha que ido o o ga al desa ollo, los sc ip s se han ideado con la
p opiedad ca ac e ís ica de que puedan se con igu ados de o ma ácil indicando alo es a los
campos de un iche o de con igu ación. Es e iche o con iene los pa áme os impo an es — ales
como u as de ins alación po de ec o, que pueden a ia en unción de la dis ibución Linux—
que el adminis ado puede especi ica pa a asegu a el co ec o uncionamien o de la in eg ación
en su sis ema. Además, ambién se almacenan en es e a chi o los da os de los iche os de
con igu ación de los se icios, que se leen du an e la ejecución y que son necesa ios pa a su
pos e io uso. El con enido de con . ile es leído al inicio de cada sc ip po la unción
ca gaCon (), pe enecien e al módulo nginxRe e selib, y ca gado en una a iable de ipo
dicciona io llamada con ig, que se á accesible du an e la ejecución de los mismos.
Así, el iche o con . ile con iene los siguien es pa áme os ( éase igu a 10):
•Núme o de pue o HTTP al e na i o pa a Apache. Pue o hacia el que se edi igi án
las pe iciones HTTP desde el p oxy.
Sin axis nPue oAp: nume o
Valo po de ec o: 9080
•Nume o de pue o SSL al e na i o pa a Apache. Pue o en el que se con igu a án los
Vi ualHos pa a a ende pe iciones SSL p o enien es del p oxy. Po de ec o, la
con igu ación de Apache a iende sólamen e pe iciones a a és de HTTP. Aun así, es
posible habili a és a ca ac e ís ica si se quie e que la comunicación en e NGINX y
Apache sea ci ada (HTTPS).
Sin axis nPue oApSSL: nume o
Valo po de ec o: 9443
•Ru a hacia el iche o de con igu ación de Apache.
Sin axis n Con Apache: u a
Valo po de ec o: /e c/h pd/con /h pd.con
•Di ección IP del se ido donde NGINX ha de a ende pe iciones pa a los se ido es
i uales de Apache.
Sin axis IP: ip
Valo po de ec o: sin alo
23
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
•Ru a hacia el iche o que con iene la plan illa po de ec o de Vi ualMin. És e
pa áme o solo es necesa io que sea modi icado en caso de que el panel se encuen e
ins alado en o o luga .
Sin axis n Plan illa: u a
Valo po de ec o: /e c/webmin/ i ual-se e /con ig
•Di ec o io de ins alación po de ec o de NGINX. En caso de habe ins alado NGINX
en o o luga ha de indica se la u a en es e campo.
Sin axis u aNginx: u a
Valo po de ec o: /e c/nginx/
•Ru a hacia el iche o de con igu ación del módulo SSL de Apache.
Sin axis n Con SSLApache: u a
Valo po de ec o /e c/h pd/con .d/ssl.con
•Ru a hacia el iche o de con igu ación del módulo RPAF. En caso de ya encon a se
ins alado, u a hacia el iche o. En caso con a io, luga donde se c ea á.
Sin axis n Con RPAF: u a
Valo po de ec o: /e c/h pd/con .d/mod_ pa .con
•Ru a po de ec o en el sis ema donde se encuen a el iche o de con igu ación de
NGINX en caso de encon a se ins alado. Ru a donde comp oba á si es á ins alado.
Sin axis n Con NGINX: u a
Valo po de ec o: /e c/nginx/nginx.con
4.3.2 Lib e ia nginxRe e selib.py
En p ime luga , odos los mé odos comunes que los sc ip s de in eg ación u ilizan du an e su
ejecución se han incluido en un iche o llamado nginxRe e selib.py, que hace las unciones
de lib e ía. De es a o ma, los sc ip s de in eg ación incluyen es e iche o como e e encia —
median e la o den impo nginxRe e selib—, pa a man ene acceso a las unciones, las
cuáles son llamadas de la siguien e mane a: modulo. uncion(pa ame os).
Así, la lib e ía de los sc ip s de in eg ación con iene las siguien es unciones:
24
Figu a 10. Con enido del iche o con . ile
•ca gaCon ()
Es a unción ealiza la lec u a del iche o con . ile y ca ga su con enido en la
a iable de ipo dicciona io con ig.
•Gua daCon ()
Almacena el con enido de la a iable con ig en el iche o con . ile de o ma
que los cambios ealizados en la con igu ación po los sc ip s sean sal ados pa a la
siguien e ejecución.
•imp imeCon ()
Imp ime el con enido del iche o con . ile
•leeFiche o(nomb e)
Realiza la lec u a del iche o que se encuen a en la u a indicada po el alo del
pa áme o nomb e, de ol iendo una a iable ipo lis a con el con enido leído.
•esc ibeFiche o( ich, con )
Esc ibe en el iche o indicado po el alo de la a iable ich el con enido de la
a able ipo lis a con .
•lsDi ()
Lis a el con enido del di ec o io que ecibe como pa áme o. En caso de no ecibi
ningun pa áme o, po de ec o de uel e el lis ado del con enido del di ec o io ac ual
(./).
•log()
Esc ibe en el iche o de egis o nginxRe e se.log el con enido de la a iable
que ecibe como pa áme o. De es a o ma y, haciendo uso de es a unción, se an
egis ando odas las ope aciones que ealiza el código de los sc ip s acili ando las
a eas de depu ación de e o es o mala con igu ación de los se icios.
A modo de acla ación, el con enido del iche o lib e ía puede obse a se en la igu a 11.
25
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
Una ez hecho es o, se pasa el bloque en e o, jun o con la IP y el pue o, y se comp ueba si ha
sido ya p ocesado —no se encuen a con igu ado pa a NGINX— o si no ha sido excluido en la
con igu ación de los sc ip s (ma cado pa a no con igu a ). Realizada es a comp obación, se
p ocede a c ea el iche o que con end á las di ec i as ela i as a cada web en el p oxy. Cabe
des aca , que pa a cada se ido i ual se c ea un iche o de con igu ación independien e,
acili ando las a eas de adminis ación y p opo cionando lexibilidad en las con igu aciones ( éase
la igu a 17 y igu a 18).
32
Figu a 17. Ex ac o Ap2Nginx.py. Comp ueba con igu ación Vi ualHos .

Como apun e impo an e, es necesa io ema ca que la con igu ación po de ec o es ablecida en
és os a chi os equie e que se incluyan en el di ec o io aíz de las webs —ubicado den o del
di ec o io /home/ del sis ema— los iche os elacionados con las conexiones HTTPS, es deci ,
an o el iche o que con iene el ce i icado, llamado ssl.ce , y que se en ía al usua io pa a
ci a las conexiones; como el que con iene la cla e p i ada del se ido i ual, llamado
ssl.key, u ilizada pa a desci a la in o mación.
4.3.5 Con igu ación de Vi ual Se e s en NGINX
Una ez hemos is o qué ope aciones ealizan los sc ip s pa a ealiza la con igu ación como p oxy
in e so de Apache, de alla emos el con enido de los iche os que se han c eado en NGINX pa a
a oja luz sob e los ajus es implemen ados.
En p ime luga y como elemen o guía de nues as con igu aciones, se ha lle ado a cabo un es udio
es adís ico que analiza el amaño de los ecu sos pa a a ias webs. De es a o ma enemos una
isión mas cla a ace ca de que pa áme os o o ga al su oga e. Véase el Anexo 1.
Vol iendo a los iche os de con igu ación pa a NGINX. El con enido del a chi o p incipal de
con igu ación del se icio, llamado nginx.con , albe ga las di ec i as que son comunes y se
aplican a odos los se ido es i uales que con iene el su oga e. Den o de es e iche o, las
di ec i as empleadas, dis ibuidas po el con ex o al que se aplican, son:
•use apache;
33
Figu a 18. Ex ac o Ap2Nginx.py. Con igu ación pa a NGINX
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
Se usa pa a indica el usua io con el que se ejecu an los wo ke s, es deci , los p ocesos
que a ienden las pe iciones. En es e caso, apache es el usua io po de ec o que iene
acceso al con enido de los se ido es i uales ya que Vi ualMin u iliza és e usua io
en su c eación. Con ex o: main
•wo ke _p ocesses au o;
Núme o de p ocesos wo ke que a ienden pe iciones y ges ionan las conexiones.
NGINX adecua á és e alo en unción del núme o de CPUs que con enga el se ido .
Con ex o: main
•wo ke _connec ions 2048;
Núme o máximo de conexiones simul aneas que puede a ende un wo ke . Con ex o:
e en s
•use epoll;
Mé odo de p ocesado de conexiones. epoll es un mé odo e icien e usado en los
ke nels de Linux a pa i de la e sión 2.6. Con ex o: e en s
•log_no _ ound on;
Habili a el egis o en el e o log pa a iche os no encon ados. De es a o ma,
NGINX inclui a aquellas pe iciones que ob engan un codigo de espues a 404.
Con ex o: h p
•include /e c/nginx/mime. ypes;
Ag ega el con enido del iche o mime. ypes si uado en /e c/nginx a la
con igu ación. Es e iche o con iene di ec i as pa a sopo a en ío y ecepción de
con enido codi icados con es os ipos de codi icación es ánda . Con ex o: h p
•p oxy_cache_pa h / a /nginx/cache le els=1:2
keys_zone=zonacache:30M max_size=100M;
Es a di ec i a indica al p oxy la con igu ación ela i a a la cache. En es e caso, el luga
en disco en que se almacenan los obje os cacheados es / a /nginx/cache. Es a
u a de cache con end á 2 ni eles de subdi ec o ios que se c ea án en unción del hash
ob enido a pa i de los da os del obje o. Las cla es se almacenan en una pa e de la
memo ia compa ida que iene el nomb e de zonacache y un máximo de 30MB.
Según la documen ación de NGINX, 1MB de memo ia puede llega a albe ga ce ca
de 8000 cla es, po lo que en caso de que el nume o de cla es sea an al o que los
obje os sob epasen los 100MB en disco, el p oceso de ges ión bo a á las en adas
menos usadas. Con ex o: h p
•send ile on;
Pe mi e hace uso de la uncion del ke nel send ile, mucho mas e ec i a pa a
ealiza lec u as del disco, acele ando es e p oceso. Con ex o: h p
34
• cp_nodelay on;
Pe mi e igno a el mecanismo implemen ado po el algo i mo de Nagle4, que obliga a
que odos los paque es es én comple os — amaño igual al MTU5 de la ed— an es de
se en iados. La ac i ación de la di ec i a cp_nodelay pe mi e que los paque es
sean en iados an p on o como sea posible, e i ando así, e a dos en las espues as.
Con ex o: h p
• cp_nopush on;
Combinado con send ile, la ac i ación de es a di ec i a hace que NGINX espe e a
que el con enido de la espues a alcance el MTU (Maximum T ansmission Uni ) de la
ed, e i ando la sob eca ga de la misma. Cuando una lec u a con send ile no llega
al MTU se deshabili a es a opción y en a en uncionamien o cp_nodelay.
Con ex o: h p
•gzip on;
Jun o con las opciones siguien es del iche o, habili a la comp esión del con enido de
las espues as pa a odos los ipos MIME indicados en gzip_ ypes, siemp e y
cuando el na egado del clien e no sea Mic oso In e ne Explo e 6
(gzip_disable) —en el que no unciona bien la descomp esión— y el amaño de
la ca ga sea supe io a 1100By es (gzip_min_leng h). El ni el de comp esión,
además, iene de e minado po las ca ac e ís icas del comp eso , que a pa i del ni el
2 educe poco el amaño del iche o comp imido en p opo ción al uso de CPU ( éase
el análisis de Gzip desa ollado en el Anexo 2). Con ex o: h p
•keepali e_ imeou 10s;
Tiempo máximo que espe a NGINX an es de ce a una conexión en que no ecibe
ninguna pe ición. En el alo indicado en la con igu ación del se icio, se es ablece un
iempo pequeño pa a e i a la in au ilización del se ido eniendo conexiones
inac i as. Con ex o: h p
•clien _heade _bu e _size 2k; y
la ge_clien _heade _bu e s 4 2k;
Tamaño de los bu e s de ecepción de cabece as HTTP po cada conexión pa a las
pe iciones. En caso de que el amaño de cabece as de una pe ición sea mayo de
2KBy es se aplica el pa áme o la ge_clien _heade _bu e s. Con ex o:
h p
•clien _body_bu e _size 64k; y clien _max_body_size
100M;
64KBy es es el amaño del bu e que almacena el con enido (payload) de cada
pe ición. Además, el amaño máximo de en ío de da os del clien e po pe ición POST
4 Más in o mación sob e el uncionamien o del algo i mo de Jonh Nagle en [14]
5 Tamaño máximo de payload (ca ga ú il) jun o con las cabece as pa a un da ag ama TCP. En E he ne 1500By es.
35
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
es de 100MBy es. Es e úl imo pa áme o ha de se adecuado a las necesidades de las
webs ya que puede se un p oblema de segu idad habili a un amaño excesi o debido
al consumo de ancho de banda necesa io pa a en ia al se ido ales can idades de
da os. Con ex o: h p
•send_ imeou 10s;
En el caso de que anscu an 10 segundos en e dos esc i u as pa a un mismo clien e
en una misma espues a, NGINX cie a la conexión pa a e i a el despil a o de
ecu sos. Con ex o: h p
•ou pu _bu e s 4 32k;
Tamaño y núme o de bu e s pa a lee una espues a almacenada en el disco du o, en
nues o caso un obje o es á ico. Basándonos en el análisis es adís ico an e io (Anexo
1), podemos ap ecia que el 97% de los elemen os de las webs analizadas enían un
amaño igual o in e io a 128KBy es, que es el máximo ijado pa a los bu e s de
lec u a de disco (4 x 32KB = 128KB). Con ex o: h p
•include /e c/nginx/con .d/*.con ;
NGINX inclui á los iche os de con igu ación —aquellos con ex ensión .con — que
se encuen an en el di ec o io /e c/nginx/con .d/. Si nos ijamos, es en és e
di ec o io en que el sc ip Ap2Nginx.py ubica los iche os de con igu ación pa a
NGINX de los se ido es i uales de ec ados en Apache, de es a o ma es como el
p oxy ca ga las dis in as con igu aciones pa a cada uno de ellos. Con ex o: h p
Así, el con enido de es e iche o es el que puede ap ecia se en la igu a 19.
36
Po o o lado, las con igu aciones especi icas a cada una de las webs se dis ibuyen en iche os
sepa ados al y como se ha a ado en el pun o 4.3.3, donde se explica el uncionamien o del sc ip
Ap2Nginx.py. Es os iche os con ienen las di ec i as que se aplican po sepa ado a cada se ido
i ual que, en NGINX, ienen de e minados po el bloque se e , en cuyo in e io se
encuen an. Ademas, es necesa io acla a que cada iche o de con igu ación pa a un se ido
i ual con iene dos bloques de di ec i as se e .
El p ime o de es os bloques si e pa a indica al clien e que debe usa el p o ocolo HTTP con
ci ado, o lo que es lo mismo, HTTPS, comunicando a odas las pe iciones que se eciben po el
pue o 80 (HTTP) que deben hace lo al 443 (HTTPS). Pa a ello, el bloque se e ubicado en el
pue o 80 en ía una espues a con un código de es ado 301 Mo ed Pe manen ly que obliga al
na egado a ealiza odas las pe iciones pos e io es usando la di ección que lo acompaña, y
además, ag ega la cabece a S ic -T anspo -Secu i y —habili ando el mecanismo HSTS— que
indica al na egado del clien e que sólo debe comunica se po HTTPS con el se ido [7].
37
Figu a 19. Con enido de nginx.con

In eg ación de un p oxy in e so NGINX 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, el na egado del clien e ealiza á las conexiones sucesi as al pue o 443. Es el
segundo bloque de di ec i as el que con iene la con igu ación HTTPS pa a el se ido i ual. Así,
los pa áme os que el sc ip Ap2Nginx.py o o ga po de ec o du an e su ejecución pa a es e
bloque son los siguien es:
•lis en 192.168.15.128:443;
La di ec i a lis en se u iliza pa a indica la di ección IP y el pue o en el que se
a ienden pe iciones pa a ese se ido i ual. Po de ec o, el alo que se aplica pa a la
di ección es el que ob iene en la lec u a del iche o de con igu ación de Apache pa a
los Vi ualHos .
•se e _name p ueba.com www.p ueba.com;
La di ec i a se e _name indica los nomb es de un se ido i ual. Es os alo es
se compa an con el del campo de cabece a Hos de la pe ición HTTP pa a aplica la
con igu ación especí ica pa a cada web.
• oo /home/p ueba/public_h ml;
Di ec o io en el que se encuen an los ecu sos que con o man la web almacenados en
el disco du o, al cuál se accede pa a su lec u a y pos e io en ío cuando son
solici ados.
•ssl on;
Habili a el ci ado de las comunicaciones HTTP.
•ssl_ce i ica e /home/p ueba/ssl.ce ;
Ce i icado digi al con in o mación que iden i ica el p opie a io del si io web y que
con iene la cla e pública (ci ado asimé ico6), que los clien es usa án pa a ci a el
in e cambio de cla e7. Po de ec o, el nomb e asignado es ssl.ce y se ubica en la
aíz del di ec o io del usua io p opie a io del se ido i ual.
És e ce i icado puede se ob enido de una en idad ce i icado a, de o ma que
cons a e la in o mación del se ido , o puede se c eado po noso os mismos y es a
au o i mado. El p oceso de c eación de la solici ud de i ma de ce i icado (necesa ia
pa a el mé odo con au o idad ce i icado a) y de au o i mado se ha de allado en el
Anexo 3.
•ssl_ce i ica e_key /home/p ueba/ssl.key;
Ru a hacia el iche o que con iene la cla e p i ada con la que se ha i mado
digi almen e el ce i icado, además, es a cla e se u iliza pa a desci a los da os que se
eciben del clien e —p e iamen e ci ados con nues a cla e pública— du an e el
p oceso de negociación de la conexión segu a. Po de ec o el nomb e asignado es
6 Más in o mación ace ca del ci ado asimé ico puede encon a se en [38]
7 Más in o mación ace ca del ci ado híb ido puede encon a se en [38]
38
ssl.key y se ubica en la aíz del di ec o io del usua io p opie a io del se ido
i ual.
Es a cla e es necesa io que sea c eada po noso os mismos pa a ob ene el ce i icado
digi al independien emen e de cualquie a de las o mas mencionadas en el pun o
an e io , ya sea a a és de una CA (Au o idad Ce i icado a) o au o i mado. El
p oceso de ob ención de la cla e p i ada se encuen a de allado en el Anexo 3.
•ssl_ciphe s HIGH:!aNULL:!MD5;
Es a di ec i a indica a NGINX que sólo debe usa ci ados ue es. En es e caso
echazamos el uso de los algo i mos MD5 y aNULL (ADH y AECDH), odos ellos
ulne ables.
•ssl_p o ocols TLS 1 TLS 1.1 TLS 1.2;
Al igual que la di ec i a an e io , sólo usamos p o ocolos c ip og á icos ue es, como
es TLS8.
•ssl_p e e _se e _ciphe s on;
Se indica a NGINX que deben p e alece en la negociación los ci ados o ecidos po
el se ido en ez de los del clien e.
•ssl_session_cache sha ed:SSL:10m; y ssl_session_ imeou
10m;
Es ablecemos una memo ia compa ida po odos los wo ke s en la que se almacenan
du an e 10 minu os (ssl_session_ imeou ) los pa áme os de las sesiones
SSL, pa a e i a su enegociación —que es la pa e más cos osa del p oceso— en caso
de un mismo clien e.
•access_log / a /log/ i ualmin/p ueba.com_access_log; y
e o _log
/ a /log/ i ualmin/p ueba.com_nginx_e o _log;
Vi ualMin po de ec o es ablece que los iche os de log de los se ido es i uales en
Apache egis en los allos y accesos en los iche os an e io es. Pues o que ya no es
Apache sino NGINX el enca gado de ecibi odo el a ico, és os se es ablecen con el
mismo nomb e que les o o ga Vi ualMin, de o ma que és e sea capaz de
in e p e a los.
•loca ion = / obo s. x { … }
Cada ez que se ecibe una pe ición, NGINX busca el bloque de di ec i as
loca ion que más se ajus a a la URI que el clien e ha solici ado pa a aplica le las
polí icas que en su in e io se hallan. Cuando el ecu so solici ado es / obo s. x ,
se aplican las di ec i as de pe mi i acceso a odo el mundo sin man ene un egis o
de accesos pa a el ecu so.
8 T anspo Laye Secu i y (TLS) es un p o ocolo que p opo ciona comunicaciones p i adas en In e ne [2].
39
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
•loca ion ~* ^.+ .(js|jpeg|jpg|gi |png|ico|css|zip| gz|
gz| a |bz2|doc|xls|exe|pd |pp | x | a |mp3|h m|h ml|xml)
$ { … }
Al igual que el bloque an e io , cuando la URI solici ada po el clien e encaja con la
exp esión egula que lo acompaña — iene una ex ensión de en e las que se
encuen an en e pa én esis— , se á NGINX el que accede al di ec o io indicado po
la di ec i a oo pa a lee el ecu so y se i lo ( y_ iles $u i $u i/
=404;). En caso de que no encuen e el ecu so, de ol e á un codigo de espues a
404-No ound. Además, la di ec i a gzip_s a ic on; indica al su oga e que
siemp e debe comp imi las espues as de con enido es á ico si el clien e lo sopo a.
•loca ion ~ / .h { … }
Po segu idad, se deniega el acceso a odos los iche os cuyo nomb e empieza po
.h . Reco demos que los iche os .h access de Apache con ienen in o mación
impo an e ace ca de las polí icas del se ido pa a cada di ec o io. Es a di ec i a
impide (deny all;) el acceso a es e ipo de iche os.
•loca ion / { … }
Es e bloque de di ec i as, es el que es ablece que, en caso de no cumpli se ninguno de
los bloques loca ion explicados an e io men e, NGINX ealice la pe ición a
Apache (p oxy_pass) aplicándole las di ec i as de con igu ación del iche o
/e c/nginx/p oxy.con , es deci , hace que Apache si a odo el con enido
que no sea es á ico.
A modo de ejemplo, en la igu a 20 puede e se el con enido del iche o de con igu ación pa a la
web p ueba.com ubicada en el se ido de p uebas.
40
Una ez hemos is o las polí icas con que son con igu ados po de ec o los se ido es i uales en
NGINX, el compo amien o como p oxy del su oga e iene de inido en el iche o al que se ha
hecho e e encia an e io men e — eco demos que pa a cualquie ecu so no es á ico NGINX
ealiza las pe iciones a Apache—, es e es, /e c/nginx/p oxy.con . A con inuación se de alla
el con enido de és e iche o:
•p oxy_se _heade Hos $hos ;
Es ablece la cabece a Hos con el alo que se ecibe en la pe ición po pa e del
clien e, si no exis e es e campo de cabece a (HTTP/1.0), se sus i uye po el nomb e
del se ido NGINX.
•p oxy_se _heade X-Real-IP $ emo e_add ;
Se añade una cabece a pa a que Apache conozca la di ección del clien e que ealizó
o iginalmen e la pe ición a in de que pueda lle a un egis o de sucesos co ec o.
41
Figu a 20. Con enido del iche o p ueba.com.con
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
co ec o uncionamien o de los sc ip s de in eg ación po lo que hab án de se
cambiados con o me a las ca ac e ís icas del sis ema en que se ejecu e el módulo.
Po o o lado, en la igu a 25 se puede e el código enca gado de ecibi y almacena
en el iche o de con igu ación del módulo los cambios ealizados, que son en iados po
con ig.cgi una ez el adminis ado hace clic en el bo ón “Sal a ” del o mula io.
•allmaual_ o m.cgi y allmanual_sa e.cgi
El p ime o de ellos, mues a al adminis ado el con enido del iche o de con igu ación
de NGINX que p e iamen e haya sido seleccionado de una lis a desplegable. El
segundo, po o o lado, almacena los cambios que se hayan ealizado en es os iche os
cuando el adminis ado pulsa el bo ón “Sal a ”. Véanse las igu as 26 y 27.
48
Figu a 25. Código de con ig_sa e.cgi

Mien as que la igu a 26 mues a la in e az desde la que se pueden ealiza los
cambios en el iche o seleccionado de la lis a desplegable ubicada en la pa e supe io
de la pan alla, en la igu a 27 se puede ap ecia el código enca gado de almacena los
cambios en el iche o co espondien e.
•lis _ s.cgi, edi _ s.cgi y d op_ s.cgi
lis _ s.cgi gene a un lis ado que con iene los se ido es i uales con igu ados
en NGINX. Pa a ello, lee el di ec o io donde se almacenan los iche os de los
se ido es i uales del p oxy.
Si el adminis ado hace clic en el nomb e de dominio de uno de ellos,
edi _ s.cgi mues a la in o mación basica de esa web y solici a la con i mación
49
Figu a 26. In e az de allmanual_ o m.cgi
Figu a 27. Código allmanual_sa e.cgi
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
pa a deshabili a el se ido i ual en el su oga e. En caso a i ma i o,
d op_ s.cgi es el enca gado de bo a el iche o de con igu ación de esa web en
NGINX y po lo an o, inhabili ándolo pa a ecibi pe iciones en el p oxy.
Cabe des aca que es e p oceso sólamen e bo a el iche o y añade el nomb e de
dominio a una lis a de excepciones de con igu ación, pa a que, en caso de que se
uel a a ealiza la in eg ación, no sea con igu ado. De o ma que si se desea
econ igu a cualquie web que se encuen e en la lis a de excepciones, bas a con
elimina la desde el o mula io de con igu ación del módulo. Sin emba go, la
con igu ación pa a ese se ido i ual en Apache no se e á al e ada y pe manece á
en el pue o al e na i o pa a no en a en con lic o con el su oga e. El con enido de
és os CGI puede e se en las igu as 28, y 29.
Es e módulo, un empaque ado en . a de odos los elemen os que lo con o man, enomb ado con
o ma o .wbm, puede se ins alado ácilmen e en Webmin desde el p opio panel. Pa a ello, en el
apa ado Webmin/Con igu acion de Webmin/Modulos de Webmin disponemos de un
o mula io desde el que seleccionamos el módulo a ca ga . Tal y como puede e se en la igu a 30,
bas a con pulsa sob e el bo ón Ins ala módulo de la in e az pa a que nues o desa ollo
quede incluido en el panel.
En nues o caso, el módulo desa ollado, queda incluido en la sección “se ido es” del panel con el
nomb e de NGINX como p oxy in e so de Apache.
50
Figu a 28. In e az de lis _ s.cgi
Figu a 29. In e az de edi _ s.cgi
51
Figu a 30. Fo mula io de ca ga de módulos en Webmin
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
52
5. P uebas
5.1. Sis ema p oxy in e so
Una ez inalizado el desa ollo de los sc ip s y el módulo pa a el panel Webmin, la siguien e ase
e a la comp obación del co ec o uncionamien o y con igu aciones que és os mismos es ablecen.
De es a o ma, la p ime a pa e de las p uebas consis ía en la comp obación de que las
con igu aciones es ablecidas po los módulos desa ollados e an las deseadas, log ando que el
sis ema uncionase de la o ma adecuada.
Pa a ello se han ealizado pe iciones HTTP desde la maquina hos —que ac uaba como clien e— y
obse ado las cabece as del p o ocolo en la espues a. En conc e o, se u ilizaba la o den cu l
pa a ealiza és a unción indicándole median e el pa áme o -H, el alo de la cabece a Hos : el
se ido i ual en conc e o pa a el que se deseaba comp oba su uncionamien o, en nues o caso
p ueba.com. Así, la o den, jun o con su esul ado, pueden e se en la igu a 31.
Tal y como puede e se en la imagen an e io , el se ido que esponde a nues a pe ición es
NGINX, que a iende las pe iciones en el pue o HTTP (80) donde lo habíamos con igu ado.
Además, y debido a la con igu ación po de ec o que aplicamos a odos los se ido es i uales
( éase el apa ado 4.3.5) pa a habili a el mecanismo HSTS —que ue za conexiones segu as bajo
HTTPS—, el código de espues a que NGINX nos emi e es el 301, indicándonos una edi ección
53
Figu a 31. Fo za HTTPS

In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
hacia la página indicada po el campo de cabece a Loca ion; que como se puede ap ecia es una
di ección bajo HTTPS (Loca ion: h ps://www.p ueba.com/).
Siguiendo con las p uebas, y con la in ención de comp oba que NGINX edi ige las pe iciones
hacia Apache, es deci , que el mecanismo de p oxy in e so se encon a a co ec amen e
desplegado, se ha epe ido la o den cu l cambiando la di ección po la que NGINX nos había
ecomendado en la espues a an e io . De és a mane a, el esul ado ob enido puede e se en la
igu a 32.
En la imagen an e io podemos ap ecia en p ime luga cómo se ealiza la ase de negociación de
la conexión segu a en la que se pac an los pa áme os de la conexión, en e ellos, el p o ocolo de
ci ado y el in e cambio de cla es. Si nos ijamos en la espues a de la pe ición, obse amos que
quien esponde a nues a pe ición es NGINX (cabece a Se e ), y además, nos en ía una
cabece a de ipo ETag12 pa a con ol de e siones de cache. Po úl imo, al inal de las lineas de
cabece a de la espues a se mues a el con enido del ecu so solici ado, en es e caso, el ex o
“p ueba.com”.
Con el in de asegu a nos que pa a és a p ueba es NGINX el ealiza las unciones de se ido web,
es o es, quien lee del disco du o el iche o index.h ml —cuyo con enido es el mos ado en la
12 The en i y ag MAY be used o compa ison wi h o he en i ies om he same esou ce [3].
54
Figu a 32. Pe ición HTTPS a p ueba.com
espues a de la igu a 30— pa a se i lo al clien e, se ha comp obado el iche o de log de acceso
que NGINX man iene y en el que se a añadiendo una linea po cada pe ición que és e ecibe.
Así, en caso de que NGINX ue a e ec i amen e el que ealizaba el p ocedimien o de lee un
ecu so es á ico solici ado y esponde lo al clien e sin in e ención de Apache, encon a íamos en
su iche o de log / a /log/ i ualmin/p ueba.com_access_log la en ada
co espondien e a dicha pe ición, y sin emba go, en el iche o de egis o de acceso de Apache
/ a /log/ i ualmin/p ueba.com_apache_access_log no exis i ía su equi alen e.
En la igu a 33, se puede ap ecia cómo la echa y ho a (GMT) de la pe ición mos ada po la
igu a 32 coincide con la úl ima en ada del iche o de egis o de acceso pa a NGINX (GMT+2),
mien as que en el log de Apache no apa ece, co obo ando el hecho an e io .
Po úl imo, se ha comp obado el compo amien o de NGINX en caso de solici a se un ecu so
dinámico al se ido , en cuyo caso, debía een ia las pe iciones hacia Apache, espe a la
espues a del mismo, y de ol e la al clien e. Es o es, compo a se como un p oxy in e so.
El p ocedimien o lle ado a cabo es simila al an e io , con la di e encia que, en és e caso la
pe ición debía egis a se en ambos iche os de egis o de acceso. El CGI solici ado, llamado
ejemplo.php, se enca gaba de gene a código HTML de o ma dinámica median e la ejecución de
la unción phpin o() desde el se ido Apache.
En la igu a 34 se puede e la pe ición HTTPS ealizada con el comando cu l (la espues a ha
sido co ada debido a su ex ensión).
55
Figu a 33. Úl imas dos en adas en logs de NGINX y Apache
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
Así, en la igu a 35 se puede ap ecia el con enido de los iche os de egis o después de ealiza
la pe ición an e io .
Tal y como cabe espe a , ambos se icios egis an la pe ición, lo que indica el co ec o
uncionamien o del diseño mos ado en el apa ado 3.3.
56
Figu a 34. Pe ición HTTPS ejemplo.php
Figu a 35. Con enido logs NGINX y Apache
5.2. Comp esión de ecu sos
El come ido p incipal de la ealización de es as p uebas e a la comp obación y demos ación del
uncionamien o de las con igu aciones aplicadas ela i as a la comp esión de los ecu sos median e
Gzip. Las di ec i as de alladas en el apa ado 4.3.5 indican a NGINX que debe comp imi el
con enido de las espues as siemp e que se cumplan los equisi os especi icados en la con igu ación
y el clien e haya indicado que sopo a la comp esión.
Pa a ello, el clien e indica al se ido que puede ecibi el con enido de las espues as comp imido
en es e o ma o median e la inclusión de la cabece a HTTP Accep -Encoding: gzip. Un
ejemplo de una pe ición ealizada u ilizando es e mé odo puede e se en la igu a 36, en la que se
solici a —haciendo uso de la o den de Linux cu l e indicando que solo que emos isualiza las
cabece as de la espues a— el ecu so co o. x de la web p ueba.com albe gada en
nues o se ido .
Tal y como se ap ecia en la imagen an e io , pese a que indicamos a NGINX que sopo amos la
comp esión del con enido de las espues as, el ipo de da os de la espues a emi ida po el
se ido , indicado po la cabece a Con en -Type, es ex o plano ( ex /plain) sin ningún
ipo de codi icación especial. Es o se debe a que en la con igu ación del se icio, uno de los
equisi os pa a comp imi los ecu sos es que su amaño sea mayo de 1100By es, y sin emba go,
en es e caso el amaño del ecu so solici ado es de 28By es —indicado po el alo de la cabece a
Con en -Leng h—.
Con el in de p oba lo an e io , se ha ealizado el mismo p ocedimien o que en el caso del ecu so
co o. x pa a un iche o de ex o cuyo amaño uese supe io al mínimo indicado en la
con igu ación del su oga e. En es a ocasión, el con enido de la espues a ob enida pa a la pe ición
del iche o la go. x , cuya longi ud es de 16383By es, es en iada po NGINX comp imida,
al y como indica la cabece a Con en -Encoding: gzip de la espues a mos ada en la
igu a 37.
57
Figu a 36. Pe ición indicando sopo e gzip
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
[15] Nedelcu, Clémen (2013). Nginx HTTP Se e (2nd Edi ion). Bi mingham: Pack
Publishing.
[16] Ne c a . Feb ua y 2015 Web Se e Su ey.
<h p://news.ne c a .com/a chi es/2015/02/24/ eb ua y-2015-web-se e -
su ey.h ml>[Consul a: 26 de Ma zo de 2015]
[17] NGINX, Inc. NGINX Re e se P oxy.
<h p://nginx.com/ esou ces/admin-guide/ e e se-p oxy/>[Consul a: 2 de Junio de
2015]
[18] NGINX, Inc. NGINX Con en Caching.
<h p://nginx.com/ esou ces/admin-guide/caching/>[Consul a: 2 de Junio de 2015]
[19] Nginx.o g. Con igu a ion ile measu emen uni s.
<h p://nginx.o g/en/docs/syn ax.h ml>[Consul a: 26 de Ma zo de 2015]
[20] Nginx.o g. Co e unc ionali y.
<h p://nginx.o g/en/docs/ngx_co e_module.h ml>[Consul a: 30 de Mayo de 2015]
[21] Nginx.o g. Nginx HTTP Co e Module.
<h p://nginx.o g/en/docs/h p/ngx_h p_co e_module.h ml>[Consul a: 30 de Mayo
de 2015]
[22] Nginx.o g. Nginx HTTP P oxy Module.
<h p://nginx.o g/en/docs/h p/ngx_h p_p oxy_module.h ml>[Consul a: 2 de Junio
de 2015]
[23] Nginx.o g. Nginx HTTP SSL Module.
<h p://nginx.o g/en/docs/h p/ngx_h p_ssl_module.h ml>[Consul a: 2 de Junio de
2015]
[24] Nginx.o g. Con igu ing HTTPS se e s.
<h p://nginx.o g/en/docs/h p/con igu ing_h ps_se e s.h ml>[Consul a: 2 de Junio
de 2015]
[25] Nginx.o g. Nginx abou page. <h p://nginx.o g/en/>[Consul a: 26 de Ma zo de 2015]
[26] Nginx.o g. Nginx spanish wiki. <h p://wiki.nginx.o g/NginxEs>[Consul a: 26 de
Ma zo de 2015]
[27] Open Sou ce Ini ia i e. The BSD 2-Clause License.
<h p://opensou ce.o g/licenses/BSD-2-Clause>[Consul a: 27 de Ma zo de 2015]
[28] Py hon So wa e Founda ion. Gene al Py hon FAQ.
<h ps://docs.py hon.o g/2/ aq/gene al.h ml#wha -is-py hon>[Consul a: 27 de Ma zo
de 2015]
[29] Ri es , R. (1992). The MD5 Message-Diges Algo i hm.
<h p:// ools.ie .o g/h ml/ c1321>[Consul a: 26 de Ma zo de 2015]
64

[30] Sslshope .com (2010). How o C ea e and Ins all an Apache Sel Signed Ce i ica e
<h ps://www.sslshoppe .com/a icle-how- o-c ea e-and-ins all-an-apache-sel -
signed-ce i ica e.h ml>[Consul a: 29/06/2015]
[31] S allings, William (2007). Da a and compu e communica ions (8ed). USA:
Pea son Educa ion.
[32] The Apache So wa e Founda ion. Licenses.
<h p://www.apache.o g/licenses/>[Consul a: 23 de Ma zo de 2015]
[33] The Apache So wa e Founda ion. Name-based Vi ual Hos Suppo .
<h p://h pd.apache.o g/docs/2.2/ hos s/name-based.h ml>[Consul a: 5 de Junio de
2015]
[34] The Apache So wa e Founda ion. Abou he Apache HTTP Se e P ojec .
<h p://h pd.apache.o g/ABOUT_APACHE.h ml>[Consul a: 23 de Ma zo de 2015]
[35] The Apache So wa e Founda ion. Apache HTTP Se e Tu o ial: .h access
iles. <h p://h pd.apache.o g/docs/2.2/how o/h access.h ml>[Consul a: 26 de Ma zo
de 2015]
[36] The Apache So wa e Founda ion. Apache Vi ual Hos documen a ion.
<h p://h pd.apache.o g/docs/2.2/ hos s/>[Consul a: 5 de Junio de 2015]
[37] The Apache So wa e Founda ion. Con igu a ion Files – Apache HTTP Se e
Ve sion 2.4. <h ps://h pd.apache.o g/docs/cu en /con igu ing.h ml>[Consul a: 18
de Mayo de 2015]
[38] The F ee So wa e Founda ion (1999). Guía de “Gnu P i acy Gua d”.
<h ps://www.gnupg.o g/gph/es/manual/book1.h ml>[Consul a: 5 de Junio de 2015]
[39] Villamil, F ede ic de (2014). Nginx Op imiza ion: unde s anding send ile,
cp_nodelay and cp_nopush. <h ps:// 37.ne /nginx-op imiza ion-unde s anding-
send ile- cp_nodelay-and- cp_nopush.h ml>[Consul a: 2 de Junio de 2015]
[40] Vi ualmin, Inc. Open Sou ce Web Hos ing and Cloud Con ol Panels | Vi ualmin.
<h p://www. i ualmin.com/>[Consul a: 27 de Ma zo de 2015]
[41] W3C Conso ium. CGI - Common Ga eway In e ace.
<h p://www.w3.o g/CGI/>[Consul a: 26 de Ma zo de 2015]
[42] W3SCHOOLS.IN. Wha is HTML. <h p://www.w3schools.in/h ml/in o/>[Consul a:
28 de Ma zo de 2015]
[43] Webmin wiki Page. Webmin Module De elopmen .
<h p://dox e .webmin.com/Webmin/Module_De elopmen >[Consul a: 27 de Mayo
de 2015]
[44] Wessels, Duane (2001). Web caching. Beijing: O'Reilly
65
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
66
Anexos
Anexo 1: Análisis es adís ico
Con el in de encon a unos pa áme os de con igu ación mas óp imos pa a NGINX, se ha
diseñado una aplicación de consola en Ja a que analice el amaño de los obje os que con o man las
webs que lee como en ada desde un iche o de ex o llamado Webs. x . Pa a cada una de es as
15 webs que con o man la población de es udio, la aplicación se enca gaba de ealiza pe iciones
HTTP —como si de un na egado se a ase— a odos los obje os enlazados en la p ime a página
de cada uno de los si ios, almacenando pa a cada pe ición el amaño de la espues a.
Es as webs ue on elegidas en unción del p opósi o de la misma, desde webs gube namen ales,
cen os educa i os o blogs, has a medios de in o mación digi ales. La lis a de si ios de los que se
ealizó el es udio es la siguien e:
•h p://www.up .es – Web de la Uni e sidad Poli écnica de Valencia.
•h p://www.uclm.es – Web de la Uni e sidad de Cas illa-La Mancha
•h p://www.ug .es/ – Web de la Uni e sidad de G anada.
•h p://www.aeme .es/es/po ada – Web de la Agencia Española de Me eo ología.
•h p://www.csic.es/ – Web del Cen o Supe io de In es igaciones Cien í icas.
•h p://www.eu opa l.eu opa.eu/po al/es – Web del Pa lamen o Eu opeo.
•h p://www.eldia io.es/ – Web del pe iódico digi al eldia io.es.
•h p://www.lemonde. – Web del pe iódico digi al ancés LEMONDE.
•h p:// .com/ – Web del canal de no icias de la Fede ación de Rusia.
•h p://nginx.com/ – Web del so wa e NGINX.
•h p://www.w3schools.com/ – Web de educación del conso cio Wo ld Wide Web.
•h p://www.debian.o g/ – Web del sis ema ope a i o de código abie o Debian.
•h p://www.secu i ya wo k.es/ – Blog de segu idad TI de la emp esa S2 G upo.
•h p://secu i yblog. edha .com/ – Blog de segu idad TI de los desa ollado es de RedHa
En e p ise Linux.
•h p://www.omic ono.com/ – Blog de ecnología.
Basándonos en los esul ados de es e análisis es adís ico pa a odos los obje os analizados (en o al
1511), ob u imos la p opo ción de odos los ecu sos que se encon aban den o de cada ango de
amaños:
67
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
Tamaño Po cen aje Acumulado
Has a 4kB 0.19258769 0.19258769
De 4kB a 8kB 0.07478491 0.2673726
De 8kB a 16kB 0.112508275 0.37988088
De 16kB a 32kB 0.13765718 0.5175381
De 32kB a 64kB 0.22964925 0.7471873
De 64kB a 128kB 0.22964925 0.9768365
Mas de 128kB 0.023163468 1.0
Como se puede ap ecia en la abla de esul ados an e io , la mayo ía de los obje os que con ienen
las webs analizadas ienen un amaño mayo de 16kB, ap oximadamen e el 60% de ellas, po lo
que és e ha sido un da o impo an e en las con igu aciones que siguen.
Así, el código Ja a que ha sido desa ollado pa a pe mi i el análisis an e io es el siguien e:
Clase Main.ja a
En p ime luga , la clase main.ja a se enca ga de lee el iche o de ex o llamado webs. x
que con iene las URL de los si ios web señalados an e io men e, almacenandolos en una lis a. Una
ez leido, se lanzan an os hilos simul aneos de ipo Desca gaWeb como indique la a iable
numPe Pa –po de ec o 7-- pa a desca ga odo el con enido enlazado en la p ime a página de los
si ios web (el con enido de la misma es examinado po Desca gaWeb). Es as conexiones
almacenan odos los da os en la lis a llamada esul ados pa a su pos e io análisis es adís ico,
cuyos esul ados se án almacenados en un iche o de ex o.
68
impo ja a.io.Bu e edReade ;
impo ja a.io.File;
impo ja a.io.FileReade ;
impo ja a.io.FileW i e ;
impo ja a.io.IOExcep ion;
impo ja a.io.P in W i e ;
impo ja a.u il.A ayLis ;
impo ja a.u il.Lis ;
public class Main {
p i a e s a ic Lis <S ing> lis awebs;
s a ic Lis <Pe icion> esul ados;
s a ic in numPe Pa=7;
//Leemos el iche o que con iene las webs a analiza
p i a e s a ic oid leeWebs ()
{
Bu e edReade lec o ;
69
File ;
S ing linea="";
FileReade Read;
lis awebs=new A ayLis <S ing>();
y {
=new File("webs. x ");
Read = new FileReade ( );
lec o =new Bu e edReade ( Read);
while ( (linea=lec o . eadLine())!=null ){
lis awebs.add(linea);
// Realiza an as pe iciones como enlaces
iene la web
}
lec o .close();
Read.close();
} ca ch (Excep ion e) {
Sys em.ou .p in ln("leeWebs - E o al lee el
iche o"+ e);
e.p in S ackT ace();
}
}
p i a e s a ic oid esc ibeRes ()
{
FileW i e Res;
P in W i e esc i o ;
Pe icion es;
in n4k=0, n8k=0, n16k=0, n32k=0, n64k=0, n128k=0,
nmas128k=0;
loa has a4k=0, has a8k=0, has a16k=0, has a32k=0,
has a64k=0, has a128k=0, masde128k=0;
in suma=0, maximo=0, alla=0;
y {
Res = new FileW i e ("Resul ados. x ");
esc i o =new P in W i e ( Res);
o ( in n=0; n< esul ados.size(); n++ ){
es= esul ados.ge (n);
alla= es.ge Size();
i ( alla>maximo ) maximo= alla;
i ( alla<=4096 ) n4k++;
i ( alla>4096 && alla<=8192 ) n8k++;
i ( alla>8192 && alla<=16384 ) n16k++;
i ( alla>16384 && alla<=32768 ) n32k++;
i ( alla>32768 && alla<=65536 ) n64k++;
i ( alla>65536 && alla<=65536*2 ) n128k++;
i ( alla>65536*2 ) nmas128k++;
suma+= alla;
//esc i o .p in ln( es.ge Name()+" --
"+ alla);
}
has a4k=(( loa )n4k/ esul ados.size());
has a8k=(( loa )n8k/ esul ados.size());
has a16k=(( loa )n16k/ esul ados.size());
has a32k=(( loa )n32k/ esul ados.size());
has a64k=(( loa )n64k/ esul ados.size());

In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
70
has a128k=(( loa )n128k/ esul ados.size());
esc i o .p in ln("Obje os
TOTALES="+ esul ados.size());
esc i o .p in ln("MEDIA -> "+
(suma/ esul ados.size()));
esc i o .p in ln("MAXIMO -> "+maximo);
esc i o .p in ln("Has a 4k="+has a4k+" -
Acumulado="+has a4k);
esc i o .p in ln("De 4k a 8k -> "+has a8k+" -
Acumulado="+(( loa )(n8k+n4k)/ esul ados.size()));
esc i o .p in ln("De 8k a 16k -> "+has a16k+" -
Acumulado="+(( loa )(n8k+n4k+n16k)/ esul ados.size()));
esc i o .p in ln("De 16k a 32k -> "+has a32k+" -
Acumulado="+(( loa )(n32k+n8k+n4k+n16k)/ esul ados.size()));
esc i o .p in ln("De 32k a 64k -> "+has a64k+" -
Acumulado="+(( loa )(n64k+n32k+n8k+n4k+n16k)/ esul ados.size()));
esc i o .p in ln("De 64k a 128k -> "+has a128k+" -
Acumulado="+(( loa )
(n128k+n64k+n32k+n8k+n4k+n16k)/ esul ados.size()));
esc i o .p in ln("Mas de 128k -> "+masde128k+" -
Acumulado="+(( loa )
(nmas128k+n128k+n64k+n32k+n8k+n4k+n16k)/ esul ados.size()));
esc i o .close();
Res.close();
} ca ch (IOExcep ion e) {
e.p in S ackT ace();
}
}
p i a e s a ic oid lanzaPe iciones ()
{
Desca gaWeb pe =null;
Desca gaWeb []pe iciones=new Desca gaWeb[numPe Pa];
in n=0, k=0;
o ( n=0, k=0; n<lis awebs.size(); n++, k++){
i ( k==numPe Pa ){
o ( k=k-1; k>=0; k--){
y {
pe iciones[k].join(); //Espe amos
a que e minen las webs de desca ga se
} ca ch (In e up edExcep ion e) {
e.p in S ackT ace();
}
}
}
else {
pe =new Desca gaWeb(lis awebs.ge (n));
pe .s a (); // Lanzamos las webs de o ma
pa alela maximo numPe Pa
pe iciones[k]=pe ;
}
}
o ( k=k-1; k>=0; k--){
y {
Clase main.ja a
Clase Desca gaWeb.ja a
Desca gaWeb.ja a es la clase enca gada de c ea obje os de ipo TCPCon pa a desca ga los
ecu sos que con ienen cada una de las paginas leídas del iche o. Pa a ello, en p ime luga
desca ga la pagina p incipal de las webs y analiza su codigo en busca del con enido enlazado en el
mismo, almacenando las di ecciones en una lis a. Pos e io men e, ealiza conexiones simul aneas
(TCPCon) pa a desca ga odos los obje os enlazados encon ados de 5 en 5 y espe a a que
e minen pa a lanza o as nue as.
71
impo ja a.u il.A ayLis ;
impo ja a.u il.Hash able;
impo ja a.u il.Lis ;
public class Desca gaWeb ex ends Th ead {
TCPCon conexion=null;
Hash able<S ing,S ing> hash=new Hash able<S ing,S ing>();
Lis <S ing> lis a;
S ing se ido ="";
public Desca gaWeb (S ing u l)
{
conexion=new TCPCon(u l);
se ido =conexion.hos ;
}
public oid un ()
{
in k=0, alla=0, n=0;
conexion.s a (); // Lanzamos la pe icion pa a index
examinaCodigo(); // Examinamos el codigo de index pa a
ex ae los enlaces
alla=lis a.size();
TCPCon hilos[]=new TCPCon[5];
Sys em.ou .p in ln("Hay "+lis a.size()+" elemen os en
"+se ido );
o ( n=0, k=0; n< alla; n++,k++ ) { // Realizamos
pe iciones pa a odos los enlaces
i (k==5){
pe iciones[k].join(); //Espe amos a que
e minen las webs es an es
} ca ch (In e up edExcep ion e) {
e.p in S ackT ace();
}
}
}
public s a ic oid main(S ing[] a gs) {
esul ados=new A ayLis <Pe icion>();
leeWebs();
lanzaPe iciones();
i ( esul ados.size()>0 ) esc ibeRes();
Sys em.ou .p in ln("Fin del p og ama");
e u n;
}
}
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
72
Sys em.ou .p in ln("Lanzados 5 Th eads pa a
"+se ido );
o ( k=0; k<5; k++){ //Espe amos a que los 5
hilos hayan acabado
y {
hilos[k].join();
} ca ch (In e up edExcep ion e) {
e.p in S ackT ace();
}
}
k=-1; // Ponemos a 0 el
con ado de hilos lanzados
}
else { //lanzamos hilos mien as no lle emos 5
hilos[k]=new TCPCon(lis a.ge (n). oS ing(),
alse);
hilos[k].s a (); //Lanzamos 5 hilos
}
}
Sys em.ou .p in ln("Lanzados "+k+" Th eads pa a
"+se ido );
o (in =0 ; <k; ++){ //Espe amos a los que hayan
quedado lanzados al inal pe o no sean 5 jus os
y {
hilos[ ].join();
} ca ch (In e up edExcep ion e) {
e.p in S ackT ace();
}
}
Sys em.ou .p in ln("Lanzados odos los Th eads pa a
"+se ido );
}
// Ob iene las u l de cod coinciden es con el el con enido de
busca
p i a e oid di Obje os(S ing cod, S ing busca) {
S ing aux2 = "", u a = "";
S ing obje o = "", enlace = "";
while ( ue) {
i (cod.indexO (busca) < 0) {
b eak;
}
cod = cod.subs ing(cod.indexO (busca) + busca.leng h(),
cod.leng h());
i ( cod.s a sWi h("h ps://")) con inue;
aux2 = cod.subs ing(0, cod.indexO (" "")); // Ex aemos
enlace a enlace
aux2=aux2. eplace("#","");
i ( aux2.con ains("ins ag am") ) con inue;
i (aux2.s a sWi h("h p://")) { // No hace al a
cambia el enlace
u a=aux2;
}
else { // Hay que añadi le h p y el se ido en el que
es a
i ( aux2.s a sWi h("/") ) obje o=aux2;
else obje o = "/" + aux2;
u a = "h p://"+se ido +obje o;
}
//Almacenamos en una lis a los pa es de di eccion y lo
que se necesi a
i ( hash.ge ( u a)==null ){
hash.pu ( u a,"");
lis a.add( u a);
}
cod = cod.subs ing(cod.indexO (" "")+1);
}
Clase Desca gaWeb.ja a
Clase TCPCon.ja a
Po o o lado, la clase TCPCon.ja a ealiza las conexiones al se ido , desca ga los ecu sos y
calcula su amaño. Además, almacena en una lis a de obje os de la clase Pe icion oda es a
in o mación pa a su pos e io análisis es adís ico en la clase Main.ja a.
73
impo ja a.io.Bu e edInpu S eam;
impo ja a.io.Bu e edOu pu S eam;
impo ja a.io.FileOu pu S eam;
impo ja a.io.IOExcep ion;
impo ja a.io.P in W i e ;
impo ja a.ne .Socke ;
impo ja a.u il.Lis ;
impo ja ax.sound.sampled.AudioFo ma ;
public class TCPCon ex ends Th ead {
Socke con;
Bu e edInpu S eam leeSock;
P in W i e escSock;
in po ;
S ing u l="";
S ing hos ; //hos que albe ga el obje o
S ing obje o; //obje o
in amCabece a=0, amBody=0, amTo al=0;
S ing es="";
boolean quie oCodigo= alse, disponible= alse, espe a= alse;
public TCPCon(S ing hos , in pue o, S ing loc) {
po = pue o;
his.hos = hos ;
his.obje o = "/";
}
public TCPCon(S ing hos , in pue o, S ing di , S ing loc) {
po = pue o;
his.hos = hos ;
his.obje o = di ;
}
public oid examinaCodigo() {
y {
conexion.join();
} ca ch (In e up edExcep ion e) {
Sys em.ou .p in ln(" allo en la espe a");
e.p in S ackT ace();
}
lis a=new A ayLis <S ing>();
S ing codigo=conexion.ge Res();
di Obje os(codigo, "s c= "");
di Obje os(codigo, "SRC= "");
di Obje os(codigo, " el= "s yleshee " h e = "");
di Obje os(codigo, "REL= "s yleshee " HREF= "");
di Obje os(codigo, "h e = "");
di Obje os(codigo, "HREF= "");
hash.clea ();
}
}
In eg ación de un p oxy in e so NGINX con un panel de con ol Vi ualmin pa a c ea una pla a o ma
de se icios de hospedaje Web
Cabe des aca que en caso de que no se desee indica la cla e cada ez que el se icio que hace
uso del ce i icado lo equie e, es posible ealiza la i ma del ce i icado despues de gene a el
iche o que con enga la cla e p i ada desci ada. Es o se ealiza ejecu ando el siguien e comando:
openssl sa -in sslci ado.key -ou ssl.key
Una ez ob enidos an o el ce i icado como la cla e, bas a con mo e los iche os al di ec o io aiz
del se ido i ual pa a el que se gene an —po de ec o /home/nomb ese ido /— y einicia
NGINX.
80

81