Administración del Servidor Web (Apache)
1. Iniciar /Parar el servidor Apache
Una vez instalado el servidor web Apache, queda configurado como un servicio del ordenador. Dependiendo del sistema operativo y si se
dispone o no de entorno gráfico, podemos utilizar las herramientas gráficas de administración de servicios o de comandos de consola para la
gestión de servicios.
Dependiendo de la distribución Linux que utilicemos, el servicio Apache tendrá uno de estos dos nombres:
httpd
apache2
En Debian, el servicio se denomina apache2, siendo los comandos inicio, parada y reinicio:
Iniciar Parar Reiniciar Recargar Estado
service apache2 start service apache2 stop service apache2 restart service apache2 reload service apache2 status
/etc/init.d/apache2 start /etc/init.d/apache2 stop /etc/init.d/apache2 restart /etc/init.d/apache2 reload /etc/init.d/apache2 status
systemctl start apache2 systemctl stop apache2 systemctl restart apache2 systemctl reload apache2 systemctl status apache2
Apache2 también dispone de un comando específico: apache2ctl
Iniciar Parar Reiniciar Recargar Estado
apache2ctl startt apache2ctl stop apache2ctl restart apache2ctl reload apache2ctl status
2. Configuración básica
La instalación de Apache crea por defecto un sitio web (/var/www/html) y usa el nombre del
archivo índice por defecto index.html.
Para modificar la configuración del servidor Apache, podemos editar el archivo principal de
configuración /etc/apache2/apache2.conf o editar alguno de los archivos que incluye este
archivo. Apache2 dispone de un gran número de directivas que podemos usar para la
configuración del servidor. La siguiente tabla describe las que se pueden considerar directivas
necesarias para realizar una configuración básica.
Directivas de configuración básica
Directiva Descripción
Nombre de equipo y puerto que usa el servidor para identificarse ante los
ServerName
clientes. En definitiva, indica el nombre del sitio web.
Indica la carpeta en la que se ha instalado el servidor. No es la carpeta de
ServerRoot
archivos de configuración. ServerRoot /usr/local/apache
Especifica los puertos del servidor en los que escucha a los clientes y
Listen opcionalmente las direcciones IP de los adaptadores de red que utiliza. Listen 80
Listen 192.168.3.5:8080
Máximo tiempo en segundos que el servidor espera un nuevo mensaje de un
Tiemout
cliente para no cerrar la conexión.
Para indicar que se mantenga (on) o no (off) una conexión con un cliente para
KeepAlive
varias transacciones.
Carpeta raíz que contiene todos los archivos del sitio web. DocumentRoot
DocumentRoot
var/web/
Indica los nombres de las páginas web índice que puede entregar el servidor por
defecto cuando en la petición HTTP la URL contiene sólo un nombre de carpeta.
DirectoryIndex
DirectoryIndex index.html
home.html index.php
Especifica las direcciones IP y puerto en los que el servidor recibirá peticiones
para sitios web virtuales basados en nombre. Si se usa esta directiva, se deben
NameVirtualHost
definir los sitios virtuales dentro de una directiva <VirtualHost> …
</VirtualHost>.
En el archivo de configuración se describe la estructura de la carpeta /etc/apache2, la forma de
iniciar el servidor y los comandos para la activación y desactivación de componentes de
configuración (a2en* y a2dis*).
La configuración del servidor Apache sigue unas reglas de sintaxis específicas. Si algún fichero de
configuración tuviese error, al iniciar el servicio se detendría y presentaría en pantalla un mensaje
indicando el problema encontrado. Elementos de la sintaxis son:
comentario: línea que empieza por el carácter #
directiva: línea de asignación con la estructura
NombreDirectiva ValorAsignado
bloque: Conjunto de directivas agrupadas dentro de una estructura
<NombreBloque Objeto>...</NombreBloque>
En el directorio /etc/apache2 está el archivo envvars que contiene las variables de entorno.
La asignación de valores se hace con la instrucción:
export NOMBRE_VARIABLE = valor
Las variables pueden incorporarse en cualquier directiva con el formato:
${NOMBRE_VARIABLE}
3. Módulos
El servidor web Apache se distribuye en módulos con el fin de que en cada instalación sólo se
implemente las funciones que se necesite. Cada módulo de Apache agrupa un conjunto de
funciones relacionadas para cubrir una necesidad específica. Así si estamos poniendo en marcha
un servidor web con PHP, no es necesario que instalemos los módulos que permiten trabajar con
código escrito en lenguaje Java.
Los módulos son distribuidos de dos maneras:
compilados dentro del ejecutable apache2 (apache2 -l)
compilados de forma individual como una biblioteca de enlace dinámico (con extensión
.so y alojados en /usr/lib/apache2/modules/).
Los archivos de configuración de los módulos se guardan en la configuración de apache2 en dos
directorios:
/etc/apache2/mods-available/: Directorio que contiene los módulos disponibles en la
instalación actual.
/etc/apache2/mods-enabled/: Directorio que incluye mediante enlaces simbólicos al
directorio anterior, los módulos que se van a cargar en memoria la próxima vez que se
inicie Apache
En /etc/apache2/mods-available podemos encontrar para cada módulo un
fichero nombre_modulo.load que contiene la directiva de carga:
LoadModule nombre_modulo path_modulo
Si el módulo requiere una configuración adicional mediante directivas, se guardarían en la misma
carpeta en el archivo nombre_modulo.conf.
Si queremos que Apache utilice cualquier módulo, lo que tendríamos que hacer es un enlace
simbólico del fichero de extensión .load (y del .conf si existe) en el directorio /etc/apache/mods-
enabled. Este enlace lo podemos hacer con la instrucción a2enmod. La operación contraria
(borrado del enlace simbólico) lo podemos hacer con el comando a2dismod.
4. Servidores y Hosts virtuales.
La finalidad de un servidor web es que se muestre un sitio web que podemos definir como un
conjunto de páginas html relacionadas entre sí por una dirección IP o una url o nombre de dominio
Los servidores web más sencillos sólo permiten configurar un sitio web. Las páginas html asociadas
estarán contenidas en una carpeta del servidor (que denominaremos carpeta raíz) o en
subcarpetas de la mismas.
Apache permite configurar más de un sitio web en una instalación del mismo. Los sitios web
virtuales pueden estar “basados en direcciones IP”, lo que significa que cada sitio web tiene una
dirección IP diferente, o “basados en nombres diferentes”, lo que significa que con una sola
dirección IP están funcionando sitios web con diferentes nombres (de dominio). El término host
virtual hace referencia a cada sitio web adicional.
De forma análoga a los módulos, las configuraciones de los host virtuales se guardan en ficheros
con extensión *.conf en la configuración de apache2 en dos directorios:
/etc/apache2/sites-available/: Directorio que contiene los sitios disponibles en la
instalación actual.
/etc/apache2/sites-enabled/: Directorio que incluye mediante enlaces simbólicos al
directorio anterior, los sitios que se van a cargar en memoria la próxima vez que se inicie
Apache.
Para habilitar o deshabilitar los hosts virtuales, de forma análoga a los módulos, tenemos los
comandos a2ensite y a2dissite.
El contenido de un archivo de configuración se inicia con un bloque VirtualHost. Dentro de este
bloque las principales directivas que pueden declararse son:
ServerName: Nombre por el que se va a acceder al virtual host.
ServerAdmin: Correo electrónico del responsable de este virtual host.
ServerAlias: Otros nombres con los que se puede acceder al sitio.
DocumentRoot: directorio donde se guardan los ficheros servidos en este virtual host.
5. Control de Acceso
El control de acceso hace referencia a todos los medios que proporcionan una forma de controlar
el acceso a cualquier recurso. En la versión actual de Apache (2.4) , la
directiva Require proporciona una variedad de diferentes maneras de permitir o denegar el acceso
a los recursos. Además, puede ser usada junto con los bloques: RequireAll, RequireAny y
RequireNone, estos requerimientos pueden ser combinados de forma compleja y arbitraria, para
cumplir cualquiera que sean tus políticas de acceso.
RequireAll: Todas las condiciones dentro del bloque se deben cumplir para obtener el
acceso.
RequireAny: Al menos una de las condiciones en el bloque se debe cumplir.
RequireNone: Ninguna de las condiciones se deben cumplir para permitir el acceso.
La directiva Require se utiliza en los bloques de Directory para establecer el control de acceso en
los mismos.
En el archivo de configuración del servidor (apache2.conf) tenemos los bloques Directory por
defecto:
Para el directorio raíz (/) se impide que se pueda publicar contenidos (require all none)
Para el directorio /var/www se permite publicar contenidos (require all granted) por eso
es el directorio por defecto de ubicación de los sitios.
También tenemos que se puede publicar en el directorio /usr/share, por eso, podemos
abrir en el navegador phpmyadmin (/usr/share/phpmyadmin)
6. Autenticación
Otra facilidad que permite el servidor Apache es la capacidad de restringir el acceso un sitio web
(o parte de un sitio web) mediante la autenticación del visitante. Esta autenticación evita tener
que hacerlo en el propio contenido. Ahora, para los CMS (al manejar ACLs con roles y usuarios con
capacidad de modificar su contraseña) esta funcionalidad no sería muy operativa
Para ello, Apache dispone de módulos como:
mod_auth_basic: autenticación básica incluida y activada en Apache
auth_digest: autenticación avanzada incluida pero no activada en Apache
7. El protocolo HTTPS
El protocolo HTTPS realiza el cifrado de la comunicación entre el navegador y el servidor web
evitando que su contenido, si es interceptado, pueda ser leído. Sus características más importante
son:
Utiliza el protocolo SSL (actualmente TLS) para el cifrado de datos.
El servidor utiliza por defecto el puerto 443/tcp.
Utiliza mecanismos de cifrado de clave pública y las claves públicas se denominan
certificados.
El formato de los certificados está especificado por el estándar X.509 y normalmente son
emitidos por una entidad denominada Autoridad Certificadora (CA por sus siglas en inglés)
cuya función principal de la CA es demostrar la autenticidad del servidor y que pertenece
legítimamente a la persona u organización que lo utiliza. Una vez aceptado el certificado
de un servidor web, el navegador utiliza éste para cifrar los datos que quiere enviar al
servidor mediante el protocolo HTTPS y cuando llegan al servidor sólo éste podrá
descifrarlos ya que es el único que posee la clave privada que los descifra.
Para configurar el protocolo HTTPS en un sitio web, es necesario activar el módulo SSL de Apache
(se descarga, pero no se activa -- a2enmod ssl)
Creamos un archivo de configuración de site, al que añadiremos un bloque IfModule mod_ssl.c
que incluirá las directivas:
SSLEngine on
SSLCertificateFile /etc/ssl/certs/nombre_certificado.pem
SSLCertificateKeyFile /etc/ssl/private/nombre_certificado.key
Con la directiva SSLEngine activamos el uso de HTTPS, SSLCertificateFile nos permite indicar el
certificado emitido por la CA y con SSLCertificateKeyFile indicamos nuestra clave privada.
Activamos el sitio con a2ensite y recargamos el servidor con systemctl reload apache2
8. .htaccess: Personalización de Directorios
La recomendación de Apache sobre el funcionamiento del servidor web es concentrar las
configuraciones en el menor número de ficheros posibles. Aun así, existen situaciones, como los
servicios de hosting, en los que no es posible acceder a los ficheros principales de configuración de
apache.
Para estas situaciones, existen los ficheros .htaccess (o "ficheros de configuración
distribuida") que facilitan poder hacer cambios en la configuración (a nivel directorio) con
independencia de las reglas establecidas en su carpeta padre. Un fichero, que contiene una o más
directivas, se coloca en como documento específico de un directorio en el mismo directorio, y
estas directivas aplican a ese directorio y todos sus subdirectorios.