HTTPD - Apache2 Web Server
Apache es el servidor web más utilizado en sistemas Linux. Los servidores web se utilizan para servir las
páginas web solicitadas por los equipos cliente. Los clientes suelen solicitar y ver páginas web mediante
aplicaciones de navegador web como Firefox, Opera, Chromium o Internet Explorer.
Los usuarios ingresan un localizador uniforme de recursos (URL) para apuntar a un servidor web mediante
su nombre de dominio completo (FQDN) y una ruta al recurso requerido. Por ejemplo, para ver la página
de inicio del sitio web de Ubuntu, un usuario ingresará solo el FQDN:
www.ubuntu.com
Para ver la subpágina de la comunidad, un usuario ingresará el FQDN seguido de una ruta:
www.ubuntu.com/community
El protocolo más común utilizado para transferir páginas web es el Protocolo de transferencia de
hipertexto (HTTP). También se admiten protocolos como el protocolo de transferencia de hipertexto a
través de la capa de conexión segura (HTTPS) y el protocolo de transferencia de archivos (FTP), un
protocolo para cargar y descargar archivos.
Los servidores web Apache se utilizan a menudo en combinación con el motor de base de datos
MySQL, el lenguaje de scripting HyperText Preprocessor (PHP) y otros lenguajes de scripting
populares como Python y Perl. Esta configuración se denomina LAMP (Linux, Apache, MySQL y
Perl/Python/PHP) y forma una plataforma potente y robusta para el desarrollo y despliegue de
aplicaciones basadas en web.
Instalación
El servidor web Apache2 está disponible en Ubuntu Linux. Para instalar Apache2 en el símbolo del sistema,
ingrese el siguiente comando:
sudo apt install apache2
Configuración
Apache2 se configura colocando directivas en archivos de configuración de texto sin formato.
Estas directivas están separadas entre los siguientes archivos y directorios:
• apache2.conf: es el archivo de configuración principal de Apache2. Contiene
configuraciones que son globales para Apache2. Indicar la ruta de este archivo.
• httpd.conf: históricamente, el archivo de configuración principal de Apache2, llamado así por el
demonio httpd. En otras distribuciones (o versiones anteriores de Ubuntu), el archivo podría
todavía estar presente. En Ubuntu, todas las opciones de configuración se han movido a
apache2.conf y los directorios a los que se hace referencia a continuación, y este archivo ya no
existen.
• conf-available: este directorio contiene archivos de configuración disponibles. Todos los archivos
que estaban previamente en /etc/apache2/conf.d deben moverse a
/etc/apache2/conf−available. Indique los archivos que se encuentran en este directorio.
• conf-enabled: contiene enlaces simbólicos a los archivos en /etc/apache2/conf−available.
Cuando un archivo de configuración tiene un enlace simbólico, se habilitará la próxima vez que
se reinicie apache2. ¿Qué archivos y de qué tipo se encuentran en este directorio?
• envvars: archivo donde se establecen las variables de entorno de Apache2.
• mods-available: este directorio contiene archivos de configuración para cargar módulos y
configurarlos. Sin embargo, no todos los módulos tendrán archivos de configuración
específicos. ¿Cuántos archivos encuentra en este directorio?
• mods-enabled: contiene enlaces simbólicos a los archivos en /etc/apache2/mods-available.
Cuando un archivo de configuración de módulo tiene un enlace simbólico, se habilitará la
próxima vez que se reinicie apache2. ¿Cuántos archivos y de qué tipo encuentra usted en esta
carpeta?
• ports.conf: contiene las directivas que determinan en qué puertos TCP escucha Apache2. ¿Qué
puerto escucha si estuviera activado el módulo ssl?
• sites-available: este directorio tiene archivos de configuración para los Apache2 Virtual Hosts.
Los hosts virtuales permiten que Apache2 se configure para varios sitios que tienen
configuraciones independientes.
• sites-enabled: al igual que mods-enabled, sites-enabled contienen enlaces simbólicos al
directorio /etc/apache2/sites-available. Igualmente, cuando un archivo de configuración en
sites-available es enlazado, el sitio configurado por él estará activo una vez que se reinicie
Apache2.
• magic: instrucciones para determinar el tipo MIME (extensiones multipropósito de correo
de internet) en función de los primeros bytes de un archivo.
Además, se pueden agregar otros archivos de configuración usando la directiva Include y se
pueden usar comodines para incluir muchos archivos de configuración. Cualquier directiva
puede colocarse en cualquiera de estos archivos de configuración. Los cambios a los archivos de
configuración principal sólo son reconocidos por Apache2 cuando se inicia o reinicia.
El servidor también lee un archivo que contiene tipos de documentos mime; el nombre del
archivo lo establece la directiva TypesConfig, generalmente a través de
/etc/apache2/mods−available/mime.conf, que también puede incluir adiciones y anulaciones, y
es /etc/mime.types por defecto.
Configuración básica
Esta sección explica los parámetros de configuración esenciales del servidor Apache2. Consulte
la documentación de Apache2 para más detalles.
• Apache2 se envía con una configuración predeterminada de virtual-host-friendly. Es
decir, está configurado con un único host virtual predeterminado (utilizando la directiva
VirtualHost) que puede modificarse o usarse como si tuviera un solo sitio, o usarse como
plantilla para hosts virtuales adicionales si tiene varios sitios. Si se deja solo, el host
virtual predeterminado servirá como su sitio predeterminado, o los usuarios del sitio
verán si la URL que ingresan no coincide con la directiva ServerName de cualquiera de
sus sitios personalizados. Para modificar el host virtual predeterminado, edite el archivo
/etc/apache2/sites−available/000−default.conf.
Nota
Las directivas establecidas para un host virtual sólo se aplican a ese host
virtual en particular. Si una directiva se establece en todo el servidor y no
está definida dentro de la configuración del host virtual, se utiliza la
configuración predeterminada. Por ejemplo, puede definir una dirección de
correo electrónico del Webmaster y no definir direcciones de correo
electrónico individuales para cada host virtual.
Si desea configurar un nuevo sitio o host virtual, copie ese archivo en el mismo directorio
con el nombre que elija. Por ejemplo:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-
available/mynewsite.conf.
Edite el nuevo archivo para configurar el nuevo sitio utilizando algunas de las directivas
que se describen a continuación.
• La directiva ServerAdmin especifica la dirección de correo electrónico que se anunciará
al administrador del servidor. El valor predeterminado es webmaster@localhost. Esto
debe cambiarse a una dirección de correo electrónico que se le entregue (si es el
administrador del servidor). Si su sitio web tiene un problema, Apache2 mostrará un
mensaje de error que contiene esta dirección de correo electrónico para informar el
problema. Busque esta directiva en el archivo de configuración de su sitio en
/etc/apache2/sites-available/000-default.conf.
• La directiva Listen especifica el puerto y, opcionalmente, la dirección IP que Apache2
debería escuchar. Si no se especifica la dirección IP, Apache2 escuchará todas las
direcciones IP asignadas a la máquina en la que se ejecuta. El valor predeterminado para
la directiva Listen es 80. Cambie esto a 127.0.0.1:80 para que Apache2 escuche sólo en
su interfaz de loopback para que no esté disponible en Internet, a (por ejemplo) 81 para
cambiar el puerto que sigue escuchando o déjelo como está para su funcionamiento
normal. Esta directiva se puede encontrar y cambiar en su propio archivo,
/etc/apache2/ports.conf. Actividad: Haga que el servidor escuche el puerto 8080
• La directiva ServerName es opcional y especifica a qué FQDN debe responder su sitio.
El host virtual predeterminado no tiene ninguna directiva ServerName especificada, por
lo que responderá a todas las solicitudes que no coincidan con una directiva ServerName
en otro host virtual. Si acaba de adquirir el nombre de dominio mynewsite .com y desea
alojarlo en su servidor Ubuntu, el valor de la directiva ServerName en su archivo de
configuración de host virtual debe ser mynewsite.com. Agregue esta directiva al nuevo
archivo de host virtual que creó anteriormente:
/etc/apache2/sites−available/mynewsite.conf.
También puede querer que su sitio responda a www.mynewsite.com, ya que muchos
usuarios asumirán que el prefijo www es apropiado. Utilice la directiva ServerAlias para
esto. También puede utilizar comodines en la directiva ServerAlias.
Por ejemplo, la siguiente configuración hará que su sitio responda a cualquier solicitud
de dominio que termine en .mynewsite.com.
ServerAlias *.mynewsite.com
• La directiva DocumentRoot especifica dónde debe buscar Apache2 los archivos que
componen el sitio. El valor predeterminado es /var/www/html, como se especifica en
/etc/apache2/sites−available/000−default.conf. Si lo desea, cambie este valor en el
archivo de host virtual de su sitio y recuerde crear ese directorio si es necesario.
Actividad: la página index.ttml se lea desde la carpeta /var/www/sitegrupo1
Habilite el nuevo VirtualHost usando la utilidad a2ensite y reinicie Apache2:
sudo a2ensite mynewsite
sudo systemctl restart apache2.service
Nota
Asegúrese de reemplazar mynewsite con un nombre más descriptivo para
VirtualHost. Un método es nombrar el archivo después de la directiva
ServerName de VirtualHost.
De manera similar, use la utilidad a2dissite para deshabilitar sitios. Esto puede resultar útil para
solucionar problemas de configuración con varios VirtualHosts:
sudo a2dissite mynewsite
sudo systemctl restart apache2.service
Ejemplo:
Creación de 2 sitios virtuales: grupo1.ec y grupo2.ec
1) En el directorio /var/www crear dos carpetas, una para cada sitio que se quiera crear. Por
ejemplo:
/var/www/grupo1.ec/public, y
/var/www/grupo2.ec/public.
Las carpetas public/ contienen las páginas web de los respectivos sitios, así que habrá que
crear estas páginas y ponerlos en las carpetas respectivas.
Comandos a usar:
sudo mkdir -p /var/www/grupo1.ec/public
sudo mkdir -p /var/www/grupo2.ec/public
La idea de crear el directorio public/ es guardarse un nivel de directorio para archivos
relacionados con el sitio web, que no deben ser accesibles desde una url en el navegador.
Esto es bastante habitual en muchas aplicaciones y frameworks.
2) Cada sitio web está asociado con su propio archivo de configuración, ubicado en
/etc/apache2/sites-available/. En este sitio, existe, por defecto, un archivo de
configuración llamado 000-default.conf que está asociado con la página web por defecto:
/var/www/html/index.html.
Puesto que cada archivo de configuración de cada sitio tiene una misma estructura, es
buena idea copiar el archivo 000-default.conf con los nombres grupo1.ec.conf y
grupo2.ec.conf.
El archivo 000-default.conf tiene el siguiente contenido:
La línea 1 indica que el puerto a utilizar es el puerto por defecto, es decir, el puerto 80. La
línea 12 indica el directorio en el que se encontrará el archivo index.html que será leído y
renderizado en el navegador.
Suponiendo que para el URL grupo1.ec se quiere usar el puerto 8080, el archivo de
configuración respectivo deberá ser editado con el comando:
sudo vim /etc/apache/sites-available/grupo1.ec.conf
de la siguiente manera:
Nótese que se han modificado solamente las líneas 1 para que el puerto que utilice el
grupo1.ec sea el 8080, se ha agregado la línea 11, especificando el nombre del servidor y
se ha modificado la línea 13, respecto del archivo original 000-default.conf.
Por defecto Apache solo atiende solicitudes por el puerto 80. Para conseguir que también
atienda las que llegan por el puerto 8080, que es el que hemos indicado en nuestro fichero
de configuración del virtual host, debemos editar el archivo /etc/apache2/ports.confcon el
comando:
sudo vim /etc/apache2/ports.conf
En el que se agregará la línea 6 del siguiente contenido:
Así mismo se debe crear el otro archivo de configuración para el sitio grupo2.ec con el
comando:
sudo vim /etc/apache/sites-available/grupo2.ec.conf
De manera que quede:
Aquí, se ha agregado la línea 11 para indicar el nombre de este servidor y se ha modificado
la línea 12 respecto del archivo original 000-default.conf.
3) Habilitar los nuevos VirtualHost creados. Para este propósito se usa los comandos:
sudo a2ensite grupo1.ec.conf, y
sudo a2ensite grupo2.ec.conf
Estos comandos crearán enlaces simbólicos en la carpeta sites-enabled.
4) Reiniciar apache. Puesto que se han hecho algunas modificaciones en varios ficheros, estos
deben ser leídos para que tengan efecto. Para ello se debe reiniciar Apache con el siguiente
comando:
sudo systemctl reload apache2
5) Luego de efectuar los pasos anteriores, el sitio por defecto seguirá funcionando. Para
desactivar el sitio por defecto representado por 000-default.conf, utilice el comando:
sudo a2dissite 000-default.conf
Luego habrá que recargar apache2.
6) Para comprobar si hay algún error de sintaxis en los archivos de configuración, se puede
usar el comando:
sudo apache2ctl configtest
7) Configurar HTTPS. El módulo mod_ssl agrega una característica importante al servidor
Apache2: la capacidad de cifrar las comunicaciones. Por lo tanto, cuando su navegador está
comunicando mediante SSL, se utiliza el prefijo https:// al comienzo del Localizador de
Recursos Uniforme (URL) en la barra de navegación del navegador.
El módulo mod_ssl está disponible en el paquete apache2-common. Ejecute el siguiente
comando en el prompt del terminal para habilitar el módulo mod_ssl module:
sudo a2enmod ssl
Existe un archivo de configuración HTTPS predeterminado en /etc/apache2/sites-
available/default-ssl.conf. Para que Apache2 proporcione HTTPS, también se necesitan un
archivo de certificado y un archivo de clave. La configuración HTTPS predeterminada
utilizará un certificado y una clave generados por el paquete ssl-cert. Son buenos para las
pruebas, pero el certificado y la clave generados automáticamente deben ser
reemplazados por un certificado específico para el sitio o el servidor.
El archivo /etc/apache2/sites-available/default-ssl.conf deberá contener los VirtualHost
que se deseen crear. En el caso de este ejemplo, puesto que se quieren crear dos
VirtualHost, se necesitarán tener en dicho archivo dos secciones de VirtualHost y en cada
uno de ellas especificar el ServerName y DocumentRoot correspondientes a los dos host
virtuales.
Finalmente, para configurar Apache2 para HTTPS, ingrese lo siguiente:
sudo a2ensite default-ssl
nmtui
Primer Clase Octetos Octetos Máscara Privadas
octeto Red Host por
defecto
0 - 127 A 1 3 /8 10.0.0.0 a
10.255.255.255
128 - 191 B 2 2 /16 172.16.0.0 a
172.31.255.255
192 - 223 C 3 1 /24 192.168.0.0 a
192.168.255.255
224 - 239 D
240 - 255 E
192.168.1.144 /24 DG: 192.168.1.1 DNS: