Esta página explica cómo usar Webmin para configurar el servidor web Apache . Cubre hosts virtuales, control de acceso IP, restricciones de contraseña y mucho más.
Introducción a Apache
Apache es el servidor HTTP más popular de Internet, debido a su costo cero, amplia disponibilidad y gran conjunto de características. Todas las distribuciones de Linux lo incluyen como un paquete estándar y se puede instalar o compilar para cualquier otra variante de Unix admitida por Webmin. Sin embargo, tiene una gran cantidad de directivas de opciones definidas en un archivo de configuración de texto, por lo que puede ser difícil de configurar para un administrador sin experiencia.
A lo largo de los años desde que se introdujo por primera vez, se han lanzado muchas versiones de Apache. Comenzando con 1.0 y pasando a las series actuales 1.3 y 2.2, cada versión ha incluido más características y opciones. La funcionalidad básica del servidor web y el diseño del archivo de configuración se han mantenido esencialmente iguales en todo momento, aunque la implementación interna ha cambiado significativamente.
Apache tiene un diseño modular, en el que cada módulo es responsable de una parte de su conjunto de características generales. Hay varios módulos estándar que se incluyen con casi todas las instalaciones de Apache, y muchos más que son opcionales o deben descargarse por separado. Los módulos se pueden compilar en el ejecutable del servidor web o se pueden cargar dinámicamente desde bibliotecas compartidas en tiempo de ejecución. Esta arquitectura modular se puede utilizar para ahorrar memoria al evitar la necesidad de cargar módulos que no brindan ninguna funcionalidad útil para un sistema en particular.
Apache toma su configuración de múltiples archivos de texto, cada uno de los cuales contiene una serie de directivas, generalmente una por línea. Cada directiva tiene un nombre y uno o más valores, y establece una opción como la ruta a un archivo de registro o el tipo MIME para algún archivo. Las directivas que reconoce Apache dependen de los módulos en uso. La mayoría de los módulos agregan soporte para varias directivas para configurar las funciones que brindan.
A menudo, querrá alojar más de un sitio web en un solo servidor. Apache se puede configurar para usar una configuración diferente según el sitio web que haya solicitado un navegador. Cada uno de estos sitios se denomina host virtual y se define en el archivo de configuración con una sección especial
De manera similar, las secciones
Otro método para crear directivas que se aplican solo a un único directorio es ponerlas en un archivo de configuración especial llamado .htaccess que reside en el propio directorio. A menudo, estos archivos serán creados por usuarios regulares, para que puedan configurar sus propios sitios web sin necesidad de acceso total al archivo de configuración principal. Esto es muy útil en un sistema que alberga varios sitios, cada uno de los cuales es propiedad de un usuario diferente de Unix, en lugar de en un sistema con un solo sitio web configurado por el propietario del servidor.
El módulo del servidor web Apache
Este es uno de los módulos de Webmin más complejos y potentes, ya que te permite configurar casi todas las funciones de Apache. Puede determinar la versión de Apache que está instalada en su sistema y los módulos que utiliza, y ajusta su interfaz de usuario en consecuencia para que pueda editar solo aquellas directivas que comprende el servidor web. Sin embargo, la interfaz suele ser la misma para todas las versiones de Apache.
Debido a que hay tantas directivas y el módulo intenta permitir la configuración de todas ellas, agrupa las directivas en categorías como Procesos y Límites, Redes y Direcciones y Programas CGI. Estas categorías están representadas por iconos que aparecerán cuando abra un servidor virtual, un directorio o un archivo de opciones en el módulo. En todos los casos, puede ver y editar la configuración de cada categoría haciendo clic en su icono.
Apache tiene una gran cantidad de módulos estándar y una cantidad aún mayor de módulos separados que fueron desarrollados por otras personas. Webmin no admite la edición de directivas en la mayoría de estos no estándar, como mod_perl y mod_php. Sin embargo, ignorará de forma segura cualquier directiva del archivo de configuración que no entienda, por lo que no se dañará la configuración de los módulos no compatibles que realice manualmente.
Cuando abra el módulo de Apache, se mostrará la página con pestañas que se muestra a continuación :
La página principal del módulo Apache WebserverEn la primera pestaña hay iconos para las distintas categorías de opciones globales, así como algunas funciones adicionales. En el segundo hay una lista de todos los servidores virtuales actuales y en el tercero hay un formulario para agregar un nuevo host virtual. Si tiene una gran cantidad de servidores virtuales en su sistema (más de 100 de forma predeterminada), en su lugar se mostrará un formulario de búsqueda para encontrar servidores. El primer servidor siempre será el Servidor predeterminado especial , que contiene directivas que se aplican a todos los demás servidores virtuales y maneja las solicitudes que otros servidores no hacen.
Naturalmente, el módulo Apache no funcionará si no tiene Apache instalado en su sistema. Si este es el caso, la página principal mostrará un mensaje de error en lugar del formulario de configuración del módulo o la lista de servidores virtuales. Todas las distribuciones de Linux incluyen un paquete o paquetes en su CD-ROM o sitio web, así que instálelo desde allí utilizando el módulo Paquetes de software antes de continuar.
Debido a que el módulo asume que los archivos ejecutables y de configuración de Apache estarán en las ubicaciones utilizadas por el paquete de su distribución, informará el mismo error acerca de que el software no se instaló si lo ha compilado e instalado manualmente. Si este es el caso, haga clic en Configuración del módulo enlace y ajuste las rutas a las ubicaciones correctas para su sistema.
En las versiones de Unix que no incluyen Apache de manera predeterminada, Webmin asume que se instalará desde la distribución fuente estándar de www.apache.org. Si instaló el servidor web desde un paquete opcional que se puso a disposición para su sistema operativo, la página principal se quejará de que no está instalado y deberá ajustar la configuración del módulo.
La interfaz de usuario del módulo es bastante compleja y tiene una gran cantidad de páginas, formularios y subpáginas debido a la complejidad y potencia de los archivos de configuración de Apache. Sin embargo, hay elementos de la interfaz que se repiten en muchas páginas a lo largo del módulo, como :
- Iconos de categoría Cuando hace clic en el ícono de un servidor virtual, directorio o archivo de opciones, se muestra una tabla de íconos con nombres como Tipos MIME y Programas CGI en la parte superior de la página. Debajo de cada uno de estos iconos hay campos y tablas para configurar opciones relacionadas con la etiqueta del icono bajo el que se encuentran. Este diseño de uso común divide la gran cantidad de opciones editables de Apache en categorías, ya que hay demasiados campos para mostrar en una sola página. Los íconos exactos que aparecen y los campos debajo de ellos difieren según la parte de la configuración del servidor web que esté editando y la versión de Apache que esté instalada. Sin embargo, su diseño básico es siempre el mismo.
- Campos de tablas En muchos formularios, algunos campos usan tablas para ingresar múltiples valores, como tipos MIME y sus extensiones de archivo asociadas. No hay límite en la cantidad de filas que puede tener cada tabla, pero Webmin solo mostrará una sola fila vacía en cada tabla en un momento dado. Esto reduce el tamaño de los formularios que tienen muchas tablas, pero significa que solo puede agregar una nueva fila a la tabla a la vez. Para agregar más de uno, deberá guardar el formulario y luego volver a ingresarlo, lo que hará que se muestre una nueva fila en blanco debajo de la que acaba de completar.
Las secciones a continuación explican con más detalle exactamente en qué íconos hacer clic y qué tablas completar al hacer cosas como habilitar secuencias de comandos CGI y configurar tipos MIME.
Iniciar y detener Apache
Antes de que los navegadores puedan conectarse al servidor web Apache en su sistema, se debe iniciar su proceso de servidor. Puede verificar si se está ejecutando actualmente mirando la parte superior de cualquiera de las páginas del módulo. Si los enlaces tienen la etiqueta Aplicar cambios y Detener Apache aparece, entonces está actualmente activo. Sin embargo, si solo les aparece el enlace *Iniciar Apache*, aún no se está ejecutando.
Para iniciarlo, haga clic en Iniciar Apache Enlace. Si todo va bien, se volverá a mostrar la página en la que se encuentra actualmente y los enlaces en la parte superior deberían cambiar para indicar que ahora se está ejecutando. De lo contrario, aparecerá un mensaje de error explicando qué salió mal; lo más probable es que la causa sea un error en el archivo de configuración.
Para detener el servidor web una vez que se está ejecutando, haga clic en Detener Apache enlace en cualquiera de las páginas del módulo. En el improbable caso de que Webmin no pueda detener el servidor, se mostrará una página de mensaje de error. Si se detiene con éxito, se volverá a mostrar la misma página con los enlaces en la parte superior cambiados para mostrar que ya no se está ejecutando.
Cuando Apache está activo, cada página tendrá un Aplicar cambios enlace en la parte superior que se puede utilizar para indicar al servidor web que vuelva a cargar su configuración actual. Después de realizar cualquier cambio en este módulo (excepto aquellos en los archivos .htaccess), se debe hacer clic en este enlace para activarlos. A diferencia de otros módulos de Webmin que tienen un botón Aplicar en la página principal, este lo tiene en todas las páginas para que no tengas que volver al índice cada vez que hagas un cambio.
Editar páginas en su servidor web
Esta sección explica cómo encontrar y editar los archivos en su sistema que se muestran cuando un cliente se conecta a su servidor web Apache. Si ya sabe cómo hacer esto, no dude en omitirlo y pasar a la siguiente sección.
Cuando Apache se instala por primera vez desde un paquete o desde la fuente, su configuración inicial generalmente no tendrá ningún servidor virtual configurado. En su lugar, solo existirá el servidor predeterminado, sirviendo páginas a cualquier cliente que se conecte en el puerto 80. Puede ver las páginas predeterminadas ejecutando un navegador web y yendo a la URL http://_yourhostname_/, o http://_localhost_/ si está ejecutando el navegador en el mismo sistema en el que está Webmin. La página que aparece probablemente será solo una proporcionada con Apache o su distribución de Linux.
El directorio raíz del documento del que Apache sirve los archivos se mostrará en la página principal del módulo junto al Servidor predeterminado. icono. En Redhat Linux, por ejemplo, este directorio es /home/httpd/html por defecto. Los archivos en este directorio se pueden editar iniciando sesión como raíz o utilizando el módulo Administrador de archivos de Webmin. Cualquier cambio que realice se reflejará inmediatamente en el sitio web.
Si su sistema solo va a alojar un único sitio web estático, puede que no sea necesario configurar ningún otro aspecto de Apache. Simplemente puede cargar o copiar HTML, imágenes y otros archivos en el directorio y sus subdirectorios para crear el sitio que desee. El archivo más importante es index.html, que Apache sirve cada vez que un navegador no solicita una página específica. Debido a que la mayoría de la gente irá primero a http://_yourserver_/, la página index.html será la primera que vean.
Para facilitar la edición, es posible que desee cambiar la propiedad del directorio raíz del documento y todos sus archivos a un usuario que no sea raíz. Sin embargo, debe asegurarse de que el usuario con el que se ejecuta el proceso del servidor Apache pueda leerlos, que normalmente se denomina httpd. La forma más fácil de hacer esto es hacer que todos los archivos y directorios sean legibles y ejecutables en todo el mundo.
Crear un nuevo servidor virtual
Si desea alojar varios sitios web en su sistema, deberá crear un servidor virtual Apache para cada uno. Antes de que pueda agregar un sitio, primero debe registrar su dirección en el DNS, ya sea en un servidor DNS en su sistema o en otro host. Si los archivos del sitio van a ser propiedad de un usuario de Unix diferente al propietario del directorio raíz del documento, entonces también se debe crear primero.
El proceso completo para agregar un servidor virtual, incluidos los pasos anteriores, es:
- Decida un nombre de host que se usará en la URL del nuevo sitio web, como www.example.com .
- Decida si su nuevo sitio estará basado en IP o en nombre. Un sitio basado en un nombre funcionará bien con todos, excepto con los navegadores antiguos, por lo que es, con mucho, la mejor opción en estos días. Un sitio basado en IP funcionará con cualquier navegador, pero necesita su propia dirección IP separada para agregarse a su sistema. Debido a que las direcciones IP suelen ser escasas, esto solo tiene sentido si también necesita configurar un servidor FTP o POP3 virtual para el dominio.
- Si su sitio va a estar basado en IP, use el módulo Configuración de red (cubierto en Configuración de red) para agregar una nueva dirección IP virtual a la interfaz de red externa en su sistema. Asegúrese de que se activará en el momento del arranque y que está activo ahora. Si su sistema tiene solo una dirección IP de Internet estática asignada por su ISP, entonces cualquier dirección IP virtual adicional que agregue no funcionará. En ese caso, tendrá que usar un servidor virtual basado en nombre o solicitar que su ISP le asigne varias direcciones.
- Si example.com el dominio ya existe en un servidor DNS, agregue un registro para www.example.com con la dirección IP externa de su sistema (para un sitio basado en nombres) o la dirección elegida en el paso anterior (para un sitio basado en IP). Si el dominio aún no existe, deberá agregarlo a un servidor DNS y registrarlo con un registrador de DNS como Network Solutions. De cualquier manera, la página del Servidor DNS BIND explica cómo agregar registros y dominios en detalle.
- Si el sitio va a utilizar el puerto HTTP estándar 80 (que casi siempre es lo que desea), puede saltar al paso 8. De lo contrario, en la página principal del módulo Apache Webserver, haga clic en Redes y Direcciones para abrir el formulario que se muestra en la primera captura de pantalla a continuación.
- En la fila vacía en Escuchar en direcciones y puertos tabla, seleccione Todos debajo de la Dirección columna y anule la selección de Predeterminado debajo del Puerto columna. Luego ingrese el número de puerto TCP para su sitio web en el campo al lado y haga clic en Guardar botón en la parte inferior de la página.
- En la página principal del módulo, desplácese hacia abajo hasta el formulario *Crear un nuevo servidor virtual* debajo de la lista de hosts virtuales existentes.
- Si está configurando un servidor virtual basado en IP, en la Dirección debe ingresar la dirección IP virtual que se agregó en el paso 3. Si configura un servidor virtual basado en nombre, ingrese la dirección IP externa de su sistema en el campo. Si su servidor Apache se configuró para aceptar conexiones basadas en nombres en cualquier dirección IP, puede seleccionar Cualquiera opción para este campo en su lugar. Consulte la explicación a continuación para obtener más detalles. Si su nuevo servidor virtual va a usar un puerto diferente al 80 y será el único servidor en ese puerto, puede seleccionar Cualquiera opción también para que maneje todas las solicitudes que ingresan en el puerto.
- Si está configurando un servidor virtual basado en IP, anule la selección de Agregar dirección de servidor virtual de nombre caja. Para servidores basados en nombres, debe dejarse habilitado.
- Si el nuevo host virtual va a utilizar un puerto no estándar, seleccione la última opción para el Puerto e ingrese el número en el campo al lado.
- En la raíz del documento campo, ingrese la ruta completa al directorio que contendrá los archivos para este sitio web. Por ejemplo, podría ser /home/example/www .
- En el Nombre del servidor campo, ingrese los nombres de host que los clientes usarán para referirse a este sitio web, como www.example.com . Puede ingresar más de un nombre, como web.example.com y ejemplo.com si este va a ser un servidor basado en nombres al que se debe acceder en varias URL diferentes.
- A menos que tenga un archivo separado en su sistema que contenga todos los hosts virtuales, deje Agregar servidor virtual al archivo campo establecido en Archivo httpd.conf estándar . De lo contrario, puede elegir Archivo seleccionado e ingrese la ruta en el campo al lado. Asegúrese de que Apache utilice realmente el archivo elegido (como una directiva de inclusión en httpd.conf) o el servidor virtual será inútil y no aparecerá en Webmin. Si siempre usa el mismo archivo separado para almacenar hosts virtuales, el Archivo para agregar servidores virtuales campo explicado en el Configuración del módulo Apache Webserver La siguiente sección puede ser útil. Si está configurado, otra opción es agregar al campo * Agregar servidor virtual al archivo * para agregar al archivo establecido por esta opción de configuración del módulo.
- Para que Webmin copie todas las directivas de otro servidor virtual al que está creando, selecciónelo en Copiar directivas de menú. Esto puede ser útil si todos sus servidores virtuales tienen una configuración similar.
- Cuando haya terminado de completar el formulario, haga clic en Crear botón. El nuevo servidor virtual se agregará al archivo de configuración de Apache ya la lista de servidores en la página principal.
- Haga clic en el ícono del nuevo servidor virtual, que lo llevará a su página de opciones, que se muestra en la segunda captura de pantalla a continuación.
- Desplácese hacia abajo hasta el formulario en Opciones por directorio e ingrese el directorio raíz del documento que eligió en el paso 11 en la Ruta campo. Asegúrese de que el Tipo está establecido en Directorio y Regexp? campo a Coincidencia exacta .
- Haga clic en Crear para agregar una nueva sección al archivo de configuración para el directorio. Esto es necesario para que pueda otorgar a los clientes los derechos para explorar los archivos que contiene, lo que niega la configuración predeterminada del directorio de Apache.
- Haga clic en el nuevo icono del directorio que se ha agregado a la página de opciones del servidor virtual. Esto lo llevará a la página de opciones del directorio, que se muestra en la tercera captura de pantalla a continuación.
- Haga clic en Opciones de documento y en el formulario que aparece cambia las Opciones de directorio campo a *Seleccionado a continuación*. En Establecer para directorio columna, cambie la entrada para Generar índices de directorio a Sí . Luego haga clic en Guardar botón en la parte inferior de la página.
- Para activar todos los cambios, haga clic en Aplicar cambios botón en la parte superior de cualquier página.
- Usted o el usuario propietario del servidor virtual ahora pueden comenzar a agregar archivos al directorio raíz del documento. Puede probarlo abriendo la URL (como http://_www.example.com_/) en su navegador web para asegurarse de que todo funciona correctamente.
Cuando Apache recibe una solicitud HTTP, primero debe averiguar para qué servidor virtual es la solicitud. Primero buscará un servidor virtual basado en nombre cuyo nombre de host coincida con el host solicitado por el cliente, y cuya dirección y puerto sean los mismos a los que se conectó el cliente. Si no se encuentra ninguno, se usará el primer servidor virtual definido para la dirección y el puerto en su lugar, o si no hay ninguno, la solicitud será manejada por el servidor predeterminado.
Los servidores virtuales basados en nombres solo se pueden usar en las direcciones enumeradas en Direcciones para servidores virtuales de nombres en la página global Redes y direcciones. Si sigue las instrucciones anteriores, se agregará una dirección a esta lista automáticamente cuando cree un nuevo servidor virtual. Si todos los servidores virtuales de su sistema van a estar basados en nombres, puede abrir esta página, ingresar * en el campo y hacer clic en Guardar para que Apache maneje dichas solicitudes en cualquier dirección IP. Esto también tiene sentido si su sistema tiene una dirección IP asignada dinámicamente y desea servir múltiples hosts virtuales.
Una vez que se ha creado un servidor virtual, puede editar su configuración o eliminarlo siguiendo estos pasos :
- En la página principal del módulo, haga clic en el icono del servidor virtual. Esto lo llevará a la página de opciones del servidor que se muestra en la captura de pantalla anterior.
- Desplácese hacia abajo hasta Detalles del servidor virtual formulario en la parte inferior de la página.
- Cambiar la Dirección , Puerto y otros campos a lo que quieras y haz clic en Guardar botón. Estos campos tienen el mismo significado que en el formulario de creación del servidor virtual. Sin embargo, si la dirección se cambia en un servidor virtual basado en un nombre, es posible que también deba cambiarla en la página global Redes y direcciones. O si desea deshacerse del servidor virtual y todas las directivas de configuración que contiene, haga clic en Eliminar servidor virtual botón en su lugar.
- De vuelta en la página principal del módulo, haga clic en Aplicar cambios enlace para activar la nueva configuración.
No puede cambiar la configuración del servidor predeterminado, ni puede eliminarlo.
Configuración de opciones por directorio
Apache le permite especificar diferentes opciones para ciertos directorios, ya sea para todos los servidores virtuales o solo para uno. Incluyendo directorios, puede establecer opciones que se aplican a tres tipos de objetos en su servidor Apache:
- Directorio Las opciones se aplican a un directorio específico y todos los archivos en él o en los subdirectorios que contiene.
- Archivos Las opciones se aplican a archivos con un nombre específico en cualquier directorio.
- Ubicación Las opciones se aplican a cualquier archivo o directorio solicitado por una URL cuya ruta comience con la ubicación especificada. Por ejemplo, en la URL http://www.example.com/foo la ruta sería /foo .
Cada vez que Apache procesa una solicitud, busca las opciones que se aplican a ella en un orden fijo. Los de las secciones de directorio y los archivos .htaccess se leen primero en orden para que los directorios más específicos se verifiquen primero. Luego les siguen los archivos y luego las secciones de ubicación. Luego, se leen las opciones del servidor virtual al que se realizó la solicitud (si corresponde) y, finalmente, las opciones del servidor predeterminado.
La página de opciones por directorioEsto significa que las opciones establecidas para un directorio anularán las mismas opciones establecidas en un directorio de nivel superior o en el servidor virtual del que es miembro. Para establecer las opciones de ubicación de un directorio, archivos o URL, los pasos a seguir son:
- Aunque las opciones que va a configurar se aplican a un directorio, deben definirse en uno de los servidores virtuales o en el servidor predeterminado. Si están bajo un host virtual, se aplicarán solo a las solicitudes a ese servidor de archivos en el directorio elegido o la ubicación de la URL. Pero si están bajo el servidor predeterminado, se realizarán solicitudes a cualquier servidor virtual de archivos en el directorio. En la página principal del módulo, haga clic en Servidor predeterminado o el icono de un servidor virtual al que desea que se limiten las opciones de directorio. Para los directorios, lo más sencillo suele ser poner sus opciones en el servidor predeterminado, ya que cada host virtual suele tener su propio directorio raíz de documentos independiente. Sin embargo, las opciones de ubicación de URL deben colocarse bajo el servidor virtual con el que están relacionadas, ya que la misma ruta de URL puede usarse de diferentes maneras en más de un host virtual. Lo mismo ocurre con las opciones de archivo.
- En la página de opciones del servidor que aparece (que se muestra en la Figura 29-4), desplácese hacia abajo hasta el formulario *Crear opciones por directorio, archivos o ubicación*.
- Desde el Tipo seleccione una de las opciones descritas anteriormente.
- Si está configurando opciones para un directorio, ingréselo en la Ruta campo como /home/example/www/images . También puede ingresar una ruta comodín como /home/example/w* , lo que hará que las opciones se apliquen a todos los directorios que coincidan. Si las opciones se configuran para una ubicación de URL, ingrese la parte de la URL después del nombre de host en el campo Ruta, como /images . También puede usar caracteres comodín de shell como * y ? en la URL también. Si configura opciones para archivos, ingrese un nombre de archivo en la Ruta campo como secret.html . Una vez más, se pueden usar caracteres comodín en el nombre del archivo, por ejemplo, secreto*.
- Si desea poder utilizar expresiones regulares complejas en el directorio, el nombre de archivo o la ubicación de la URL, establezca Regexp? campo para coincidir con expresiones regulares . Esto le permitirá usar caracteres de expresiones regulares de Perl como [, ], +, . y * en la ruta.
- Haga clic en Crear para agregar la nueva sección de directorio a la configuración de Apache. La página de opciones del servidor virtual se mostrará de nuevo, pero con un nuevo icono para el directorio.
Ahora que ha creado un nuevo ícono para un directorio, ubicación de URL o nombre de archivo, puede configurar las opciones que se aplican a él. Uno de los cambios más comunes por directorio es configurar cómo se enumeran los archivos cuando un navegador solicita un directorio con una URL como http://www.example.com/images/. De forma predeterminada, si hay un archivo index.html en el directorio, se mostrará, o si no, se mostrará una página que enumera todos los archivos que contiene.
Si desea cambiar el nombre del archivo de índice, el estilo de la lista del directorio o cualquier otra configuración relacionada con la indexación, los pasos a seguir son :
- Haga clic en el icono del directorio que desea configurar en la página de opciones del servidor virtual. Esto lo llevará a la página de opciones de directorio que se muestra en la Figura 29-5.
- Haga clic en Indización de directorio icono para abrir un formulario para configurar las opciones de indexación y listado.
- Para cambiar la apariencia de las listas de directorios, establezca el campo *Opciones de índice de directorio* en Seleccionado a continuación y cambie los campos en el cuadro debajo de él. Los valores predeterminados generarán una lista muy sencilla de archivos, pero puede mejorarla configurando las siguientes opciones :
- Mostrar índices de directorio sofisticados Si está habilitado, la lista de archivos incluirá su icono, tamaño y fecha de modificación.
- Mostrar título HTML como descripción Si está habilitado, la descripción de los archivos HTML se tomará de sus etiquetas
. - Altura del icono Esta opción le permite cambiar la altura de los iconos incluidos en la lista del directorio. Si está establecido en Predeterminado , se utilizará la altura de las opciones estándar de Apache.
- Ancho del icono Al igual que la opción anterior, esta le permite especificar el ancho de los iconos en el listado del directorio.
- Permitir que el usuario ordene la columna Cuando esto esté habilitado, los usuarios podrán ordenar la lista de archivos haciendo clic en los encabezados de las columnas, suponiendo que se muestren.
- Mostrar descripciones de archivos Si está habilitado, la lista de directorios incluirá una descripción para cada archivo tomada de su tipo MIME o título HTML.
- Etiquetas de encabezado HTML de salida Cuando está habilitada, la lista del directorio incluirá las etiquetas normales y que deberían comenzar cada página HTML. Solo querrá desactivarlo si proporciona sus propios archivos de encabezado y pie de página.
- Mostrar horas de última modificación Cuando está habilitado, la lista del directorio incluirá la última fecha de modificación de cada archivo.
- Mostrar tamaños de archivo Cuando está habilitado, la lista incluirá el tamaño de cada archivo.
- Incluir icono en enlace Si esta opción está habilitada, el ícono en la lista será un enlace al archivo mismo. De lo contrario, solo el nombre del archivo es un enlace.
- Ancho del nombre de archivo Esta opción controla la longitud de la columna de nombre de archivo en la lista de directorios. Puede ingresar una cantidad de caracteres o * para ajustar el tamaño de la columna a la longitud del nombre de archivo más largo.
- Ancho de la descripción Esta opción controla la longitud de la columna de descripción en la lista del directorio, si la hay. Puede ingresar una cantidad de caracteres o * para ajustar el tamaño de la columna a la longitud de la descripción más larga.
- Mostrar directorios primero Si está habilitado, la lista mostrará los directorios por encima de los archivos, independientemente de cualquier otro archivo. Las opciones que están disponibles dependen de la versión de Apache que haya instalado en su sistema. Los enumerados anteriormente son válidos para la versión 1.3.19, pero si tiene una versión más reciente, es posible que haya más opciones disponibles.
- Si desea que Apache devuelva un archivo que no sea el predeterminado (generalmente index.html) cuando un navegador solicite el directorio, ingrese una lista de nombres de archivo en los Archivos de índice del directorio campo. Se pueden introducir más de uno, y se utilizará el primero que se encuentre. Si no se encuentra ninguno de los archivos de índice, se devolverá al navegador una lista de directorios con las opciones elegidas en el paso 3.
- Para que el servidor web ignore ciertos archivos al generar la lista de archivos en el directorio, ingrese sus nombres de archivo en Archivos para ignorar en el índice del directorio campo. Puede usar comodines de shell en las expresiones regulares, como *.doc .
- Para insertar un archivo HTML al comienzo de la lista de directorios, ingrese su nombre de archivo (relativo al directorio) en el archivo de encabezado del índice de directorio campo.
- Del mismo modo, para agregar un archivo al final de la lista del directorio, introdúzcalo en el archivo de pie de página del índice del directorio campo.
- Para controlar el orden predeterminado del directorio, anule la selección de Predeterminado en el Ordenar índice de directorio por campo y seleccione un orden y una columna para ordenar de los dos menús al lado.
- Puede establecer descripciones para archivos completando la tabla *Descripciones de índice de directorio*. En la fila vacía de la tabla, ingrese un mensaje breve que describa el archivo en la Descripción y una lista de nombres de archivos o nombres comodín en la columna Nombres de archivo columna. Debido a que solo se muestra una fila vacía a la vez, deberá volver a visitar esta página después de agregar cada descripción si desea ingresar más de una.
- Finalmente, haga clic en Guardar en la parte inferior de la página para guardar los cambios y volver a la página de opciones del directorio. Para activarlos, haga clic en Aplicar cambios enlace en cualquier parte del módulo de Apache.
La mayoría de estas opciones se pueden configurar para un servidor virtual completo haciendo clic en el icono de indexación de directorios en la página de opciones del servidor virtual también. En este caso, se aplicarán a todos los archivos solicitados desde el host virtual, a menos que las opciones de directorio o ubicación de URL los anulen.
En la página de opciones del directorio hay muchos más íconos en los que puede hacer clic para establecer opciones que se aplican solo a ese directorio, ruta URL o nombre de archivo. Algunos de estos se explican en otras secciones más adelante en este capítulo, como Alias y redireccionamientos y *Contraseña que protege un directorio*.
Puede cambiar el directorio, los nombres de archivo o la ubicación de la URL a la que se aplican las configuraciones usando las Opciones se aplican a en la parte inferior de la página de opciones del directorio. Tiene exactamente los mismos campos que el formulario de creación descrito al comienzo de esta sección. If you make any changes, click the Save button to update the Apache configuration and then the Apply Changes link to make them active. Or to remove the directory configuration and all its options, click on Delete instead.
Creating aliases and redirects
Normally, there is a direct relationship between the path in URL and the file that is returned by the webserver. For example, if a browser requests http://www.example.com/images/foo.gifand the document root for www.example.com is /home/example/www , then the file /home/example/www/images/foo.gif would be read by the webserver and returned to the client.
This can be changed though by using what Apache calls aliases. An alias maps a particular URL path to a file or directory, which does not necessarily have to be under the document root. So in the example above, the /images URL path might actually be aliases to the directory /www/images , which would cause the file /www/images/foo.gif to be read instead.
Aliases can be defined globally or in a virtual server. To create one, the steps to follow are :
- On the module's main page, click on the icon for the virtual server that you want to create the alias under. If you want it to apply to all virtual servers (or you don't have any), click on the *Default Server *icon instead.
- On the virtual server options page that appears, click on the Aliases and Redirects icon. This will take you to the page in the screenshot below.
- Fill in the empty row in the Document directory aliases table with the URL path (under From ) and the file or directory that it should map to (under To ). If you are editing the default server, there may already be several entries in this table that are part of the standard Apache configuration. There will always be exactly one empty row in the table. If you need to add more than one alias, you will need to re-visit this page after filling in the row and saving.
- Click the Save button to have your new alias stored in the Apache configuration. The browser will return to the virtual server options page.
- To make the alias active, click on the Apply Changes link at the top of the page.
The aliases and redirects form
Existing aliases can be editing by just changing the entries in the Document directory aliases table and then clicking Save . You should not change the alias for /icons in the default server though, as this is used by Apache when it generates icons for directory listings. If you want to delete an alias, just delete the contents of both its fields in the table.
Aliases can also be created that use Perl regular expressions to match more complex URL paths. These must be entered into the Regexp document directory aliases table on the Aliases and Redirects form, which has the same columns as the *Document directory aliases* table described above. The difference is that any regular expression can be entered into the From field, such as ^/images/(.*)\.gif$ . The To field can taken a string that refers to bracketed sections in the expression, such as /images/$1.jpg . This would convert any request for a GIF file into one for the JPEG with the same name.
Redirects are similar to aliases, but have a different purpose and work in a different way. Whenever a client requests a URL path that has been redirected, Apache will tell it to go to another URL (possibly on another server) instead. For example, you might redirect all requests to http://www.example.com/webmin/ to ''http://www.webmin.com/''. Unlike the way aliases behave, if a browser requests a page like /webmin/foo.gif it will not be redirected to ''http://www.webmin.com/foo.gif'' - it will just go to the URL ''http://www.webmin.com/'' instead.
Redirects are implemented by the webserver sending the special 302 status code to the browser, which tells it to go to a new location. It is quite possible for the new URL to be a redirect itself, and you can even create a loop of redirects - not that this is a good idea.
To set up redirection for a path on your server, the steps to follow are :
- On the module's main page, click on the icon for the virtual server that you want to create the redirect under. If you want it to apply to all virtual servers, click on the *Default Server *icon instead.
- On the virtual server options page that appears, click on the Aliases and Redirects icon to go to the page in Figure 29-6.
- In the empty row of the *URL redirects *table, enter the URL path on your server under the From column, such as /webmin . Under the To column, enter the URL that requests should be redirected to, such as http://www.webmin.com/ . The Status field is optional, but can be filled in if you want to change the HTTP status code that will be used for this redirect. The default is 302, which indicates a temporary redirection. However, you can 301 to tell browsers that the direction is permanent, or 303 to tell them that the original content has been replaced. There will always be exactly one empty row in the table. If you need to add more than one redirect, you will need to re-visit this page after filling in the row and saving.
- Click the Save button to have your new redirect stored in the Apache configuration. The browser will return to the virtual server options page.
- To make the redirection active, click on the Apply Changes link at the top of the page.
As with aliases, existing redirects can be edited by just changing the entries in the URL redirects table and then clicking Save . To delete a redirect, just delete the contents of all of its fields in the table.
You can also create regular expression redirects that behave in a similar way to regexp aliases, using the Regexp URL redirects table on the same page. Under the From column you can enter a URL path expression such as ^/webmin/(.*)$ , and under the To column a URL that can refer to bracketed parts of the path, such as http://www.webmin.com/$1 . In this example, an request by a client for a page under /webmin would be redirected to the same file at www.webmin.com .
Also on the Aliases and Redirects page are two more tables labelled Permanent URL redirects and Temporary URL redirects . The first behaves exactly the same as a normal redirection, but with the status code always set to 301, indicating a permanent redirection. The second also behaves like a normal redirect, but always uses a status code of 302 (temporary redirection). This option is really quite useless, as normal redirections default to using status 302 if one is not specified.
Redirects can also be defined in the options for directories, URL locations, filenames and .htaccess files. When editing the options for one of these (described in the *Setting per-directory options* section), the exact same icon and table are available as when setting up aliases for a virtual server. Naturally, a redirect in a directory only makes sense if the URL path being redirected actually refers to that some file or sub-directory that it contains. The same goes for redirects in URL locations - the path being redirected must start with the location's path.
If Apache on your system has been compiled with or dynamically loads the proxy module (covered in the *Configuring Apache as a proxy server* section below), tables labelled *Map locale to remote URLs* and Map remote Location:headers to local will appear on the Aliases and Redirects form under the virtual server options page. These allow you to specify a URL path that when requested will cause Apache to itself request pages from another website and return them to the browser. Even though the URL that the user is accessing is on your server and their browser is connecting only to your system, the content is actually being loaded from elsewhere.
To set up this URL mapping, the steps to follow are :
- On the module's main page, click on the icon for the virtual server that you want to create the mapping under. If you want it to apply to all virtual servers, click on the *Default Server* icon instead.
- On the virtual server options page that appears, click on the Aliases and Redirects icon to go to the page in Figure 29-6.
- In the empty row in the Map locale to remote URLs table, enter a URL path on your server (like /webmin ) into the first field, and the full URL that you want the pages to be requested from into the second (like http://www.webmin.com/ ).
- In the empty row in the Map remote Location:headers to local table, enter the same full remote URL into the first field and the URL path on your server into the second. This second table controls the conversion of redirects issued by the remote server, and should almost always be set. If it is not set, whenever the remote server issues a redirect the browser will end up connecting directly to it instead of to your server.
- Click the Save button to have your new mapping stored in the Apache configuration. The browser will return to the virtual server options page.
- To make the mapping active, click on the Apply Changes link at the top of the page.
You can test it out by going to the mapped URL path on your system, and you should see pages that have been requested from the remote server. The process is not totally transparent though, because it does not convert HTML files in any way. So if in the example above the remote server contained an HTML page with a link like , following it would take the browser to /foo.html on your system, not /webmin/foo.html as you might expect. There is no solution to this problem, apart from making sure that the remote server always uses relative links and image paths.
Running CGI programs
CGI stands for Common Gateway Interface, and is a standard method for webservers to run external programs, pass them details of a browser's request, and read back any content that the program generates. CGI programs are one of the simplest way of adding dynamic pages to your webserver, and are relatively easy to set up and develop. Server-side includes (covered in the next section) are even simpler, but very limited in what they can do.
A CGI program can be written in any language as long as it follows certain rules. The most common is Perl, but C, Python, PHP or any other language that can access environment variables and produce output can be used. You can even write shell scripts that are valid CGI programs. This section is not going to explain the details of how to write them though - there are plenty of books that cover that already.
CGI programs are just files on your system, like any other HTML or image file. The difference is that when they are requested by a browser, Apache executes them and returns their output instead of the contents of the file. Because you only want this to happen for programs and not for HTML files, the server must be configured to identify certain files as CGI programs. This is normally done in one of two ways - by putting all CGI programs into a certain directory, or by giving them all a file extension like .cgi.
The choice is yours, but the latter option is simpler to use as you can freely mix CGI scripts, HTML and image files in the same directory. To set it up, the steps to follow are :
- On the module's main page, click on the icon for the virtual server that you want to set up CGI programs for. Or click on the *Default Server *icon if you want to use them on all servers.
- Click on the icon for the directory that you want CGI programs to be enabled under. Typically each virtual server will have an icon for options for its document root directory, but if not you can create one by following the steps in the *Setting per-directory options* section above. If you only want to allow CGI programs to be run in some sub-directory of the website, you can create a new directory icon for that as well.
- On the directory options page, click on the Document Options icon and change the Directory options field from Default to Selected below . Then set the rows Execute CGI programs and Generate directory indexes to Yes , and click the Save botón en la parte inferior de la página. This tells Apache that CGI programs can be executed in the directory.
- Back on the directory options page, click on the MIME Types icon. In the Content handlers table, select cgi-script from the first blank menu under the Handler column, and enter .cgi into the field next to it under the Extensions columna. Then click the Save button at the end of the form. This tells Apache to treat all files in the directory ending in .cgi as CGI programs.
- Finally, click the Apply Changes link on any page. You should now be able to create a file with a .cgi extension in the chosen directory, and test it out in a web browser.
An alternative to this approach is to specify a directory in which all files are treated as CGI programs. This has the advantage that they can be given any name you like, instead of being forced to have a .cgi extension. You can also set permissions on this directory to restrict who is allowed to create CGI programs, while still allowing others to edit normal HTML pages.
To set up a directory for CGI scripts, the steps to follow are :
- On the module's main page, click on the icon for the virtual server that you want to set up a CGI directory for. Or click on the *Default Server* icon if you want to set it up for all servers.
- Click on the CGI Programs icon to bring up a page for setting various CGI options.
- The CGI directory aliases table works in a very similar to the Document directory aliases table described in the previous section. However, in addition to mapping a URL path to a directory on your server it also tells Apache that any files accessed through that path should be treated as CGI programs. In the first empty row of the table, enter a URL path like /cgi-bin/ into the From field and a directory like /home/example/cgi-bin/ into the To campo.
- Click the Save button at the bottom of the page to return to the virtual server options page. Then click the Apply Changes link to make the CGI directory active.
You should now be able to create CGI programs in the directory, and test them out in a web browser. On some Linux distributions, the default Apache configuration will already have a CGI directory available at the URL path /cgi-bin/, mapped to a directory like /home/httpd/cgi-bin/. If this is good enough for you, there is no need to follow the steps above - instead, you can just put CGI programs in that directory.
Normally, all CGI programs execute as the Unix user that the webserver runs as, typically named httpd or apache. On a system with multiple users who cannot be fully trusted, this is not a good thing - anything that one user's CGI program can do, everyone else's can as well. So for example if a user writes a CGI program that edits some file, he would have to make that file writeable by the httpd user, meaning that everyone else's CGI programs could write to it as well.
Fortunately, there is a solution. Apache comes with an optional program called suexec that can be used to have CGI programs run as some other Unix user, rather than as the webserver user. Typically the CGI programs under each virtual server will be run as the Unix user who owns that server's files. To set this up, the steps to follow are :
- Make sure that the suexec program exists on your system, and that it has setuid-root permissions. Apache typically expects to find it in /usr/sbin or /usr/local/apache/sbin, and most Linux distributions include it as a standard part of their Apache package. However, some do not have it setuid by default, so you may need to run chmod 6711 /usr/sbin/suexec to make it so.
- On the main page of the module, click on the icon for the virtual server that you want to have CGI programs run as a different user on. This will take you to the options page shown in Figure 29-4.
- Click on the User and Group icon on the virtual server options page.
- For the Run as Unix user field, select User name and enter the name of the user who owns the virtual server into the field next to it.
- Similarly, for Run as Unix group select Group name and enter the primary group of the user specified in the previous step.
- Click the Save button to return to the options page for the virtual server.
- To activate suexec for the first time, you need to stop and re-start Apache. Use the Stop Apache link at the top of the page to halt it, and then the Start Apache link to start it up again.
- To check that suexec is actually working, check the Apache error log file for a line containing suEXEC mechanism enabled that was logged when the webserver was re-started.
Because it can execute commands as any user on your system, suexec has many security restrictions to prevent misuse by normal users. It will only run CGI programs that are owned by the user and group specified in steps 4 and 5, and only if they are not writeable by any other user, or in a directory that is writeable by another user. The IDs of the user and group must be above minimums that are compiled into the program, to prevent programs owned by system users such as root or bin from being run. Finally, the program must reside under a directory that is compiled into suexec, and nowhere else on the filesystem.
This last restriction can be very annoying if you have a large number of virtual servers and want to enable the execution of CGI programs in their directories. The default allowed directory is typically the standard CGI directory for Apache, such as /home/httpd/cgi-bin. To change this, you will need to re-compile suexec with a different directory, such as /home.
Whenever suexec fails to run a CGI program, it fails with HTTP status code 500. Because there are many things that can go wrong, you should check the file suexec_log in the same directory as the other Apache logfiles to see why it is refusing to execute a particular program. For each failure, a line is written to this file explaining the problem, such as incorrect permissions or a file ownership mismatch.
Writing CGI programs can be difficult because when they fail, very little information is displayed in the browser. All you see is a message like 500 server error , which no explanation of the real cause. However, more detailed error information is written to the Apache error log file. This is usually named error_log, and can be found in the same directory as the Apache access log files. See the section below on Configuring logging for more details on how to find and change it.
Anything that a CGI programs outputs to STDERR will also be written to the error log, which is useful if you want your program to generate debugging information that is not sent to the web browser. Because many programming languages like Perl output error messages on STDERR if a script fails to compile or run, all such messages will also be written to the error log file.
The biggest problem with CGI programs is that the webserver has to launch a new process every time one is requested. If the CGI is written in Perl or PHP, the process then has to load the interpreter for that language which can itself be a large program. The end result is that processing a request for a CGI page takes much longer than a request for a static HTML or image file, and generates much more load on the server system.
For this reason, optional modules have been developed that allow the webserver to run Perl and PHP scripts using an interpreter that is part of the Apache process. These modules are called mod_perl and mod_php, and are included in the Apache package in many Linux distributions. Installing and configuring them is not covered in this chapter though.
Setting up server-side includes
Server-side includes allow you to create simple dynamic web pages without the complexity of writing an entire CGI program in a language like Perl. When active, some of the HTML files served by Apache are checked for special tags starting with appears in the HTML of page, it is replaced with the contents of the file something.html .
Server-side includes can also be used to access and set environment variables, to conditionally display HTML based on variables and to run CGI programs or shell commands and have their output included in the page. This section will not cover the tags that are available and the purposes though - instead, you should read the documentation on the Apache website or a good book on HTML.
Normally, allowing un-trusted users to create HTML pages containing server-side include tags is perfectly safe because they cannot be used to perform potentially dangerous operations like editing files on the server. The exception to this is the tag, which can be used to run an arbitrary shell command and have its output included in the web page. Because the command runs as the Unix user that Apache is running as (normally httpd), a user who is not allowed to create CGI programs may be able use this kind of tag to read or modify files that he would not normally be able to. For this reason, Apache can be configured to enable server-side includes with or without the risky exec tag.
Because checking an HTML file for server-side include tags is CPU intensive, they are often only activated for files with the .shtml extension. This way you can put static HTML in .html files and dynamic content into .shtml files, so that the server does not have to waste time looking for tags in files that do not contain them. However, it is also quite possible to have all .html files checked for server-side includes if you wish.
To turn on includes for a virtual server, the steps to follow are:
- On the module's main page, click on the icon of the virtual server that you want to enable server-side includes on. Or click on the Default Server icon to enable them for all virtual hosts.
- Click on the icon for the directory that you want server-side includes to be enabled under. Typically each virtual server will have an icon for options for its document root directory, but if not you can create one by following the steps in the *Setting per-directory options* section above. If you only want to enable server-side includes in some sub-directory of the website, you can create a new directory icon for that as well.
- On the directory options page, click on the Document Options icon and change the Directory options field from Default to Selected below . If you want to enable server-side includes without the exec tag, change the Server-side includes row to Yes . If you want to enable the potentially risky exec tag as well, change Server-side includes and execs row to Yes en cambio. Either way, when they have been enabled click the Save botón en la parte inferior de la página.
- Click on the MIME types icon on the directory options page. If you want to enable includes on all HTML files, find the *Content handlers* table to select server-parsed from the first empty menu under the Handler column, and enter .html into the field next to it under the Extensions columna. This tells Apache that files ending in .html should be checked for server-side include tags. If you want to enable includes for only .shtml files, enter .shtml instead of .html under the Extensions columna. Then in the Extra MIME types table enter text/plain into the first empty field under the Type column and .shtml into the field under Extensions next to it. This tells Apache that .shtml files should be checked for server-side include tags, and that they actually contain HTML.
- Finally, click the Save button at the bottom of the MIME Types page, and then the Apply Changes link back on the directory options page.
Once server-side includes are enabled, you can test them by creating an .html or .shtml file in the chosen directory with some special tags it in. Then open the page in your web browser to see the result. If for some reason server-side includes were not enabled properly, nothing will show up at all because the