17. Apache - Configuración
1.1 Archivos de configuración
- Apache se configura mediante directivas ubicadas en archivos de texto.
- El principal de estos archivos es httpd.conf
- La ubicación de este archivo se determina durante la configuración de la instalación (en/conf por defecto), pero se puede especificar con el parámetro –f al iniciar el servicio.
- Se puede incluir un número indefinido de archivos adicionales de configuración mediante la directiva Include.
- Los cambios en los archivos de configuración sólo tienen efecto tras reiniciar el servicio.
- Otros archivos en los que se pueden almacenar algunos tipos de directivas descentralizadas en cualquier directorio de contenido son los archivos .htaccess:
- Se deben llamar así de forma predeterminada, pero su nombre se puede especificar mediante la directiva AccessFileName.
- Se pueden ubicar en cualquier directorio de un sitio web.
- Las directivas en estos archivos afectan a todos los archivos y directorios a partir del directorio en el que se encuentran.
- Tienen efecto inmediato (no es preciso reiniciar el servicio).
1.2 Sintaxis de configuración
- Los comentarios se marcan con una # inicial.
- Cada línea admite una sola directiva
- Se puede emplear una barra invertida \ como último carácter de una línea para indicar que continúa en la siguiente.
- Se ignoran las líneas en blanco y los espacios iniciales.
- Si una directiva aparece en el mismo ámbito más de una vez, prevalece el valor de la última aparición.
2.1 Ámbito de las directivas I
- La parte inicial de httpd.conf está dedicada a las directivas de configuración del servidor, como:
- ServerRoot: indica la ruta de instalación del servidor, donde se ubican los directorios de configuración y logs.
- Listen: determina la dirección (o direcciones) IP y el / los puertos que atiende el servidor.
- User, Group: identidad con la que se ejecutarán los procesos hijo.
- LoadModule: permite cargar módulos adicionales dinámicamente, sin necesidad de recompilar y reinstalar el servicio.
2.2 Ámbito de las directivas II
- A continuación, las directivas del servidor principal, por ejemplo:
- ServerName: nombre con que se identifica el servidor.
- ServerAdmin: dirección de correo electrónico del administrador del sitio web.
- DocumentRoot: indica el directorio raíz del sitio web.
- DirectoryIndex: archivo(s) predeterminado(s).
- AccessFileName: indica el nombre de los archivos con directivas locales de directorios.
2.3 Ámbito de las directivas III
- La directiva <Directory ruta_de_directorio>(se cierra con </Directory>) se emplea para delimitar un conjunto de directivas que se aplicarán al directorio físico indicado y a sus subdirectorios.
- Está orientada, por tanto, al sistema de archivos.
- Pueden emplearse en la ruta del directorio comodines de comandos:
- ? representa un carácter cualquiera
- * representa un conjunto cualquiera de caracteres
- No se pueden anidar las directivas Directory, prevaleciendo siempre la más interna en caso de coincidencia.
En el caso:
<Directory /www> DirectoryIndex index.html <Directory> <Directory /www/menu> DirectoryIndex inicio.html <Directory> |
Una petición a /www/menu/ buscaría como documento predeterminado inicio.html
- La directiva DirectoryMatch es equivalente a Directory, pero la ruta del directorio se expresa mediante expresiones regulares y son procesadas en último lugar, dentro de las directivas <Directory>
2.4 Ámbito de las directivas IV
- La directiva <Files nombre_de_archivo> (se cierra con </Files>) delimita directivas aplicables a cualquier archivo cuyo nombre coincida con el indicado.
- Está orientada al sistema de archivos.
- Se puede limitar el alcance de esta directiva anidándola en una directiva <Directory>, de manera que sólo afectará a los archivos coincidentes en el directorio y subdirectorios indicados por la directiva contenedora.
- La directiva <FilesMatchExprReg> es análoga, pero indica el nombre del archivo mediante expresiones regulares.
Un ejemplo de uso de esta directiva lo tenemos en el archivo httpd.conf inicial de Apache, empleándose para impedir el acceso a los archivos .htaccess y .htpasswd:
<FilesMatch "^\.ht"> Order allow,deny Deny from all </Files> |
2.5 Ámbito de las directivas V
- Los archivos .htaccess se pueden ubicar en cualquier directorio y las directivas que contienen son aplicables a todo el contenido del directorio en el que se encuentran.
- Su aplicación se encuentra supeditada a la directiva AllowOverride que se les pueda aplicar contenida en directivas <Directory>.
- Su uso se desaconseja a menos que sea inevitable, ya que:
- Se pueden sustituir por directivas <Directory> directamente en el archivo de configuración.
- Se dispersa la configuración del servicio en múltiples archivos.
- Son procesados en cada petición, lo que afecta al rendimiento.
2.6 Ámbito de las directivas VI
- La directiva <Location URL> (se cierra con </Location>) permite definir directivas aplicables a rutas web –en lugar de físicas.
- Está, por tanto, orientado a URLs.
- Es procesada después que las directivas <Directory> y <Files> y los archivos .htaccess
- La directiva análoga <LocationMatch> permite el empleo de expresiones regulares en la URL.
Un ejemplo de aplicación de esta directiva (si se tiene instalado el módulo mod_status):
<Location /status> SetHandler server-status </Location> |
2.7 Ámbito de las directivas VII
- Existen, además directivas condicionales, que se aplican si se satisface una condición:
- <IfDefine test> … </IfDefine> donde test puede ser:
- nombre_de_parámetro
- nombre_de_parámetro
Ejemplo:
<IfDefine app1FueraDeServicio> RedirectMatch /app1Web/(.*) http://localhost/fueraDeServicio </IfDefine> |
- <IfModule test>...</IfModule> define de forma análoga una condición según si un módulo está cargado o no.
- <IfVersion [[!]operador] versión> ... </IfVersion> define una condición basándose en la versión del servidor Apache, donde operador puede ser =, ==, <, <=, >, >=.
Ejemplo:
<IfVersion >= 2.0> # directivas aplicables a versiones posteriores a la 2.0.0 </IfVersion> |
2.8 Ámbito de las directivas VIII
- La directiva VirtualHost permite definir servidores virtuales:
- La sintaxis es <VirtualHost dirección[:puerto] [dirección[:puerto]] ...> ... </VirtualHost>
- El puerto debe estar incluido en la directiva de Servidor Listen
Ejemplo:
NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot /www/root1 ServerName www.servidor1.com # Directivas de configuración # Éste sería el sitio web predeterminado </VirtualHost> <VirtualHost *:80> DocumentRoot /www/root2 ServerName www.servidor2.com # Directivas de configuración </VirtualHost> |
2.9 Ámbito de las directivas IX
- Orden de aplicación de las directivas (prevalecen las últimas):
- <Directory> (excepto con expresiones regulares) y archivos .htaccess (con los .htaccess, si están permitidos, prevaleciendo sobre <Directory>)
- <DirectoryMatch>
- <Files> y <FilesMatch>
- <Location> y <LocationMatch>
Excepto <Directory>, cada grupo de directivas es procesado en el orden en que aparecen en el archivo de configuración.
En los grupos <Directory> en conflicto, se ejecuta la ruta más larga al final (<Directory /www/dir1/dir2> prevalecerá sobre <Directory /www/dir1>).
Las directivas de otros archivos de configuración incorporadas mediante la directiva Include se procesan como si figurasen en el archivo de configuración que contiene la directiva Include.
Las directivas dentro de un bloque <VirtualHost> se procesan después que las directivas de primer nivel. Así se consigue que la directiva del Host virtual prevalezca sobre la que está definida en el servidor principal.
Fichero pdf para descargar aquí.