Configuración de Apache


Módulos

Apache es un servidor modular. Esto implica que en el servidor básico se incluyen únicamente las funcionalidades más básicas. Otras funcionalidades se encuentran disponibles a través de módulos que pueden ser cargados por Apache. Por defecto, durante la compilación se incluye en el servidor un juego de módulos base. Si el servidor se compila para usar carga dinámica de módulos, entonces los módulos pueden ser compilados por separado, e incluidos en cualquier momento usando la directiva LoadModule. En caso contrario, Apache deberá ser recompilado para agregar o eliminar módulos. La directivas de configuración se pueden incluir de forma condicional dependiendo de la presencia de un módulo particular, poniéndolas dentro de un bloque <IfModule> como vermos más adelante.

 

 


Secciones

Las directivas que se pongan en los ficheros principales de configuración se aplicarán a todo el servidor. Si usted quiere cambiar únicamente la configuración de una parte del servidor, puede cambiar el rango de acción de las directivas poniéndolas dentro de las secciones <Directory>, <DirectoryMatch>, <Files>, <FilesMatch>, <Location>, y <LocationMatch> . Estas secciones limitan el dominio de aplicación de las directivas dentro de ellas, a locales particulares dentro del sistema de ficheros o URL's particulares. Estas secciones pueden ser anidadas, para permitir un grado de selección más fino.

Apache tiene la capacidad de servir varios sitios web diferentes al mismo tiempo. Esto se llama Hospedaje Virtual (en inglés Virtual Hosting). El dominio de aplicación de las directivas también puede ser delimitado poniéndolas dentro de <VirtualHost>, de manera que solo tendrán efecto para pedidos de un sitio web en particular.

Las directivas de configuración se agrupan en tres secciones básicas:

Directivas que controlan la forma de operación del procesor servidor Apache como un todo, es decir, el entorno global.

Directivas que definen los parámetros del servidor principal o predeterminado que responde a las peticiones que no gestiona ningún 'virtual host'. Entendemos por 'virtual host' un subservidor con unas características propias. Más adelante se describirá con detalle qué es un host virtual. Estas directivas también se aplican a los servidores virtuales como valores predeterminados si esto no especifican un valor propio específico del host virtual.

Directivas de configuración para host virtuales, que permiten peticiones Web a distintas direcciones IP o nombres de host y que se gestionan por el el mismo proceso servidor Apache.


Ficheros de registro y configuración

Si los nombres de ficheros que indica para los distintos controles, como registro de acceso o errores, por ejemplo, comienzan por "/" (o "unidad:/" para Win32), el servdor utilizará esa ruta absoluta. Si el nombre de fichero no empieza por "/", se le antepone el valor de la directiva ServerRoot. Por ejemplo "logs/foo.log" con la directiva ServerRoot puesta como "/etc/httpd" el servidor la interpretará como "/etc/httpd/logs/foo.log".


Configuración descentralizada

Apache permite una administración descentralizada de la configuración, a través de ficheros colocados dentro del árbol de páginas web. Los ficheros especiales se llaman normalmente .htaccess, pero se puede especificar cualquier otro nombre en la directiva AccessFileName. Las directivas que se pongan dentro de los ficheros .htaccess se aplicarán únicamente al directorio donde esté el fichero, y a todos sus subdirectorios. Los ficheros .htaccess siguen las mismas reglas de sintaxis que los ficheros principales de configuración. Como los ficheros .htaccess se leen cada vez que hay una petición de páginas, los cambios en estos ficheros comienzan a actuar inmediatamente.

Para ver qué directivas se pueden poner en los ficheros .htaccess, consulte el contexto de cada directiva. El administrador del servidor pueden controlar aún más qué directivas son permitidas en los ficheros .htaccess, configurando la directiva AllowOverride en los ficheros principales de configuración.


Entorno global

Las directivas de esta sección afectan al comportamiento genera de Apache, como el número de peticiones concurrentes que puede atender o donde se ubican los ficheros de configuración.


LoadModule

