Cómo instalar Apache en Ubuntu 20.04

Español English

El Proyecto Apache HTTP Server es un esfuerzo comunitario por desarrollar y mantener un servidor HTTP de código abierto para sistemas operativos modernos (UNIX, GNU/Linux, BSD, Windows).

En este artículo configuraremos Apache como proxy reverso del servicio PHP-FPM.

Un proxy reverso es un tipo de servidor proxy que procesa solicitudes http(s) y las distribuye de forma transparente a uno o más servidores backend.

Recomiendo leer Instalar y configurar Apache HTTP server antes de continuar.

Instalar servidor apache

$ sudo apt install apache2

Administrar el servicio apache2

En esta parte aprenderemos cómo iniciar, detener o reiniciar el servicio apache2, usando el comando systemctl, systemctl forma parte de la suite systemd (systemd es un reemplazo para el sistema de inicialización SysV y también un conjunto de configuración y gestión de servicios para el sistema operativo GNU/Linux)

Comprobar estado

Con el siguiente comando comprobamos si el servidor web se está ejecutando exitosamente, note la linea Active: active (running)

$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2020-10-31 15:02:47 UTC; 1h 25min ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 620 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
    Process: 1611 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
   Main PID: 666 (apache2)
      Tasks: 55 (limit: 1075)
     Memory: 9.7M
     CGroup: /system.slice/apache2.service
             ├─ 666 /usr/sbin/apache2 -k start
             ├─1615 /usr/sbin/apache2 -k start
             └─1643 /usr/sbin/apache2 -k start
...

Iniciar el servicio

En caso de que el servicio esté detenido: Active: inactive puede iniciarlo ejecutando el siguiente comando:

$ sudo systemctl start apache2

Reiniciar el servicio

Para aplicar cualquier modificación realizada al fichero de configuración debe reiniciar el servidor con el siguiente comando:

$ sudo systemctl restart apache2

Refrescar configuraciones

Es preferible usar el siguiente comando para refrescar las configuraciónes ya que el servicio recargará las configuraciones sin perder las conexiones.

$ sudo systemctl reload apache2

Detener el servidor

Si desea detener el servicio ejecute el siguiente comando:

$ sudo systemctl stop apache2

Iniciar con el sistema operativo

Puede asegurarse de que el servicio apache2 se iniciará automáticamente después de un reinicio del sistema operativo ejecutando el siguiente comando:

$ sudo systemctl is-enabled apache2
enabled

El resultado del comando anterior es enabled o disabled, en caso de de que sea disable ejecute:

$ sudo systemctl enable apache2
Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable apache2

Si desea que no se inicie con el sistema operativo ejecute:

$ sudo systemctl disable apache2
Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable apache2
Removed /etc/systemd/system/multi-user.target.wants/apache2.service.

Verificar modulos cargados

Apache presenta una arquitectura modular la cual permite extender las funcionalidades básicas mediante la selección de un conjunto de módulos: los módulos son compilados como Dynamic Shared Objects (DSO) y prodrán activarse y desactivarse a través de la directiva LoadModule.

Con el siguiente comando verificamos cuales son los módulos activos.

$  apachectl -M
Loaded Modules:
 core_module (static)
 so_module (static)
 watchdog_module (static)
 http_module (static)
 log_config_module (static)
 logio_module (static)
 version_module (static)
 unixd_module (static)
 access_compat_module (shared)
 alias_module (shared)
 auth_basic_module (shared)
 authn_core_module (shared)
 authn_file_module (shared)
 authz_core_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 filter_module (shared)
 mime_module (shared)
 mpm_event_module (shared)
 negotiation_module (shared)
 reqtimeout_module (shared)
 setenvif_module (shared)
 status_module (shared)

Habilitar mod_rewrite

mod_rewrite es un podoreso y sofisticado módulo del servidor web Apache que permite la rescritura de urls haciendo uso de expresiones regulares (PCRE).

$ sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
$ sudo systemctl restart apache2

Vea:

Habilitar mod_proxy

mod_proxy es el módulo principal proxy que permite redireccionar las solicitudes http(s) a los servidores de aplicaciones subyacentes.

$ sudo ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enabled/proxy.load
$ sudo systemctl restart apache2

Habilitar mod_proxy_fcgi

mod_proxy_fcgi es un módulo que le permite al Apache comunicarse con un servidor FastCGI. Este módulo requiere el módulo mod_proxy.

$ sudo ln -s /etc/apache2/mods-available/proxy_fcgi.load /etc/apache2/mods-enabled/proxy_fcgi.load
$ sudo systemctl reload apache2

Configurando un VirtualHost

