Directivas básicas de configuración de Apache 2

El archivo principal de configuración de Apache es el httpd.conf. Este archivo está comentado y se autoexplica en cada sección, por lo que la primera ayuda ante cualquier duda se puede conseguir en este mismo archivo. En httpd.conf se encuentran las directivas de configuración, las cuales son las opciones de configuración de Apache.

Hay que tener en cuenta que las directivas por defecto ya se acomodan a multitud de máquinas, y sólo es necesario que se cambien algunas en determinadas situaciones.

El fichero httpd.conf debemos conocerlo y manejarlo. Este archivo se puede entender según como se configuren cada una de sus directivas.

httpd.conf consta de muchas directivas; para poder tenerlas de manera ordenada el mismo fichero se divide en 3 secciones:

  • Section1: Global Environment

Reúne los aspectos globales del servidor. Por ejemplo el número máximo de clientes concurrentes, los timeouts, el directorio raíz del servidor, etc.

  • Section2: Main Server Configuration

Agrupa las directivas que definen la forma de responder a todos los pedidos del servidor principal, o sea aquellos que no son para los hosts virtuales, de existir alguno definido. También reúne los aspectos por defecto de todos los hosts virtuales que se configuren más adelante.

  • Section3: Virtual Hosts

Agrupa las directivas relacionadas con los hosts virtuales que se definan.

Global Environment

Las directivas que se muestran en esta sección crean el entorno global para el servidor Apache. Este rige el funcionamiento general de Apache, como puede ser el número de peticiones concurrentes que se pueden manejar, la ubicación de los ficheros de configuración, etc.

ServerType { standalone | inetd }

Permite indicar el tipo de servidor a ejecutar. Este puede ser:

  • inetd: el servicio se brindará como un servicio tipo xinet. Se deberá definir su configuración en el directorio xinetd.d. De esta forma se iniciará una copia del servidor cada vez que algún cliente trate de conectarse y esta terminará una vez que retorne lo pedido. Aunque se considera más seguro, debe evitarse este modo, porque puede que no trabaje adecuadamente.
  • standalone: el servidor se ejecutará como un servicio independiente. Es la forma más eficiente y la que se asume por defecto.

ServerRoot

Esta directiva define el directorio donde se ubica toda la información de configuración y registro que necesita el servidor para su correcto funcionamiento, como por ejemplo srm.conf, httpd.conf, acces.conf, mymes.type, etc. La ubicación que se indique aquí debe ser una ruta absoluta, lo que significa que debemos indicar la ubicación del directorio partiendo desde la raíz. Ejemplos:

ServerRoot /etc/apache
ServerRoot /usr/local/apache

PidFile

La directiva PidFile especifica la ruta del archivo PID (proceso ID). Por defecto está fijada en logs/httpd.pid. Ejemplos:

PidFile /var/run/apache.pid
PidFile /usr/local/apache/logs/httpd.pid

ScoreBoardFile

Fichero utilizado para almacenar información interna del proceso servidor. Se requiere para algunas arquitecturas para comunicar entre los procesos hijos y el padre. No es necesario en todas las arquitecturas. Por ejemplo:

ScoreBoardFile /var/run/apache.scoreboard

Si queremos saber si lo es para nuestra arquitectura, deberemos arrancar Apache con esta directiva inicializada y comprobar que se ha creado el archivo.

Timeout

Timeout define, en segundos, el tiempo que el servidor esperará para recibir y enviar peticiones durante la comunicación, tras los cuales el servidor cierra la conexión. Está configurado por defecto a 300, lo cual es apropiado para la mayoría de las situaciones. Ejemplo:

Timeout 300

KeepAlive

Esta directiva se utiliza para indicar si se activarán las conexiones persistentes; es decir. el poder hacer más de una petición por conexión.

Por ejemplo, supongamos que hacemos una petición al servidor de una página web que contiene tres imágenes, entonces tendremos que hacer 4 peticiones, una para la página y una por cada imagen. El tener activadas las conexiones persistentes nos permite el poder hacer todas las peticiones a través de la misma conexión, y no tener que negociar nuevas conexiones. La respuesta del servidor será más rápida y tendremos un mejor rendimiento.

Esta directiva admite dos opciones:

KeepAlive On
KeepAlive Off

Si KeepAlive esta en On, también deberá establecer KeepAliveTimeout en un valor bajo y controlar el registro de errores (error_log) de los servidores para estar advertido si no dispone de suficientes procesos hijo para gestionar las peticiones.

MaxKeepAliveRequests

Esta directiva establece el máximo número de peticiones que se pueden realizar en una conexión persistente. Las conexiones persistentes tienen que estar activadas, obviamente. 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. El valor predeterminado de la directiva MaxKeepAliveRequests es de 100, que debería bastar en la mayoría de los casos.

