Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Instalación y configuración
de Apache
Manual por: DesarrolloWeb.com [http://www.desarrolloweb.com/] Versión on-line:
"Tu mejor ayuda para aprender a hacer webs" http://www.desarrolloweb.com/manuales/41
z Módulos Multiproceso: son los responsables de la unión con los puertos de la máquina,
acepando las peticiones y enviando a los hijos a atender a las peticiones
z Módulos Adicionales: Cualquier otro módulo que le añada una funcionalidad al servidor.
perchild: Módulo multiproceso que permite a los procesos demonio servir las peticiones que se
asignan a distintos id de usuario.
Módulos adicionales:
mod_access: proporciona control de acceso basándose en el nombre del host del cliente, su
dirección IP u otras características de la petición del cliente.
mod_actions: este módulo se utiliza para ejecutar Scripts CGI, basándose en el tipo de medio
o el método de petición.
mod_alias: proporcionado para mapear diferentes partes del sistema de ficheros del servidor
en el árbol de documentos del servidor, y para redirección de URL's.
mod_dir: Proporcionado para redirecciones y para servir los ficheros de listado de directorios.
mod_echo: Un servidor simple de echo para ilustrar los módulos del protocolo.
mod_env: modificación del entorno que se envia a los scripts CGI y las páginas SSI.
mod_mime: asocia las extensiones de peticiones de los ficheros con el comportamiento del
fichero (manejadores y filtros) y contenido (tipos mime, idioma, juego de caracteres y
codificación).
mod_mime_magic: determina el tipo MIME de un fichero mirando unos pocos bytes del
contenido.
mod_so: carga del código ejecutable y los módulos en al iniciar o reiniciar el servidor.
mod_speling: intenta corregir las URL mal puestas por los usuarios, ignorando las mayúsculas
y permitiendo hasta una falta.
mod_ssl: criptografía avanzada utilizando los protocolos Secure Sockets Layer y Transport
Layer Security.
mod_suexec: permite a los scripts CGI ejecutarse con un nombre y grupo específico.
Descarga de Apache
Una vez en la página de descarga debemos buscar la última versión estable o la versión que
recomendada. El servidor está disponible para sistemas Unix o Windows, por lo que nos
ofrecerán diversas opciones de descarga, incluso para obtener el código fuente del programa. Si
deseamos instalarlo en un sistema Windows, necesitamos obtener el archivo Win-32 Binary,
que es un instalador Windows.
Instalación
Una vez descargado, debemos instalarlo en nuestro sistema, ejecutando el archivo obtenido.
Daremos paso a un asistente que nos guiará en el proceso de instalación del servidor. Durante
el proceso nos preguntará el nombre del dominio y del servidor, que podemos rellenar con
"localhost". Nos pedirá también una dirección de correo, que podemos rellenar con cualquiera
que deseemos. También nos pregunta si deseamos que el servidor responda en el puerto 80
para todos los usuarios o si deseamos que sólo se active para el usuario actual en el puerto
8080, cuando se inicie manualmente. Lo normal es que lo activemos para todos los usuarios.
Con estos datos queda configurado el Apache inicialmente. En cualquier momento podemos
editarlos a nuestro gusto o necesidades. Para ello deberemos editar el fichero httpd.conf, que
se encuentra en el directorio de instalación de Apache, que hemos indicado durante el proceso
de instalación, más concretamente, en el subdirectorio conf. En adelante en este manual
podremos aprender las configuraciones más habituales.
Nota: Debemos ir con cuidado de no tener otro servidor configurado para trabajar en el puerto 80 (por
ejemplo el servidor IIS que viene en las versiones profesionales o servidor de Windows). En caso de tener
en marcha otro servidor web durante la instalación, puede fallar y mostrarnos un mensaje de error que
indique esto precisamente, es decir, que no podemos tener dos servidores a la vez escuchando en el
puerto 80.
Para solucionar el problema basta con que paremos el IIS o el otro servidor que esté funcionando. El IIS
lo podemos parar accediendo a Panel de control - Herramientas administrativas - Servicios de Internet
Information Server. La pantalla que sale es la consola de administración del sistema. Aquí debemos
desplegar el árbol de la izquierda, pulsando sobre el signo "+", hasta que encontremos el "Sitio web
predeterminado". Nos ponemos encima de él y apretamos el botón de STOP que está situado en la barra
de herramientas de la consola de administración. También podemos encontrar una opción para detener el
servicio pulsando con el botón derecho en el "Sitio web predeterminado".
Una vez instalado, el Apache se pone en funcionamiento. Para controlar el Apache podemos
encontrar en el botón de inicio, sección programas, un nuevo grupo llamado "Apache HTTP
Server", con iconos para detener el servidor, ponerlo en marcha, editar el archivo de
configuración httpd.conf o para ver los logs de acceso. También podemos ver en la barra de
tareas un nuevo icono que indica que el Apache está funcionando y que ofrece opciones para
controlarlo si pulsamos sobre él.
Para comprobar que el servidor está activo y funciona correctamente podemos abrir un
Instalación y configuración de Apache - Manual completo Página 5 de 22
explorador y probar a acceder a la URL http://localhost, que es nuestro propio servidor. Si todo
ha ido bien observaremos el mensaje de bienvenida del servidor con algo como "Funciono! ¡El
servidor Apache ha sido instalado en este equipo!".
Para seguir aprendiendo a configurar Apache es interesante leerse nuestro Manual de instalación y
configuración de Apache [http://www.desarrolloweb.com/manuales/41/],
que explica dónde debemos cambiar
las opciones más comunes del servidor.
error: ficheros con los mensajes de error del servidor, en varios lenguajes.
htdocs: directorio raíz por defecto del servidor (Se guardan las páginas Web).
icons: directorio donde se encuentran los iconos que utiliza el servidor (entre otras cosas para
mostrar estructuras de directorios).
logs: directorio donde se almacenan los registros de acceso y errores del servidor.
Básicamente las configuraciones del servidor residen dentro de dos ficheros, el de configuración
principal que se encuentra dentro de la carpeta conf, con el nombre httpd.conf, o dentro de un
fichero con el nombre .htaccess que se puede encontrar dentro de cualquier directorio que se
encuentre mapeado dentro del servidor. Dentro de cada uno de estos ficheros se ubican las
directivas de configuración. Muchas de estas directivas de configuración se pueden encontrar
tanto dentro del fichero de configuración principal como dentro de un fichero .htaccess. Los
valores de las directivas que se encuentran dentro de un fichero .htaccess, prevalecen frente a
los valores de configuración especificados dentro del fichero httpd.conf.
El fichero httpd.conf
El fichero httpd.conf es el fichero principal de configuración del Apache, se encuentra dentro del
directorio Conf, en el directorio de instalación del Apache.
En primer lugar hay que destacar que el fichero está dividido en tres secciones, que son:
1º Parámetros globales
2º Directivas de Funcionamiento
3º Host Virtuales
<Directory> : Los parámetros que se encuentran dentro de esta sección, sólo se aplicarán a el
directorio especificado y a sus subdirectorios.
<DirectoryMatch>: Igual que Directory, pero acepta en el nombre del directorio expresiones
regulares.
<Files>: Los parámetros de configuración proporcionan control de acceso de los ficheros por su
nombre.
<FilesMatch>: Igual que Files, pero acepta expresiones regulares en el nombre del fichero.
<LocationMatch>: Igual que Location, pero acepta expresiones regulares en el nombre del
fichero.
Algunas veces las directivas de funcionamiento de las secciones anteriores se pueden cruzar en
cuyo caso tienen el siguiente orden de preferencia:
También hay que destacar, que el fichero contiene un montón de comentarios para su correcta
utilización, las líneas comentadas aparecen con el símbolo #.
ServerRoot: especifica la ubicación del directorio raíz donde se encuentra instalado el Apache,
a partir del cual se crea el árbol de directorios comentado anteriormente. Esta directiva no
debería cambiar a no ser que se mueva la carpeta de instalación de apache a otro directorio. Se
encuentra disponible a través del módulo Core.
PidFile: ubicación del fichero que contendrá el número de identificación del proceso cuando se
encienda el servidor. Se encuentra disponible a través de varios módulos beos, leader,
mpm_winnt, mpmt_os2, perchild, prefork, threadpool ó worker
1. El tiempo tal que puede tardar una petición en ser recibida entera
2. La cantidad de tiempo que espera entre recepción de paquetes TCP
3. La cantidad de tiempo entre ACK's en transmisiones TCP
Pasado este tiempo se produce un mensaje de error en el que se indica que se ha consumido el
tiempo máximo de espera. Establecer un valor muy pequeño puede dar lugar a que los usuarios
reciban este mensaje de error, y establecer un valor muy pequeño dará lugar a una sobrecarga
de la máquina. Se encuentra disponible a través del módulo Core.
KeepAlive: especifica si se utilizarán conexiones persistentes, es decir, que todas las peticiones
de un usuario se atenderán con la misma conexión. Se encuentra disponible a través del
módulo Core.
usuarios concurrentes si KeepAlive esta en ON). Para establecer este parámetro, hay que tener
en cuenta el ancho de banda de salida de nuestro servidor, por el cual deberá ser enviada toda
la información, si se establece un valor muy grande respecto al ancho de banda, el tiempo de
respuesta se verá incrementado para cada usuario. Se encuentra disponible a través del módulo
Core.
Si el valor es muy pequeño provocará que algunos usuarios no puedan visualizar la página
debido a que el número máximo de conexiones persistentes se ha superado, mientras que si se
establece un valor muy grande se estarán utilizando muchos recursos de la máquina. Se
encuentra disponible a través del módulo Core.
Listen: esta directiva permite especificar que puerto se utilizará para antender las peticiones.
Por defecto se utiliza el puerto 80 (www), también permite especificar que direcciones IP
atenderá, por defecto todas. Para atender dos direcciones IP distintas, con distintos puerto, se
utilizaría:
Listen 192.168.255.5:80
Listen 192.168.255.8:8080
LoadModule: Directiva que sirve para cargar módulos que incluyen distintas funcionalidades.
La sintaxis es:
La sintaxis es:
DocumentRoot: la carpeta raíz que se ubica en el servidor, desde la que se servirán los
documentos. Por defecto, todas las peticiones, tendrán como raíz esta carpeta, a no ser que se
utilicen alias (directorios virutales en IIS)
Por defecto, la carpeta raíz es la carpeta Htdocs, que se encuentra en la carpeta de instalación
Instalación y configuración de Apache - Manual completo Página 8 de 22
Si se cambia este directorio por otro, es muy importante que se ponga el nuevo valor, no solo
en esta línea, sino también en la sección <Directory> en la que se establecen los parámetros
de configuración de este directorio.
Esta línea empieza por " <Directory " seguido de la carpeta raíz que originalmente hay en
DocumentRoot.
DirectoryIndex: especifica el fichero por defecto que buscará en cada directorio, en caso de
que no se especifique ninguno. Por defecto es index.html. Es decir, que si por ejemplo se pone
en el navegador: www.desarrolloweb.com el servidor por defecto servirá
www.desarrolloweb.com/index.html
La directiva se puede encontrar fuera de cualquier sección, dentro de una sección o dentro de
un fichero .htaccess.
AccessFileName: es el nombre del fichero de configuración que se buscará en cada una de los
directorios del servidor para conocer la configuración del mismo. Este fichero permite configurar
el comportamiento de cada uno de los directorios individualmente. Para que esta configuración
funcione, la directiva AllowOverride tiene que tener un valor que lo permita. No puede estar
dentro de ninguna sección.
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>
DefaultType: tipo mime que se servirá por defecto en caso de no conocer la extensión del
fichero que se está sirviendo. Por defecto, se indicará que se sirve texto plano, con el valor
text/plain. La directiva se puede encontrar fuera de cualquier sección, dentro de una sección o
dentro de un fichero .htaccess.
ErrorLog: especifica la ubiación del fichero que contiene el registro de errores, por defecto en
la carpeta logs. Esta directiva sólo se puede encontrar fuera de cualquier sección.
Valor de más a menos son: debug, info, notice, warn, error, crit, alert, emerg
LogFormat: la directiva permite definir el formato que se utilizará para almacenar los
registros. A cada formato se le puede asignar un nombre, utilizándolo luego para crear distintos
tipos de ficheros de registro. Pueden existir varios logFormat distintos.
Sintaxis:
-Full
Sintaxis:
FancyIndexing: que muestra los nombres de los ficheros, con iconos etc..
FoldersFirst: Hace que primero se muestren los directorios. Esta opción sólo se puede
establecer en el caso de que FancyIndexing este activa.
Esta directiva se puede encontrar dentro del fichero .htaccess, dentro de una sección
<Directory> y fuera de cualquier otra.
Sintaxis:
Ejemplo:
AddIconByEncoding/icons/compressed.gif x-compress
Esta directiva se puede encontrar dentro del fichero .htaccess, dentro de una sección
<Directory> y fuera de cualquier otra.
AddIconByType: Esta directiva asocia un icono a un fichero dependiendo del un tipo mime, de
forma que cuando la directiva fancyIndexing este activada, se mostrará al lado del fichero el
icono correspondiente.
Sintaxis:
Ejemplo:
Ambas directivas se pueden encontrar dentro de el fichero .htaccess, dentro de una sección
<Directory> o fuera de cualquier otra.
AddDescription: Esta directiva permite asociar una descripción a un tipo de fichero, que se
mostrará al listar un directorio. Esta directiva se puede encontrar dentro de el fichero .htaccess,
dentro de una sección <Directory> o fuera de cualquier otra.
Sintaxis:
Hay que tener en cuenta que si el texto de error se envia a Internet Explorer, este tendrá que
tener al menos 512 Bytes, porque sino Internet Explorer mostrará su propia página de error.
Sintaxis:
Esta directiva se puede encontrar tanto dentro del fichero .htaccess, dentro de la sección
<Directory> o fuera de cualquier otra sección.
Ejemplo:
CacheRoot: establece el directorio donde se encontrarán los ficheros de la cache del Apache.
CacheDefaultExpire: Número de horas por defecto a partir de las cuales un fichero caduca. Se
aplica en aquellos casos en los que no se puede determinar la hora de creación del fichero.
Todas las directivas de la caché, deben encontrarse fuera de cualquier sección. Esta directiva no
se puede encontrar dentro de ninguna sección.
Alias
Sintaxis:
Alias nombreFicticio ubicacionReal
Ejemplo:
Alias /manual/php "c:\php"
AliasMatch
Sintaxis:
AliasMatch Expresión regular ubicación
Seguridad en Apache I
Cuando un servidor apache recibe una petición de una página web, antes de devolver el
resultado, lleva a cabo varias acciones para verificar que la petición esta autorizada.
Las distintas acciones que lleva a cabo para verificar la validez de la aplicación, se pueden
agrupar en tres tipos: Autentificación, Autorización y Control de Acceso.
La autorización es el proceso por el cual se verifica que un usuario con una identidad conocida,
tiene acceso al recurso solicitado. Para llevar a cabo esta acción, se suelen utilizar listas de
permisos en las cuales se enumeran cada una de las acciones que puede realizar un usuario, o
las que no puede hacer. Normalmente, para simplificar la gestión de estos ficheros, los usuarios
se suelen unir en grupos proporcionando los permisos al grupo.
El control de acceso es el proceso por el cual se verifica que la máquina desde la que se ha
hecho la petición, tiene acceso al recurso. Los controles de acceso se utilizan para limitar y
controlar las máquinas que tienen acceso a un recurso independientemente del usuario que
accede, ya que estos controles se llevan a cabo antes de que se realice el proceso de
autentificación.
En todo caso y para poder llevar a cabo la configuración de las tres características aquí
enumeradas, autentificación, autorización y control de acceso, es necesario tener la directiva
AllowOverride con el valor AuthConfig, para así permitir el uso de las distintas directivas de
autentificación.
Para configurar el servidor apache para que sea capaz de autentificar a los usuarios y verificar
la autorización del mismo al recurso solicitado, es necesario realizar las siguientes acciones:
Instalación y configuración de Apache - Manual completo Página 14 de 22
En los ficheros de grupos de apache, en cada línea se especifica un grupo escribiendo el nombre
del grupo seguido de dos puntos, y a continuación separado por espacios, los nombres de los
usuarios.
Es recomendable que tanto los ficheros de usuarios como los de grupos, se encuentren
almacenados fuera de los directorios publicados, para que de esta forma nadie pueda
descargarlos. Asimismo, solo el usuario root debería estar autorizado a escribir en él, mientras
que solo el usuario que ejecuta el servicio web, debería estar autorizado para leerlo.
El fichero de grupos se puede crear manualmente, pero el fichero con los usuarios es
recomendable crearlo mediante la utilidad htpasswd, que se encuentra en la carpeta con los
binarios de apache.
El flag -c se utiliza para crear un fichero nuevo, por lo que sólo se deberá poner la primera vez
que se crea el fichero, sino lo borrará.
Los módulos que intervienen en la autentificación y autorización son los de core y mod_auth.
Las directivas de mod_auth necesarias para configurar la autenticación y autorización son las
siguientes:
Las directivas de core necesarias para complementar la configuración del módulo son:
Al hacerlo, pedirá que se introduzca la clave, y esta será codificada, escribiendo el fichero.
2º Crear un nuevo fichero, en la misma ubicación que "ruta", que se llamará "groups" en la que
se almacenarán los grupos, por ahora uno, para ello escribir la siguiente línea y guardar el
fichero:
usuariosAutenticados: Carlos
De esta forma, debería tener un fichero que se llame passwords, y que contenga una línea con
los datos del usuario Carlos, y un fichero, con nombre groups, que contiene una línea
definiendo un grupo llamado usuariosAutenticados, del que sólo el usuario Carlos forma parte.
3º Crear un fichero con el nombre .htaccess en la carpeta que se quiere proteger, y escribir las
siguientes líneas y guardar el fichero:
AuthType Basic
AuthName "ServidorPruebasCarlos"
AuthUserFile /ruta/passwords
AuthGroupFile /ruta/groups
Require group usuariosAutenticados
z Con "AuthType Basic" se estará protegiendo la carpeta con autentificación básica, es decir
que la clave que el usuario introduzca, se transmitirá sin cifrar por la web.
z Con "AuthName "ServidorPruebasCarlos" se asociará esta carpeta con el dominio
"ServidorPruebasCarlos", nombre con el que lo identificará el cliente.
z Con "AuthUserFile /ruta/passwords" y "AuthGroupFile /ruta/groups" Se definirá la
ubicación tanto de los ficheros de usuarios como los ficheros de grupos y se almacenarán
en la carpeta /ruta, con nombres passwords y groups respectivamente.
z Con "Require group usuariosAutenticados" se autorizará el acceso al contenido de esta
carpeta a todos los usuarios que forman parte del grupo de "usuariosAutenticados", por lo
que en la práctica se autorizará el acceso al contenido al usuario Carlos.
Por este motivo existe el mod_auth_mysql, este módulo permite gestionar la autentificación y
autorización, almacenando los usuarios y los grupos en tablas de Mysql, de forma que incluso
se pueden gestionar mediante un panel de control escrito en php.
Para utilizar el módulo es necesario disponer de al menos una tabla donde se almacenen los
usuarios y otra donde se almacenen los grupos. Para ello se puede crear una tabla usuarios con
los campos, nombre y password, y otra tabla llamada grupos con los campos grupo, usuario,
almacenando una entrada por cada usuario que tenga un grupo.
La configuración es la siguiente:
Para configurar el módulo será necesario establecer los valores de las siguientes directivas del
módulo:
Además será necesario establecer las siguiente directivas de core para su correcto
funcionamiento:
Las directivas con las que cuenta el módulo para permitir o denegar el acceso son:
z Allow: controla los servidores que tendrán acceso al contenido, por ejemplo:
Allow from
Permite el acceso desde desarrolloweb.com
desarrolloweb.com
Allow from 192.168.0.1 Permite el acceso desde 192.168.0.1
Instalación y configuración de Apache - Manual completo Página 17 de 22
Hay que tener en cuenta que el uso de order junto con Allow from all ó Deny from all, permite
especificar configuraciones como, permitir desde una máquina x y denegar del resto, de una
forma muy sencilla.
Mediante el uso conjunto de las directivas Allow, Deny, Order y SetEnvIf se puede restringir el
acceso a un sitio dependiendo del tipo de navegador. Para realizarlo simplemente basta con
crear una variable de entorno dependiendo del tipo del navegador, y permitir el acceso a las
peticiones que cuenten con esta variable de entorno denegándoselo al resto.
Para ello la configuración necesaria es la siguiente:
En la primera línea se especifica que se creará una variable de entorno llamada entrar cuando
el navegador sea el motor de indexación de google.
En el caso de que entre el motor de indexación de google, primero se leerá la línea en que se
deniegan todas las peticiones, para a continuación leer la línea en la línea en la que se permite
el acceso desde las peticiones que tienen definida la variable entrar, como el navegador que lo
hace es el googlebot, esta variable estará definida y entrará.
En el caso en que la petición sea realizada por cualquier otro navegador, primero se leerá la
línea en la que se deniegan las peticiones, y como no satisface la línea en que lo permite, no
entrará
Instalación y configuración de Apache - Manual completo Página 18 de 22
¿ Alguna vez has implementado clases que gestionaran directamente datos de configuración ?
Si la respuesta es afirmativa, seguramente hayas reinventado la rueda.
En este pequeño tutorial, voy a nombrar un API que a mi personalmente me parece de una
enorme utilidad y potencia para la gestión de datos de configuración. Se trata de Apache
Jakarta Commons Configuration.
Algunos ejemplos
Antes de nada, deseo resaltar que este tutorial es sólo una introducción al API, y que debe
documentarse en la Web oficial del API para ver todas las posibilidades que nos proporciona
este API.
Ejemplo 1
app.windows.properties:
Instalación y configuración de Apache - Manual completo Página 19 de 22
userform.title=Gestión de usuarios
userform.width=320
userform.height=200
userform.state=normal
try {
// Leemos los datos de configuración. El fichero debe estar en el mismo directorio que la
aplicación.
PropertiesConfiguration config = new PropertiesConfiguration("app.windows.properties");
Ejemplo 2
Ahora vamos a ver las posibilidades de este API para tratar con propiedades Jerárquicas en
formato xml.
app.windows.properties.xml
<dimension>
<width>800</width>
<height>600</height>
</dimension>
Instalación y configuración de Apache - Manual completo Página 20 de 22
<state>maximized</state>
</mainmdi>
<userform>
<title>Gestión de Usuarios</title>
<dimension>
<width>800</width>
<height>600</height>
</dimension>
<state>normal</state>
</userform>
<printer.form>
<dimension>
<width>320</width>
<height>200</height>
</dimension>
</printer.form>
<languages default="Castellano">
<language>Castellano</language>
<language>English</language>
<language>French</language>
</languages>
</gui>
Ahora podemos acceder a los datos de la siguiente forma. El ejemplo es autodescriptivo y está
comentado.
try {
// Leemos los datos de configuración. El fichero debe estar en el mismo directorio que la aplicación.
XMLConfiguration config = new XMLConfiguration("app.windows.properties.xml");
Este API también nos da la posibilidad de que se recargen automáticamente los datos de
configuración sobre el objeto Configuration en caso de que estos hayan sido modificados.
Para habilitar esta característica deberá indicarlo mediante la siguiente línea de código:
config.setReloadingStrategy(new FileChangedReloadingStrategy());
Conclusiones
A mi juició este API es más completo, potente y flexible que el resto de APIS o métodos para
gestionar datos de configuración.
Cuando utilizamos objetos Properties para gestionar las propiedades, debemos realizar
conversiones de tipos de datos, con este API nos ahorramos ese trabajo.
Por comentar algo negativo, este API depende de otros subprojectos de Jakarta, por lo que
debemos incluir sus JARs asociados si queremos usarlo. Por ejemplo, para usar las funciones
básicas, el API depende de:
Volver [http://www.desarrolloweb.com/manuales/41]