1. Qu es apache, y qu alternativas hay en el mercado?
Apache es un servidor e! gratuito, potente y que nos ofrece un servicio esta!le y sen"illo de mantener y configurar. #s indiscuti!lemente uno de los mayores logros del $oftare %i!re. &estacaremos las siguientes caracter'sticas( ) #s multiplataforma, aunque idealmente est* preparado para funcionar !a+o linu,. ) -uy sen"illo de configurar. ) #s .pen)source. ) -uy /til para proveedores de $ervicios de 0nternet que requieran miles de sitios peque1os con p*ginas est*ticas. ) 2mplias li!rer'as de 343 y 3erl a disposicin de los programadores. ) 3osee diversos mdulos que permiten incorporarle nuevas funcionalidades, estos son muy simples de cargar. ) #s capa" de utili"ar lengua+es como 343, 5C%, 3ython, etc. #n el mercado podemos encontrar otras alternativas, entre las m*s importantes comentaremos las siguientes( A OLServer( ) #s .pen)source. ) -e+ora varias deficiencias de Apache. ) $e !asa en un desarrollo por threads, con lo cual se reduce la carga so!re la memoria de procesos. ) 6so m*s eficiente de las cone,iones a !ases de datos 7es una de sus principales caracter'sticas8. ) #s utili"ado por A.%, el proveedor de servicios de internet 70$38 m*s grande del mundo. ) -ultiplataforma. IIS (Internet Information Server): ) &esarrollado por -icrosoft. ) $lo funciona !a+o 9indos. ) -uy f*cil de instalar. ) 3roporciona A$3:s, que facilitan el desarrollo de aplicaciones. ) #s un softare propietario, con lo cual su uso tiene un coste. ) 5iene numerosos fallos de seguridad. " Servlet Engines" y "Java Application Server": ) $u representant m*s conocido es 5omcat, desarrollado por $un -icrosystem:s. ) ;equiere de un <&= 7><ava &evelopment ?it>8 para funcionar. ) @ormalmente se usa un >$ervidor de p*ginas> 7Apache, A.%, etc.8 en con+uncin con un >$ervlet #ngine>, dado que el primero es mucho m*s eficiente a la hora de devolver una p*gina 45-% est*tica. A. .pciones para definir la configuracin de apache 3ara definir la configuracin de apache tenemos dos opciones( ) Bichero httpd.conf ) Bichero .htaccess 3rimero de todo comentaremos qu efectos tiene cada uno de los ficheros so!re la configuracin del dominio. #n el caso del fichero httpd.conf estamos definiendo una configuracin glo!al para todos los dominios que se alo+en en el servidor donde se encuentra dicho fichero. #n el caso del fichero .htaccess slo se modificar* la configuracin del dominio en el cual est alo+ado ste. Cuando apache de!e devolver una p*gina e!, en primera instancia lee el archivo httpd.conf, y en segunda instancia el archivo .htaccess, con lo cual siempre tendr* prioridad el segundo. 3asamos a comentar unos cuantos detalles de cada uno de los ficheros de configuracin( Fichero httpdconf: #n este fichero est* incluida toda la configuracin de apache, siempre y cuando no tengamos la configuracin en varios ficheros, de forma distri!uida, 7la distri!ucin de linu, $use, instala apache por defecto en varios ficheros8, para principiantes recomiendo un solo fichero, si se es un usuario m*s avan"ado recomiendo el uso de ficheros separados. @.5A( #n el caso que el archivo de configuracin est distri!uido en varios archivos, dentro del fichero httpd.conf tendremos indicada la ruta a cada uno de los ficheros y los par*metros que podremos modificar en ellos. 3or defecto apache carga la configuracin que est definida en todos los ficheros que tengan e,tensin >.conf>. Fichero htaccess: #ste fichero se u!ica en el directorio rai" donde esten los archivos de la p*gina e!. -ediante ste podremos definir par*metros espec'ficos para el dominio que lo alo+a. #s muy usado en los hostings, dado que evidentemente no pueden de+ar que los usuarios cam!ien la configuracin del archivo httpd.conf seg/n las necesidades de su dominio. Binalmente comentaremos un par de propiedades que nos podr'a interesar cam!iar mediante el fichero .htaccess. 6n e+emplo ser'a la codificacin de la p*gina e!. 3ensemos por e+emplo que el hosting que hemos contratado tiene configurado que nuestras p*ginas est*n codificadas mediante 65B)C, con lo cual los navegadores interpretar*n el contenido seg/n sta codificacin. $i en cam!io nosotros queremos utili"ar la codificacin 0$.)CCDE)1 de!emos >so!reescri!ir> esta propiedad, por lo tanto incorporaremos la siguiente sentencia en el archivo .htaccess( AddDefaultCharset ISO-8859-1 .tra caracter'stica muy utili"ada en los ficheros .htaccess es la que nos permite cam!iar propiedades de 343, con lo cual no tendremos que tener acceso al fichero php.ini para poder configurar ciertas caracter'sticas. 3ara cam!iar una propiedad de 343 utili"aremos la siguiente sinta,is( php_flag "nombre propiedad" "valor" 3or e+emplo, para indicar a apache que deseamos cargar las sesiones a travs de una coo?ie en ve" de pasarlos por la url de!emos usar el siguiente comando( php_fla session!use_onl"_#oo$ies on Como vemos, el fichero .htaccess es una herramienta muy potente que se pone a disposicin del administrador de la p*gina e! para poder personali"ar el servidor apache que nos ofrece el hosting que contratemos. #n las siguientes secciones nos centraremos en las propiedades que podemos modificar dentro del fichero httpd.conf, a/n as' gran parte de ellas est*n disponi!les tam!in para el fichero .htaccess. $i queremos compro!ar la compati!ilidad de estas para el fichero .htaccess solo de!emos dirigirnos a la p*gina http(FFhttpd.apache.orgFdocsFA.GFmodFdirectives.html y !uscar las especificaciones para cada una de las directivas que necesitemos usar. #n las caracter'sticas de la directiva se indica si se puede usar en el fichero .htaccess o no. H. 0nvocacin del servicio de apache Cada uno de los cam!ios que hagamos en el fichero httpd.conf de!e venir acompa1ado del reinicio del servicio de apache, dado que de lo contrario no tendr*n efecto. @o es as' para los cam!ios que se efectuen en el fichero .htaccess, estos ser*n tenidos en cuenta cuando se haga una nueva peticin de la p*gina e!. 3ara poner en marcha apache, de!emos invocar el servicio que inicia el demonio. $i deseamos que durante el inicio del apache se nos muestren los mensa+es que va devolviendo el servicio de apache por pantalla, de!emos usar la directiva apachectl, en el caso que no deseemos que se muestren los mensa+es podemos usar la directiva httpd. 5anto apachectl, como httpd aceptan los par*metros start, stop y restart. 3ara reiniciar el servicio de!eremos usar el siguiente comando( %et#%init!d%apa#he& restart 7#n el caso que usemos ApacheA8 %et#%init!d%apa#he restart 7#n el caso que usemos Apache 1.H8 #n el caso que estemos tra!a+ando so!re indos de!emos seguir los siguientes pasos( Ini#io-'(anel de #ontrol-')erramientas administrativas-'Servi#ios-'Apa#heI I#l nom!re del proceso de apache puede variar seg/n la versin de apache que tengais instalado o si usais alg/n paquete que incluya mysql, php y apache 7como por e+emplo ApacheA5riad8. #stos paquetes son muy /tiles para los rogramadores que necesitan instalar un entorno de preproduccin o !ien para principiantes. J. &efinicin de las varia!les m*s importantes #n esta seccin vamos a definir las varia!les que m*s importancia tienen durante la configuracin de apache. Kstas nos van a permitir optimi"ar la respuesta a la hora de servir las p*ginas y me+orar la seguridad del servidor. Server!oot "etc"httpd" ) &irectorio en el cual se encuentran los ficheros de configuracin de apache. #imeo$t %&& ) 5iempo 7en segundos8 antes de reci!ir una se1al de timeout, que significa que la p*gina no ha podido ser cargada por alg/n motivo. 'ser apache ) 6suario que va a e+ecutar el proceso de apache. -ucho cuidado con esta varia!le, dado que tiene gran importancia a la hora de tener un servidor seguro. &e!emos asegurarnos que el usuario apache tenga unos privilegios muy limitados, a poder ser solo de escrituraFlectura so!re los directorios utili"ados para guardar la p*gina y de acceso a la !ase de datos. ServerAdmin admin(localhost ) Cuenta de correo donde se van a enviar los emails de aviso en caso de que apache de+e de responder por alg/n motivo. )oc$ment!oot "*e+"contenido" ) &irectorio donde se encuentran los ficheros de la p*gina e!. Aqu' guardaremos el repositorio de la p*gina, y por lo tanto ser* donde los usuarios tengan acceso. ;ecomendamos tener mucho cuidado en el tipo de ficheros o su!directorios a los cuales tienen acceso los usuarios, stos los podemos proteger mediante el tag LFfileMLFfileM o !ien LdirectoryM LFdirectoryM. %a sinta,is de stos se muestra en secciones posteriores. AccessFile,ame htaccess ) @om!re del fichero que va a contener informacin suplementaria de configuracin del apache. %o hemos mencionado anteriormente. ) 3ara !loquear el acceso a este fichero a los usuarios 7dado que se tiene que u!icar en el directorio especificado por &ocument;oot se de!e usar la siguiente sentencia( *files + ",-!ht"' Order allo./ den" Den" from all *%files' Con estas sentencias estamos indicando que los directorios que empie"en por .ht no sean visi!les para los usuarios. ErrorLog logs"error-log ) Archivo donde se registrar*n los errores que se produ"can durante el inicio o e+ecucin de apache, y que por lo tanto de!emos tener muy presente cuando tengamos pro!lemas con apache. .$stomLog logs"access-log com+ined ) Archivo donde se registrar*n los accesos a la p*gina e!. $e guardar* el acceso, el agente y el referer. ) $i queremos que se registren el agente y el referer en archivos diferentes de!emos usar las siguientes sentencias( ) .$stomLog logs"agent-log agent Nuarda los agentes. ) .$stomLog logs"referer-log referer Nuarda los referers. Add)efa$lt.harset ISO/0012/3 ) &efinicin del tipo de condificacin. 0$.)CCDE)1 es un estandard muy e,tendido de codificacin, ahora !ien, para internacionali"ar la e! se puede usar tam!in el charset 65B)C. #s muy recomenda!le definir un charset y no de+ar que el navegador lo esco+a por defecto, dado que la interpretacin del tipo de codificacin puede no ser correcta y la p*gina no se ver* correctamente. Error)oc$ment 4&4"4&4html ) Archivo que se va a mostrar al producirse un error JGJ. #sta misma sinta,is sirve para los otros tipos de error, por e+emplo( ) #rror&ocument HGAFHGA.html 7donde HGA.html es el nom!re que nosotros le damos al archivo, lo escogemos nosotros8. #videntemente hay muchas m*s propiedades que entran en +uego a la hora de configurar apache, para encontrar una descripcin de cada una de ellas os remito a la siguiente p*gina( http(FFhttpd.apache.orgFdocsFA.GFmodFdirectives.html. J. Cargar un mdulo 5al como hemos comentado en la primera seccin, una de las principales caracter'sticas de apache es que nos permite cargar una serie de mdulos que no vienen instalados por defecto. -ediante stos podremos implementar p*ginas con lengua+es como 343, 3ython, conectarnos a una !ase de datos, etc. #stos mdulos son de tipo &$., mdulos que se cargan en tiempo de e+ecucin, y que por lo tanto no consumen memoria si no son necesarios. 3asamos a comentar como podemos cargar estos mdulos, sin em!argo ya avan"amos que su carga es e,tremadamente simple. 3rimero de todo nos de!emos asegurar que el mdulo que deseamos cargar e,iste en el directorio donde stos est*n guardados. @ormalmente los podremos encontrar en el directorio path_apa#he%modules. #l segundo paso es indicarle a apache que de!e cargar el mdulo( 3ara indicar el directorio y nom!re del fichero, de!emos usar la siguiente sentencia( Load5od$le nom+re-mod$lo mod$les"nom+re-archivoso 3or e+emplo( Load5od$le access-mod$le mod$les"mod-accessso Oemos que la sinta,is es muy simple, solo de!emos indicarle que tenemos disponi!le un mdulo espec'fico mediante %oad-odule, el mdulo que estamos cargando 7en este caso accessPmodule8, y a continuacin le indicamos donde se encuentra, 7en este caso modulesFmodPaccess.so8. &espus de reiniciar apache, si no hay ning/n pro!lema con la sinta,is anteriormente comentada y el fichero que implementa el mdulo se encuentra disponi!le, el mdulo ser* cargado. D. &efinicin de permisos de los directorios Anteriormente hemos comentado como se proteg'a el fichero .htaccess, para ello hemos usado una sentencia que prohi!e la lectura de dicho fichero a los usuarios. Ahora procederemos a comentar !revemente la sinta,is que siguen este tipo de sentencias. 3ara definir los directorios a los cuales queremos permitirFdenegar el acceso a los usuarios vamos a usar la directiva( *Dire#tor" %' %%dire#tivas para permitir o denear el a##eso al dire#torio *%Dire#tor"' $i queremos restringir o permitir la lectura en un fichero vamos a utili"ar la siguiente sinta,is( *0ile %' %%dire#tivas para permitir o denear un fi#hero a los usuarios *%0ile' 3ara especificar el directorio al cual queremos permitir o restringir el paso de!emos indicarlo mediante su ruta, o !ien mediante una e,presin regular, si estamos tratando con una serie de ficheros que siguen un patrn espec'fico. 3or e+emplo, si queremos denegar el paso a un directorio espec'fico( *Dire#tor" %usr%private_dire#tor"' Order Den"/Allo. Den" from all *%Dire#tor"' ) Con esta sentencia conseguimos que los usuarios no puedan acceder al directorio FusrFprivatePdirectory. $i en cam!io queremos restringir el acceso a un cierto tipo de ficheros, vamos a usar una e,presin regular, por e+emplo( *files + ",-!ht"' Order allo./ den" Den" from all *%files' ) #n este caso denegamos la lectura de los ficheros que empie"en por .ht 7como por e+emplo el fichero .htaccess8. $i queremos permitir el paso a los directorios especificados o !ien denegarlo, seguiremos la siguiente sinta,is( ) 3ara denegar el paso( )eny from $s$arios, donde usuarios puede ser all 7para denegar el paso a 5.&.$ los usuarios8 o !ien una 03, etc. ) 3ara permitir el paso( Allo* from $s$arios, donde usuarios puede ser all 7para denegar el paso a 5.&.$ los usuarios8 o !ien una 03, etc. Q. Oirtualhosts -ediante los virtualhosts podremos tener varios dominios apuntando a una misma m*quina. &entro de cada virtualhost definiremos las directivas espec'ficas para el dominio que est representando. Ksta es otra forma de definir la configuracin de apache de modo local, con lo cual slo afectar* a un dominio o su!dominio 7recordemos que el fichero .htaccess sirve para lo mismo8. 3odemos definir un virtualhost a travs de una 03 o !ien a travs de un name)!ased virtual host, para el segundo caso utili"aremos un I para representarlo. 3or lo tanto la sinta,is de un virtualhost es la siguiente( 1ame2irtual)ost ip_ma3uina485 *2irtualhost 6' %% Dire#tivas espe#7fi#as del virtualhost! *%2irtualhost' .!servamos que hemos implementado la definicin de un virtualhost a travs de un name) !ased virtual host. 3ara ello hemos utili"ado el par*metro @ameOirtual4ost, la 03 de la m*quina donde se encuentra instalado apache, y el puerto por el cual escuchar*, en este caso el puerto CG. $eguidamente hemos definido el espacio en el cual implementaremos los detalles espec'ficos del dominio que representar* el virtualhost mediante los tags LOirtualhostM y LFOirtualhostM. @.5A( ;ecordar que para que los cam!ios en el fichero de configuracin httd.conf tengan efecto, se de!e reiniciar el servicio de apache. R. Oaria!les importantes Acto seguido pasamos a detallar algunas de las varia!les que suelen utili"arse en los virtualhosts. %a mayor'a de las propiedades ya fueron comentadas anteriormente, con lo cual no las volveremos a comentar. ServerAdmin admin8lo#alhost Do#ument9oot "et#%httpd" Server1ame dominio!#omCustom:o los%a##ess_lo Dire#tor"Inde; inde;!php &efine el dominio con el cual tendr* efecto la configuracin que definamos en este virtualhost. <rror:o los%error_lo 0ndica el fichero que se va a cargar en el caso que apache reci!a la peticin de cargar un directorio sin especificar ning/n fichero. 3or e+emplo( $i apache reci!e la url http(FF.dominio.comF por defecto va a cargar el fichero inde,.php. $i hacemos una lista de ficheros en la misma directiva se va a intentar cargar cada uno de los ficheros por orden de colocacin en la lista. php_value mai#_3uotes_p# 5 #sta directiva va a hacer que todos los car*cteres :, >, S y @6%% sean escapados con una !arra invertida autom*ticamente. Con sto vamos a conseguir evitar muchos de los ataques m*s sen"illos de sql0n+ection. %a directiva phpPvalue sirve para redefinir las propiedades que se encuentran en el fichero php.ini, que es el fichero de configuracin de php. #s muy /til cuando tenemos m*s de un dominio apuntando al mismo host, ya que podemos modificar ciertas directivas de php para cada uno de los dominios. $i queris una gu'a de las directivas del fichero php.ini os podis dirigir a sta p*gina. C. ;erite;ules ;erite;ule rela_de_apa#he -ediante esta directiva podremos convertir p*ginas din*micas en est*ticas. #n este art'culo no vamos a detallar el funcionamiento de las ;erites;ules, sin em!argo intentaremos dar una idea de stas. %a mayor'a de las veces implementamos p*ginas e! en lengua+es din*micos, estos nos permiten pasar una serie de varia!les a travs de la url, como ser'a el caso de este e+emplo( http(FF.dominio.comFdirectorio1Ffichero.php?var1T1UvarATA %as desventa+as que tiene una url de este estilo sn las siguientes( ) %os !uscadores slo aceptan cierto n/mero de varia!les pasadas a travs de la url. ) 3ara los usuarios es muy complicado guardar o memori"ar url:s tan complicadas. ) #l posicionamiento en los !uscadores de una url din*mica es muy complicado. 3or todos estos puntos, las ;erite;ules son cada ve" m*s importantes en el proceso de dise1o de una p*gina e!. Cmo funciona una ;erite;ule? -uy f*cil, cuando apache reci!e una url comprue!a que la sinta,is de sta coincida con alguna de las e,presiones regulares definidas en las rerite;ules, en el caso de coincidir aplica la ;erite;ule, la cual aplica alg/n tipo de proceso, como puede ser una redireccin. Con un e+emplo se ver* mucho m*s claro( $upongamos que queremos redireccionar las p*ginas que empie"an por >patata> a un fichero espec'fico. %o que har'amos ser'a hacer una ;erite;ule con una e,presin regular que identificara estas p*ginas, y que una ve" las hu!iera identificado las reenviara al fichero que le especificamos. %a regla quedar'a de la siguiente forma( !e*rite!$le 6"patata-(7)"8 "directorio9"fichero9php":3 ;L< 3ara poder utili"ar ;erite;ules de!emos tener en cuenta dos puntos. 3rimero de!emos cargar el mdulo mod-re*riteso, tal como hemos especificado en p*ginas anteriores, y segungo introducir la directiva !e*riteEngine On en el virtualhost. E. 3lataforma %A-3 6na plataforma %A-3 es un con+unto de herramientas opensource que tra!a+ando +untas nos permiten disponer de un servidor e!. %as herramientas que aglutina el trmino %A-3 sn %inu,, Apache, -y$Q% y 343, 3erl, o 3ython , con lo cual conseguimos todo lo que de!e tener una plataforma e!, que es un sistema operativo, un servidor e!, una !ase de datos, y un lengua+e de programacin. %as plataformas %A-3 est*n siendo muy !ien aceptadas entre los proveedores de servicios e!. Como venta+as a destacar( ) #st* compuesta de softare con licencia gratuita. ) #l cdigo de todos sus componentes est* disponi!le, con lo cual se pueden hacer las modificaciones que se crean oportunas. 1G. ;eferencias http(FF.apache.orgF )) 3*gina oficial de apache. http(FF.augcyl.orgFglolFapacheA.html )) gu'a muy completa so!re todos los par*metros del fichero de configuracin de apache. http(FF.programacionphp.net