Esta directiva corresponde a al soporte de Dynamic Shared Object (Objetos Dinámicos Compartidos). Son módulos que incorporan ciertas funcinalidades que se le incorporan al servidor Apache. Para que un módulo sea funcional tienen que estar construido como un DSO e incorporar la correspondiente directiva `LoadModule' antes de que se a utilizada. Los módulos compilados de forma estática (comprobar con httpd -l) no es necesario incluirlos.

A continuación vemos una lista de módulos. Su uso de verá, en algunos casos con las directivas correspondientes.

LoadModule access_module modules/mod_access.so
LoadModule auth_module modules/mod_auth.so
LoadModule auth_anon_module modules/mod_auth_anon.so
LoadModule auth_dbm_module modules/mod_auth_dbm.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule asis_module modules/mod_asis.so
LoadModule info_module modules/mod_info.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule imap_module modules/mod_imap.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so

ServerTokens

Esta directiva delimita qué información muestra el servidor sobre los componentes que está ejecutando.

Un valor posible y aceptable sería:

ServerTokens OS

que mostraría el sistema operativo sobre el que se ejecuta el servidor apache. Si no le importa la inofmración que puede presentar al exterior puede omitir o comentar esta línea.

Si quiere ajustar más la información los valores posibles son:

ServerTokens Minimal|ProductOnly|OS|Full

y como ejemplo podemos ver:

ServerTokens Prod[uctOnly]Server envía (por ejemplo): Server: Apache

ServerTokens Min[imal] Server envía (por ejemplo): Server: Apache/1.3.0

ServerTokens OS Server envía (por ejemplo): Server: Apache/1.3.0 (Unix)

ServerTokens Full (o sin especificar) Server envía (por ejemplo): Server: Apache/1.3.0 (Unix) PHP/3.0 MyMod/1.2


ServerRoot

La directiva ServerRoot es el directorio raíz donde se almacenan los distintos ficheros que utiliza el servidor Apache salvo que se indiquen rutas absolutas como se indicaba con anterioridad. Es importante no añadir una barra al final del nombre del último directorio

El valor puede ser:

ServerRoot "/etc/httpd"


<IfModule modulo>

Indican una serie de directivas que el servidor sólo tendtrá en cuenta si el módulo indicado está activo en el servidor. Esta directiva puede contener múltiples línea y termina en un </IfModule>.

Por ejemplo:

<IfModule prefork.c>

directiva1

directiva3

directiva3

</IfModule>


Timeout

Timeout indica el número de segundos antes de que se cancele un conexión por falta de respuesta. El valor predeterminado:

Timeout 300


KeepAlive

KeepAlive indica si se permiten o no las conexiones persistentes, es decir más de una petición por conexión. Puede tomar los valores On u Off. El valor predeterminado es On. Por ejemplo:

KeepAlive Off


MaxKeepAliveRequests

MaxKeepAliveRequests indica el máximo número de peticiones que se permiten en conexiones persistentes. Un valor 0 permite un número ilimitado. Se recomienda dejar esta valor elevado para obterner un mayor rendimiento. Por ejemplo:

MaxKeepAliveRequests 100


KeepAliveTimeout

KeepAliveTimeout indica el número de segundos de espera para la siguiente petición del mismo cliente con la misma conexión.

KeepAliveTimeout 15


StartServers

Indica el número de proceso servidores al iniciar el servidor Web.

StartServers 8

De estos procesos se crearán nuevos procesos hijos para atender nuevas conexiones.


MinSpareServers y MaxSpareServers

Indican los números mínimo y máximo de procesos que permanecen en reserva. Estos procesos no atienden directamente una conexión sino que se desdoblan para que sus hijos sean quienes las atiendan.

MinSpareServers 5

MaxSpareServers 20


MaxClients

MaxClients indica el máximo número de procesos hijos que se lanzan para atender conexiones simultáneas. Si llegan más peticiones que proceos estas se almacenan en una cola (listen).

MaxClients 150


MaxRequestsPerChild

MaxRequestsPerChild indica el número maximo de hilos por hijo

MaxRequestsPerChild 1000


Listen

Listen permite asociar Apache a una dirección y/o puerto específico además del predeterminado

Ver la directiva <VirtualHost>

Por ejemplo:

Listen 12.34.56.78:8080

Listen 80


Include

Include inserta uno o varios ficheros de configuración. Por ejemplo

Include conf.d/*.conf

Es habitual dejar el fichero de configuración con las características globales que no se teienen que modificar el el fichero principal e incluir los ficheros que pueden estar sujetos a modficación en el directorio "/etc/httpd/conf.d".

(Ver ServerRoot)


Servidor principal

Las directivas de esta sección definen los valores del serviode web principal, el que responde a cualquier petición que no sea atendida por ningún host virtual. Estas directivas también se aplican a los servidores virtuales como valores predeterminados si esto no especifican un valor propio específico del host virtual, com ya habíamos comentado.

Algunas de estas directivas dependen de módulos DSO.


User

Esta directiva especifica qué usuario es el que ejecuta los procesos del servidor web y en consecuencia los permisos de lectura y escritura que se aplican sobre los recursos.

User apache


Group

Esta directiva especifica qué grupo es el que ejecuta los procesos del servidor web y en consecuencia los permisos de lectura y escritura que se aplican sobre los recursos.

Group apache


ServerAdmin

ServerAdmin especifica la dirección de correo a la que se deben enviar los problemas de uso del servidor Web. Esta dirección aparece en ciertas páginas de error, como por ejemplo cuando se solicita una página errónea.

ServerAdmin Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.


ServerName

ServerName especifica el nombre y el puerto que el servidor utiliza para identificarse. Con una correcta configuración, este valor se puede determinar automáticamente, pero es recomendable especificarlo explíciatamente para evitar problemas durante el arranque.

Si no se pone un nombre DNS válido, no funcionarán las redirecciones generadas por el servidor. Ver UseCanonicalName.

Si no existe un nombre DNS registrado entonces deberemos poner la dirección IP. El acceso mediante IP siempre es posible, pero además funcionarán las redirecciones.

ServerName www.iesbezmilian.org 80

Esta directiva tendremos que modificarla en el fichero inicial de configuración.


UseCanonicalName

UseCanonicalName determina como Apache construye las autoreferencias de URL y las variables SERVER_NAME y SERVER_PORT.

Cuando está como "Off", Apache usará los valores suministrados por el cliente. Cuando está como "On", Apache usará la directiva ServerName.

UseCanonicalName Off


DocumentRoot

DocumentRoot indica el directorio donde se almacenan los documentos web.

Existe la posibilidad de utilizar enlaces simbólicos dentro del DocumentRoot.

DocumentRoot "/var/www/html"

Esta directiva tendremos que modificarla en el fichero inicial de configuración si queremos ubicar las páginas en un directorio distinto al predeterminado.


Options

Options indica varias posibles opciones de comportamiento. Se pueden aplicar a un directorio concreto. El formato es:

Options [+|-]option [[+|-]option] ...

donde un "+" añade la opción y un "-" quita la opción. Ciertas opciones pueden depender de algún módulo DSO.

Las opciones que tenemos son:

  • All todas las opciones salvo MultiViews. Es el valor predeterminado

  • ExecCGI Se permite la ejecución de scripts CGI.

  • FollowSymLinks el servidor seguirá los enlaces simbólicos. Tener esta opción activa aumenta el rendimiento ya que el servidor no comprueba si un fichero o directorio es un enlace simbólico y es má rápido, pero en algunos casos puede presentar problemas de inseguridad.

  • Includes se permiten incluir Server-side.

  • IncludesNOEXEC se permiten incluir Server-side pero se deshabilitan las órdenes #exec y #exec CGI.

  • Indexes Si una URL solicita un directorio y no existe DirectoryIndex (v.g., index.html) en ese directorio, el servidor devolverá una lista del contenido del directorio.

  • MultiViews se permiten mostrar contenido negociado en funcion de diversos valores.

  • SymLinksIfOwnerMatch Se sigue un enlace simbólico sólo si los propietarios del enlace y del destino coinciden.

Ejemplos:

<Directory /web/docs>
 Options Indexes FollowSymLinks
 </Directory>
 <Directory /web/docs/spec>
 Options Includes
 </Directory> 

En este caso sólo se activará Includes para el directorio /web/docs/spec. Sin embargo si las directivas usan + y - :

<Directory /web/docs>

 Options Indexes FollowSymLinks
 </Directory>
 <Directory /web/docs/spec>
 Options +Includes -Indexes
 </Directory> 

entonces se activan las opciones FollowSymLinks e Includes para el directorio /web/docs/spec.


UserDir

UserDir indica el directorio que se añade al directorio personal de los usuarios para servior páginas cuando se realiza una peticion del tipo ~usuario.

El directorio tiene que estar accesible (755) para el usuario que ejecuta el proceso apache, también apache como indicamos anteriormente en la directiva User. Si no tiene permisos se generará un mensaje "403 Forbidden".

UserDir podrá tener el valor "disable" para no activar los directorio personales o indicar un nombre de directorio "public_html" por ejemplo.

Para desactivar web en directorio personales:

UserDir disable

Para activar directorios personales

UserDir public_html

en este caso, si en un navegador ponemos "http://www.miservidor.dom/~julia"

el contenido que aparece debe corresponder al directorio /home/julia/public_html, suponiendo que el directorio personal del usuario julia es /home/julia.

Esta directiva depende del módulo mod_userdir.c, por lo que es habitual poner esta directiva en el fichero de configuración como:

<IfModule mod_userdir.c>
    UserDir disable
   #UserDir public_html
</IfModule>

También se puede especificar directorios UserDir de forma limitada:

UserDir disabled

UserDir enabled user1 user2 user3

o bien:

UserDir enabled

UserDir disabled user4 user5 user6


DirectoryIndex

DirectoryIndex indica como responde el servidor cuando se solicita un directorio. Lo habitual es que que haya una página que se cargue automáticamente. Ver también Option Indexes.

Por ejemplo:

DirectoryIndex index.php index.html indice.html index.html.var

Es posible aplicar esta directiva a directorios individuales para indicar índices distintos. Por ejemplo:

<Directory /var/www/html/varios>
DirectoryIndex pagina.html
</directory>

haría que al solicitar el directorio varios se cargara pagina.html. Evidentemente, si se pide una página concreta por su nombre es la solicitada la que se carga.