El alojamiento virtual permite alojar varios dominio en un mismo servidor, compartiéndose los recursos del servidor como la memoria y los ciclos del procesador.

Comentando algunas directivas:

  • VirtualHost: permite crear un sitio virtual, encapsula varias directivas en un mismo bloque definiendo las características del sitio virtual, el uso más común de un sitio virtual es el de representar un sitio web, el valor de *:80 significa que este sitio virtual está disponible en el puerto 80 y en todas las direcciones IP permitidas por la directiva Listen si desea establecer una conexión segura debe configurar un certificado SSL y establecer 443 como valor del puerto.

  • ServerName: URL principal a través de la cual accede a su sitio web.

  • ServerAdmin: establece la dirección de contacto que el servidor incluye en cualquier mensaje de error que devuelve al cliente. Si httpd no reconoce el argumento proporcionado como una URL, asume que es una dirección de correo electrónico y la antepone mailto: en los destinos de hipervínculo. Si desea utilizar una URL, debe apuntar a otro servidor bajo su control. De lo contrario, es posible que los usuarios no puedan comunicarse con usted en caso de errores.

  • ErrorLog: establece el nombre del archivo en el que el servidor registrará cualquier error que encuentre. Si la ruta del archivo no es absoluta, se asume que es relativa a [ServerRoot](core – Apache HTTP Server Version 2.4). Nótese el uso de la vairable de entorno APACHE_LOG_DIR la cual está definida en el fichero /etc/apache2/envars

  • CustomLog Donde se van a loguear las peticiones al servidor web.

  • Directory: es usada para encapsular un grupo de directivas que se aplicaran al directorio especificado y a los subdirectorio correspondientes, en este caso se aplica la directiva AllowOverride al directorio /var/www/wordpress y a los sudirectorios que se encuentran debajo del directorio wordpress.

  • AllowOverride: determina conjuntamente con la directiva AllowOverrideList si se permite el uso de .htaccess y en caso de permitirse que directivas se pueden sobreescribir en el .htaccess, un valor de All significa que todas la directivas se pueden sobreescribir, un valor de None significa que se pueden sobreescribir las directivas especificadas en AllowOverrideList si ambas directivas tienen el valor de None entonces no se permite .htaccess.

  • FilesMatch: aplica las directivas encerradas en el bloque a todos los ficheros que casan con el patrón o expresión regular, por ejemplo a todos los ficheros PHP le aplica la directiva SetHandler.

  • SetHandler: Aplica un controlador determinado a todos los archivos coincidentes. Un «controlador» es una representación interna de Apache de la acción que se debe realizar cuando se llama a un archivo, en nuestro caso todos los ficheros PHP serán procesados por el servidor FHP-FPM, el servidor Apache tratará de comunicarse con el servicio PHP-FPM vía unix socket o vía socket TCP/IP de acuerdo a la configuración establecida, si tiene el servicio Apache y PHP-FPM en servidores diferentes entonces solo use socket TPC/IP.

Consulte Instalar y configurar Apache HTTP server para más información sobre otras Directivas y configuración en general.

Creando fichero de configuración

Es recomendable crear un fichero de configuración por cada sitio virtual debajo del directorio /etc/apache2/sites-available/:

$ sudo touch /etc/apache2/sites-available/mysite.conf

Agregue ,al fichero creado, la siguiente configuración.

<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that
    # the server uses to identify itself. This is used when creating
    # redirection URLs. In the context of virtual hosts, the ServerName
    # specifies what hostname must appear in the request's Host: header to
    # match this virtual host. For the default virtual host (this file) this
    # value is not decisive as it is used as a last resort host regardless.
    # However, you must set it for any further virtual host explicitly.
    ServerName www.midominio.com

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/wordpress
    DirectoryIndex index.php
    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    #LogLevel info ssl:warn

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/wordpress>
        AllowOverride All
    </Directory>
    <FilesMatch \.php$>
        # Unix sockets require 2.4.7 or later    
        # SetHandler "proxy:unix:/run/php/php7.4-fpm.sock"
        # TCP/IP socket
        SetHandler "proxy:fcgi://192.168.100.82:9000"
    </FilesMatch>
</VirtualHost>

El directorio /var/www/wordpress debe existir y estar accesible tanto para el Apache como para el servicio PHP-FPM.

Si la configuración anterior no le funciona, chequee los ficheros error.log y access.log ahi el apache salva errores y peticiones web.

Activar el sitio

Active el sitio ejecutando el siguiente comando

$  sudo ln -s /etc/apache2/sites-available/mysite.conf /etc/apache2/sites-enabled/mysite.conf 

Refrescar configuración:

 sudo systemctl reload apache2

Lecturas recomendadas


YouTube video

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.