Apache, más precisamente Apache HTTP Server, es un servidor Web multiplataforma seguro, eficiente y extensible de código abierto. Provee la funcionalidad suficiente para cubrir todos los requisitos especificados por los estándares del protocolo HTTP actual.



Este artículo explica cómo instalar el servidor Apache en Debian o Devuan desde el gestor de paquetes APT, junto con su configuración y comandos básicos.

Instalación de Apache

Para comenzar, actualizar el sistema:

# apt-get update && apt-get upgrade

Luego instalar Apache ejecutando:

# apt-get install apache2

Una vez finalizado, es posible comprobar que el servidor se encuentra corriendo y escuchando peticiones en el puerto 80 (HTTP):

root@devuan:~# netstat -tulpn | grep apache2
tcp6       0      0 :::80                   :::*                    LISTEN      1483/apache2

También es posible acceder a una dirección IP correspondiente al servidor desde un navegador Web (o utilizando curl o wget desde línea de comandos) para ver la clásica página "It works!".

Por defecto, Apache utiliza el módulo de multi-procesamiento MPM (Multi-Processing Module) event, el cual implementa un servidor híbrido conformado por subprocesos multihilados. Aunque muchas instalaciones utilizan el módulo MPM prefork, que utiliza un pool de procesos hijos (pre-forked), en vez de hilos, para procesar las solicitudes. También está disponible el módulo worker, el cual implementa un híbrido de múltiples subprocesos multihilados.

El módulo MPM elegido define qué estrategia de implementación utilizará Apache para procesar múltiples requerimientos en simultáneo. Cada una tiene diferentes requisitos a nivel sistema operativo y apunta a diferentes objetivos. Es recomendable revisar cada una y elegir adecuadamente de acuerdo a las metas de escalabilidad y eficiencia. En caso de duda utilizar el módulo por defecto (no realizar cambios en al configuración).

Si se desea cambiar a prefork, ejecutar:

# a2enmod mpm_prefork

Si se desea cambiar a event, ejecutar:

# a2enmod mpm_event

Si se desea cambiar a worker, ejecutar:

# a2enmod mpm_worker

Luego, reiniciar Apache.

Configuración de Apache

En los sistemas basados en Debian/Devuan y derivados, toda la configuración de Apache se encuentra dentro del directorio /etc/apache2.

La configuración global del servidor se encuentra en el archivo apache2.conf. Generalmente, en los sistemas Debian/Devuan no debe tocarse este archivo, ya que desde aquí se incluyen todos los archivos que poseen las configuraciones personalizadas.

El archivo envvars posee la configuración de variables de entorno utilizadas por Apache, por ejemplo usuario y grupo con el que corre el servidor; directorios para guardar PIDs, locks, logs, etc.; y configuración de idioma (Locale). En la mayoría de los casos, este archivo tampoco debe modificarse.

El archivo ports.conf define las direcciones IP y puertos en los cuales Apache acepta peticiones. Este archivo es muy importante y debe modificarse adecuadamente, por ejemplo para permitir múltiples certificados SSL en una misma dirección IP.

Luego existen dos pares de directorios muy interesantes, que ordenan de manera brillante las configuraciones personalizadas del servidor Apache:

  • mods-available/ - Directorio que contiene las configuraciones de todos los módulos disponibles.
  • mods-enabled/ - Módulos habilitados.
  • sites-available/ - Directorio que contiene las configuraciones de todos los sitios disponibles.
  • sites-enabled/ - Sitios habilitados.

Las configuraciones para todos los módulos y todos sitios se encuentran en los directorios *-available/. Debian determina qué módulos y sitios están habilitados creando links simbólicos en sendos directorios *-enabled/. De esta forma, los directorios mods-available/ y sites-available/ contienen las configuraciones de módulos y sitios respectivamente, mientras que mods-enabled/ y sites-enabled/ enlazan a las configuraciones (localizadas en mods-available/ y sites-available/ respectivamente) de los módulos/sitios habilitados.

Para no tener que gestionar enlaces simbólicos manualmente, el paquete apache2 provee los siguientes utilitarios:

  • a2enmod para habilitar módulos.
  • a2dismod para deshabilitar módulos.
  • a2ensite para habilitar sitios.
  • a2dissite para deshabilitar sitios.

Ejemplos:

root@devuan:# a2ensite default-ssl
Enabling site default-ssl.
To activate the new configuration, you need to run:
  service apache2 reload
root@devuan:~# a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
  service apache2 restart

Cuando se habilita/deshabilita un módulo es necesario luego reiniciar el servidor, mientras que cuando se habilita/deshabilita un sitio sólo es necesario recargar la configuración de Apache.

Si se desea listar los módulos de Apache cargados se debe recurrir al utilitario apache2ctl. Los módulos de Apache se instalan en el directorio /usr/lib/apache2/modules/. El utilitario apache2ctl posee además funcionalidades para visualizar el estado del servidor, a través de los subcomandos status y fullstatus.

Apache incluye la configuración de un sitio Web por defecto llamado "default". Su configuración se encuentra en el archivo 000-default.conf:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

En esta configuración simple se define un sitio genérico que resuelve en todas las direcciones IP en las que atienda el servidor Web, en el puerto 80. La raíz del sitio Web se encuentra en el directorio /var/www/, y los logs de accesos y errores se almacenan en los archivos /var/log/apache2/access.log y /var/log/apache2/error.log respectivamente.

Por seguridad, es recomendable deshabilitar el sitio Web por defecto y definir uno específico para cada sitio que se hospedará en el servidor.

Por lo general un servidor Web hospedará uno o varios dominios de Internet, por ejemplo "www.linuxito.com".

Para mantener el esquema ordenado y prolijo propuesto por Debian, se recomienda que cada sitio a hospedar en el servidor se configure en su propio archivo, dentro del directorio /etc/apache2/sites-available/. Por ejemplo, si se desea hospedar el sitio Web correspondiente al dominio "www.linuxito.com", se puede crear un archivo llamado www.linuxito.com.conf:

# nano /etc/apache2/sites-available/www.linuxito.com.conf

Con el siguiente contenido:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName www.linuxito.com
        DocumentRoot /var/www/www.linuxito.com
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/www.linuxito.com>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/www.linuxito.com-error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/www.linuxito.com-access.log combined

</VirtualHost>

La raíz del sitio se alojará en el directorio www.linuxito.com/, por ende es necesario crearlo:

# mkdir /var/www/www.linuxito.com

Los logs de acceso y errores se separan del sitio por defecto, para poder identificar a qué sitio corresponde cada acceso.

Una vez creado el sitio, solo basta habilitarlo y recargar la configuración de Apache:

# a2ensite www.linuxito.com
# service apache2 reload

El utilitario a2ensite permite omitir la extensión .conf al indicar la configuración de un sitio.

El siguiente paso seguramente sea configurar y habilitar SSL/TLS para proveer HTTPS.

¿Vas a necesitar dar soporte a aplicaciones PHP con bases de datos MySQL/MariaDB en tu servidor Apache? Próximamente explicaré cómo...

Referencias


Tal vez pueda interesarte


Compartí este artículo