MaxKeepAliveRequests 100

KeepAliveTimeout

La directiva KeepAliveTimeout establece el número de segundos que el servidor esperará a la siguiente petición, tras haber dado servicio a una, antes de cerrar la conexión. Una vez recibida la petición, aplica la directiva Timeout en su lugar.

KeepAliveTimeout 15

Listen

Esta directiva permite especificar qué puerto se utilizará para atender las peticiones. Por defecto se utiliza el puerto 80 (www). Sintaxis: Listen [dirección ip:] Numero de puerto. Ejemplo:

Para hacer que el servidor acepte conexiones en los puertos 80 y 8080

Listen 80
Listen 8080

Para atender dos direcciones IP distintas, con distintos puertos, se utilizará:

Listen 192.168.255.5:80
Listen 192.168.255.8:8080

LoadModule

Directiva que sirve para cargar módulos que incluyen distintas funcionalidades. Sintaxis: LoadModule nombreModulo ubicacionFichero

MaxClients

Permite especificar la cantidad máxima de clientes conectados simultáneamente al servidor. Por defecto es 150. Ejemplo:

MaxClients 200

MaxRequestsPerChild

Indica la cantidad de pedidos que puede atender un proceso servidor por hijo antes de que muera. Si se especifica cero el número será ilimitado. Poner límites a este número permite liberar la memoria asociada al proceso, en caso de que ésta se acumule accidentalmente, además de disminuir el número de procesos activos, cuando la carga del servidor disminuye.

Por defecto es 100. Este valor no incluye la cantidad de los pedidos en una conexión persistente, los cuales se cuentan como uno sólo. Sintaxis: MaxRequestsPerChild cantidad. Ejemplo

MaxRequestsPerChild 80

Main Server Configuration

Esta es la sección principal de configuración del servidor. En ella podemos encontrar las siguientes directivas:

ServerAdmin

Especifica la dirección de correo electrónico del administrador. Esta dirección aparece en los mensajes de error, para permitir al usuario notificar un error al administrador.

ServerAdmin moc.bewoitis|nimda#moc.bewoitis|nimda

ServerName

Especifica el nombre y el puerto que el servidor utiliza para identificarse, normalmente se determina automáticamente, pero es recomendable especificarlo explícitamente para que no haya problemas al iniciar el servidor. Si el servidor no tiene un nombre registrado en las DNS, se recomienda poner su número IP. La sintaxis es: ServerName direccionIP:Puerto Ejemplo:

ServerName localhost:80

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. Esta es la carpeta donde colocaremos las páginas que queramos publicar.

Si se cambia este directorio por otro, es muy importante que se ponga el nuevo valor, no sólo en esta línea, sino también en la sección de la directiva Directory en la que se establecen los parámetros de configuración de este directorio. Ejemplo:

/var/www/html

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.ciberaula.com

el servidor por defecto servirá

www.ciberaula.com/index.html

Sintaxis: DirectoryIndex fichero1 fichero2 fichero3

El orden con el que se especifica el nombre de fichero determinará la prioridad a la hora de decidir que fichero es el que se muestra. Ejemplo:

DirectoryIndex index.html index.htm index.php

AccessFileName

Es el nombre del fichero de configuración de acceso limitado 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. El nombre de fichero que se especifica por defecto es el del fichero .htaccess.

Como medida de seguridad, la configuración de Apache establece que no se muestre la existencia de este fichero a ningún usuario, aunque esté establecida la opción de listado de directorios. Si se decide cambiar el nombre, habrá que redefinir la seguridad para que no se muestre el contenido del nuevo fichero. Esto se hace en el fichero httpd.conf en una sección File como la que se presenta a continuación, en la que se establece que todos los ficheros que comiencen por .ht no se mostrarán.

<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>

TypesConfig

Especifica el nombre del fichero que contiene la lista de tipos MIME que conoce el servidor, y que determinará dependiendo de las extensiones para generar las cabeceras http. No puede estar dentro de ninguna sección.

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. Sintaxis: DefaultType tipoMime

HostnameLookups

Se utiliza en los ficheros de registro. Por defecto, cuando se produce un acceso se guarda simplemente su número IP. Si esta directiva se encuentra en On, el servidor buscará la correspondencia de ese número IP con su nombre y lo almacenará. Establecer esta configuración en ON provocará que por lo menos se tenga que hacer una petición al servidor de nombres por cada una de las peticiones de usuario, por lo que el rendimiento de la máquina se puede ver decrementado. Esta directiva se puede encontrar dentro de una sección o fuera de cualquier otra.

ErrorLog

Especifica la ubicació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.

LogLevel

Especifica el tipo de mensajes que se guardarán en el fichero de registro de errores. Dependiendo de los valores especificados, se guardarán mas o menos. 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: LogFormat configuraciónError nombre

CustomLog

La directiva se utiliza para especificar la ubicación y el tipo de formato que se utilizará en un fichero de registro. Pueden existir varios ficheros de registro distintos con configuraciones distintas. Para hacer esto, simplemente hay que poner varias líneas customlog. Sintaxis: customLog fichero formato

ServerTokens

Esta directiva establece la información que se devuelve dentro de la cabecera http que envía el servidor. Posibles valores de menor a mayor información son: Pord, Min, Os y Full.

IndexOptions

Directiva usada para optar por el sistema de visualización del los directorio con Apache. Puede ser normal o indexado. La configuración clásica es:

IndexOptions FancyIndexing

AddIconByEncoding

Esta directiva permite asociar un icono a un tipo MIME, de forma que cuando la directiva FancyIndexing esté activada, se mostrará al lado del fichero el icono correspondiente. Sintaxis: AddIconByEncoding icon MIME-encoding. Ejemplo:

AddIconByEncoding/icons/compressed.gif x-compress

AddIconByType

Esta directiva asocia un icono a un fichero dependiendo de un tipo MIME, de forma que cuando la directiva FancyIndexing esté activada, se mostrará al lado del fichero el icono correspondiente. Sintaxis: AddIconByType icon MIME-encoding. Ejemplo:

AddIconByType /icons/text.gif text/*

La diferencia entre AddIconByEncoding y AddIconByType reside en que mientras en la primera se determina el tipo MIME basándose en la codificación del fichero, AddIconByType determina el tipo MIME basándose en el nombre del fichero.

AddDescription

Esta directiva permite asociar una descripción a un tipo de fichero, que se mostrará al listar un directorio. Sintaxis: AddDescripcion cadena fichero

AddDefaultCharset

Esta directiva define la codificación de caracteres que se utilizará de forma predeterminada para los documentos. Por defecto viene establecido el valor ISO-8859-1.

ErrorDocument

Esta directiva establece la configuración del servidor para cuando se produzca un error. Se pueden establecer cuatro configuraciones distintas: Sacar un texto de error, Redirigir a un fichero en el mismo directorio, Redirigir a un fichero en nuestro servidor y Redirigir a un fichero fuera de nuestro servidor.

Hay que tener en cuenta que si el texto de error se envía a Internet Explorer, este tendrá que tener al menos 512 Bytes, porque, si no, Internet Explorer mostrará su propia página de error. Sintaxis: ErrorDocument NúmeroError Acción. Ejemplo:

ErrorDocument 404 /error404.html

En caso de no encontrarse un fichero, se mostrará el fichero error404.html

CacheRoot

Establece el directorio donde se encontrarán los ficheros de la caché de Apache.

CacheSize

Tamaño de la caché en Kilobytes.

CacheGcInterval

Establece cada cuántas horas se verificará el tamaño de los ficheros de la caché para comprobar si se corresponden con el tamaño establecido dentro de CacheSize. El valor acepta números flotantes, por lo que se pueden establecer los intervalos en minutos. Cuanto mayor sea el valor de esta directiva, más posibilidades existirán de que se sobrepase el valor establecido en CacheSize.

CacheMaxExpire

Máximo número de horas que los ficheros permanecerán dentro de la cache.

CacheLastModifiedFactor

Sirve para calcular la caducidad de un fichero en la cache, que será el de la hora de la última modificación, multiplicado por este valor.

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.

Virtual Hosts (Hosts Virtuales)

Esta opción de Apache es muy útil en el caso de que contemos con más de un dominio en nuestro host; es decir, hosts virtuales.

Por defecto, Apache únicamente sirve el host del sitio Web especificado en la directiva ServerName. Es posible, sin embargo, hacer que Apache sirva a otros sitios Web utilizando una directiva de un contenedor de hosts virtuales. Hay que tener en cuenta que muchas de las directivas que hemos visto en la sección de Directivas básicas de configuración también se pueden aplicar a hosts virtuales.

NameVirtualHost

Es necesario definir un número de IP y puerto para el host virtual. Para eso usamos esta directiva.

Aunque addr puede ser el nombre del host, es recomendable que se utilice siempre una dirección IP. Sintaxis: NameVirtualHost addr[:port]

Por ejemplo, para un host virtual llamado host.virtual.com que utilice la dirección 192.168.1.125, la directiva y la definición de su host virtual serán:

NameVirtualHost 192.168.1.125
<VirtualHost 192.168.1.125>
ServerName www.host.virtual.com
#Aquí ponemos otras directivas correspondientes a la directiva VirtualHost
</VirtualHost>

En el caso que se tenga varios host que tengan distintas direcciones, se tiene que repetir esta directiva para cada dirección. Por ejemplo:

NameVirtualHost 192.168.1.20

<VirtualHost 192.168.1.20>
ServerName www.miempresa.com
#Otras de directivas
</VirtualHost>

<VirtualHost 192.168.1.20>
ServerName www.tuempresa.com
#Otras directivas
</VirtualHost>

NameVirtualHost 192.168.1.30

<VirtualHost 192.168.1.30>
ServerName www.micolegio.com
#Otras de directivas
</VirtualHost>

<VirtualHost 192.168.1.30>
ServerName www.tucolegio.com
#Otras directivas
</VirtualHost>

Hay que tener en cuenta que también se puede especificar el número de puerto en el que se podrían utilizar los hosts virtuales basados en nombre. Por ejemplo:

NameVirtualHost 192.168.1.15:8080

ServerAlias

Esta directiva establece nombres alternativos para un host. Es utilizada dentro de servidores virtuales. Por ejemplo puede necesitar ServerAlias en una red local donde los usuarios están acostumbrados a no utilizar el nombre de dominio completo.

<VirtualHost 192.168.1.12>
ServerName aula.server.com
ServerAlias aula aula2.server.com aula2
#Otras directivas
</VirtualHost>

otro ejemplo:

<VirtualHost 192.168.1.100>
ServerName www.la-tierra-es-redonda.com
ServerAlias www.latierraesredonda.com www.tierraredonda.com
#Otras directivas
</VirtualHost>

ServerPath

Para poder utilizar los servidores virtuales por nombre, los clientes deben hacer peticiones que incluyan un campo de encabezado Host . El encabezado Host se define en la especificación de HTTP/1.1, y aunque algunos navegadores que soportan HTTP/1.0 han sido mejorados con la capacidad de manejar este encabezado, los más antiguos directamente no lo soportan.

Las peticiones desde estos navegadores antiguos no son bien entendidas por el servidor, que no será capaz de determinar a qué host virtual se pretende acceder, y responderá siempre con el servidor por defecto.

En muchos casos no se desea perder los accesos de estos posibles usuarios. Existe una solución basada en la directiva ServerPath que designa una manera alternativa de acceder a los datos que forman parte de servidores virtuales. Mediante ServerPath se define una localización en el host por defecto que se refiere al servidor virtual. Por ejemplo:

#Se supone que el host por defecto se llama www.ejemplo.es

NameVirtualHost 193.147.87.211

<VirtualHost 193.147.87.211>
ServerName virtual1.ejemplo.es
ServerPath /virtual1
DocumentRoot /usr/local/proyecto/htdocs/virtuales/virtual1
</VirtualHost>

Con estas líneas se consigue que las peticiones de la localización /virtual1 del servidor por defecto sean servidas desde el raíz del host virtual virtual1.ejemplo.es. De esta forma las páginas podrán ser accesibles mediante las siguientes URLs:

#Acceso para clientes que no soportan hosts virtuales por nombre http://www.ejemplo.es/virtual1
#Acceso para clientes que soportan hosts virtuales por nombre http://virtual1.ejemplo.es

Como se ve, el uso de esta alternativa exige un poco de disciplina, pero con ello se garantiza el acceso a los datos independientemente de la versión de navegador que utilicen los usuarios.

<VirtualHost>

La directiva del contenedor <VirtualHost> especifica una configuración para el host virtual. Todas las directivas encontradas entre <VirtualHost> y </VirtualHost> se aplican únicamente a dicho host virtual. Se puede utilizar cualquier directiva que esté permitida en el contexto de un host virtual. Cuando un servidor recibe la solicitud de un documento en un host virtual determinado, utiliza las directivas de configuración encerradas en <VirtualHost>. Sintaxis: <VirtualHost addr[:port]…. > ….. </VirtualHost>. Ejemplo:

Una dirección IP

<VirtualHost 192.168.1.100>
#directivas correspondientes a este host virtual
</VirtualHost>

Una dirección IP con su número de puerto
<VirtualHost 192.168.1.100:8080>
#directivas correspondientes a este host virtual
</VirtualHost>

Varias Direcciones IP

<VirtualHost 192.168.1.110 192.168.1.106>
#directivas correspondientes a este host virtual
</VirtualHost>

Varias Direcciones IP con número de puerto

<VirtualHost 192.168.1.110:8080 192.168.1.106:10000>
#directivas correspondientes a este host virtual
</VirtualHost>

« Apache 2 | Instalación y configuración

Si no se indica lo contrario, el contenido de esta página se ofrece bajo Creative Commons Attribution-ShareAlike 3.0 License