Cómo instalar Apache en Ubuntu 20.04 LTS

En esta entrada veremos cómo instalar Apache en Ubuntu 20.04 LTS Focal Fossa paso a paso, de modo que puedas desplegar el servidor web más usado en Internet desde tu servidor o VPS Ubuntu.

Antes de instalar Apache en Ubuntu 20.04 Focal Fossa

Para poder completar los pasos de esta guía de instalación de Apache en Ubuntu 20.04 debes cumplir los siguientes requisitos:

  • Un sistema Ubuntu 20.04 Focal Fossa actualizado.
  • Un usuario con permisos de sudo.
  • Acceso a Internet.

Además, si tu servidor web va a ser accesible desde Internet, vas a configurar servidores virtuales, etc. necesitarás disponer de uno o varios dominios registrados y configurados para apuntar a la dirección IP de tu servidor Ubuntu 20.04, lo que puedes hacer a través de servicios profesionales como Namecheap:

Si vas a trabajar en red local no será necesario registrar dominios, sólo configurar adecuadamente el servicio DNS.

Cómo instalar Apache en Ubuntu 20.04 Focal Fossa

Vamos a instalar Apache en Ubuntu 20.04 LTS desde los repositorios de la distribución, por lo que actualizaremos las listas de paquetes como paso previo:

~$ sudo apt update

El paquete que necesitamos es apache2, que instalaremos con apt:

~$ sudo apt install -y apache2

Terminada la descarga e instalación de Apache y sus dependencias se crea un nuevo servicio en Ubuntu 20.04, el servicio apache2.service o apache2, que queda en ejecución y habilitado para su inicio automático en cada arranque del sistema.

Puedes comprobar el estado de Apache en Ubuntu 20.04 en cualquier momento con el comando systemctl status apache2:

como instalar apache en ubuntu 20.04 lts focal fossa

Para averiguar la versión de Apache que tenemos instalada en Ubuntu 20.04 podemos usar el comando apachectl:

~$ apachectl -v
Server version: Apache/2.4.41 (Ubuntu)
Server built:   2020-04-13T17:19:17

Cómo configurar el firewall UFW de Ubuntu 20.04 para Apache

Si tienes activado el firewall UFW en Ubuntu 20.04 y quieres que Apache sea accesible desde la red, habrá que añadir algunas reglas para UFW.

Para permitir el acceso web estándar, protocolo HTTP, añadiremos la siguiente regla:

~$ sudo ufw allow http

Y si vas a ofrecer conexiones cifradas mediante HTTPS añadiremos esta otra regla:

~$ sudo ufw allow https

Cómo conectar a Apache en Ubuntu 20.04 Focal Fossa

Para acceder a Apache en Ubuntu 20.04 desde un navegador bastará con usar la dirección IP o dominio del servidor como URL, de modo que aparecerá la página web por defecto:

instalar apache en ubuntu 20.04 lts focal fossa

Cómo configurar Apache en Ubuntu 20.04 Focal Fossa

Para configurar Apache en Ubuntu 20.04 tendremos que trabajar sobre sus archivos de configuración, organizados bajo la ruta /etc/apache2.

Vamos a editar el fichero de configuración principal:

~$ sudo nano /etc/apache2/apache2.conf

Y al principio del archivo incluiremos una directiva ServerName:

...
        ServerName ubuntu2004.local
...

El valor de esta directiva puede ser el dominio principal del servidor, su nombre de máquina o incluso su dirección IP. El caso es que mientras no esté configurada, se lanzarán avisos en los registros de que no se puede resolver su valor.

Guardados los cambios, recargaremos la configuración de Apache:

~$ sudo systemctl reload apache2

Existen más archivos de configuración, muchos organizados en subdirectorios. Los archivos de configuraciones adicionales, módulos de Apache y servidores virtuales se guardan en los directorios conf-available/, mods-available/ y sites-available/ respectivamente. Pero estos archivos no son tenidos en cuenta por Apache a no ser que existan enlaces simbólicos en los subdirectorios conf-enabled/, mods-enabled/ y sites-enabled/.

Por tanto activar una configuración consiste en crear el correspondiente enlace simbólico, y desactivarla consiste en eliminar el enlace simbólico (sin necesidad de borrar físicamente el archivo de configuración). Podría resultar engorroso crear y eliminar manualmente estos enlaces, pero en Ubuntu 20.04 Apache nos ofrece las herramientas a2enconf, a2enmod y a2ensite para activar configuraciones, y a2disconf, a2dismod y a2dissite para desactivarlas.

Veremos ejemplos de uso a continuación.

Servidores virtuales de Apache en Ubuntu 20.04

La configuración de los servidores virtuales de Apache en Ubuntu 20.04 se guarda en los directorios sites-available/ y sites-enabled/. Hay que tener en cuenta que el sitio web por defecto, que ya hemos visitado, realmente es un servidor virtual, cuya configuración se guarda en el archivo sites-available/000-default.conf.

Para crear un nuevo servidor virtual de Apache necesitaremos en primer lugar un dominio distinto al principal, apuntando a la dirección IP del servidor.

En este ejemplo, en el que el dominio principal de la máquina Ubuntu 20.04 es ubuntu2004.local, tendremos un subdominio ejemplo.ubuntu2004.local configurado y apuntando a la dirección IP del servidor. Si intentamos acceder obtendremos la misma página web por defecto, ya que todos los dominios que apunten al servidor, si no tienen su propio servidor virtual, serán atendidos por el servidor virtual por defecto.

instalar y configurar apache en ubuntu 20.04 lts focal fossa

Ahora vamos a crear un servidor virtual que responda al dominio ejemplo.ubuntu2004.local. Para ello crearemos la carpeta de documentos web de este sitio:

~$ sudo mkdir /var/www/ejemplo.ubuntu2004.local

Y creamos un archivo HTML para tener un contenido mínimo:

~$ sudo nano /var/www/ejemplo.ubuntu2004.local/index.html

El contenido será lo justo para identificar el sitio:

<h1>Bienvenidos a ejemplo.ubuntu2004.local</h1>
<small>http://ejemplo.ubuntu2004.local</small>

Guardamos los cambios y creamos el archivo de configuración del servidor virtual:

~$ sudo nano /etc/apache2/sites-available/ejemplo.ubuntu2004.local.conf

Con el siguiente contenido:

<VirtualHost *:80>
        ServerName ejemplo.ubuntu2004.local
        DocumentRoot /var/www/ejemplo.ubuntu2004.local

        <Directory /var/www/ejemplo.ubuntu2004.local>
        </Directory>

        CustomLog ${APACHE_LOG_DIR}/access-ejemplo.ubuntu2004.local.log combined
        ErrorLog ${APACHE_LOG_DIR}/error-ejemplo.ubuntu2004.local.log
</VirtualHost>

La estructura de la configuración es la siguiente:

  • El bloque VirtualHost, dentro del que editamos la configuración.
  • ServerName especifica el dominio al que responde el servidor virtual.
  • DocumentRoot es la carpeta de archivos del sitio web.
  • En el bloque Directory podemos establecer configuraciones personalizadas para el directorio especificado.
  • CustomLog es el registro de accesos.
  • ErrorLog es el registro de errores.

Guardamos los cambios y activamos el servidor virtual:

~$ sudo a2ensite ejemplo.ubuntu2004.local.conf

Y recargamos la configuración de Apache para que el nuevo servidor virtual esté disponible:

~$ sudo systemctl reload apache2

Si accedemos tanto a http://ubuntu2004.local como a http://ejemplo.ubuntu2004.local, veremos que ahora cada dominio ofrece un sitio web diferente:

como configurar apache en ubuntu 20.04 lts focal fossa

Este proceso lo podemos realizar con tantos dominios y servidores virtuales como necesitemos.

Seguridad con el protocolo HTTPS en Apache para Ubuntu 20.04

Para poder configurar el protocolo HTTPS de Apache en Ubuntu 20.04 hay que cargar el módulo SSL, que por defecto no está activado:

~$ sudo a2enmod ssl

Será necesario reiniciar el servicio:

~$ sudo systemctl restart apache2

Si trabajamos con dominios en Internet es importante obtener certificados firmados por autoridades certificadoras, como los que puedes obtener en servicios como Namecheap:

SSL Certificate for just $8.88 with Namecheap

En este tutorial usaremos dominios locales y certificados autofirmados, para que todo el mundo pueda practicar la configuración.

Creamos certificados autofirmados para el servidor virtual de nuestro ejemplo:

~$ sudo openssl req -newkey rsa:2048 -x509 -nodes -days 365 -out /etc/ssl/certs/ejemplo.ubuntu2004.local.crt -keyout /etc/ssl/private/ejemplo.ubuntu2004.local.key

Tendremos que facilitar información para identificación del certificado, la mayoría opcional, pero sí es importante especificar en «Common Name» el dominio para el que creamos los certificados:

...
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:ejemplo.ubuntu2004.local
Email Address []:
~$

Ahora creamos la configuración para el servidor virtual, en el subdirectorio sites-available/:

~$ sudo nano /etc/apache2/sites-available/ejemplo.ubuntu2004.local.conf

Tras el bloque VirtualHost existente añadimos uno nuevo para la configuración SSL:

...
<VirtualHost *:443>
        ServerName ejemplo.ubuntu2004.local
        DocumentRoot /var/www/ejemplo.ubuntu2004.local

        <Directory /var/www/ejemplo.ubuntu2004.local>
        </Directory>

        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/ejemplo.ubuntu2004.local.crt
        SSLCertificateKeyFile /etc/ssl/private/ejemplo.ubuntu2004.local.key

        CustomLog ${APACHE_LOG_DIR}/access-ejemplo.ubuntu2004.local.log combined
        ErrorLog ${APACHE_LOG_DIR}/error-ejemplo.ubuntu2004.local.log
</VirtualHost>

La mayoría de directivas de configuración son las mismas, pero introducimos algunas novedades:

  • VirtualHost especifica el puerto de conexión, el 443 es el estándar para conexiones HTTPS.
  • SSLEngine activa el cifrado SSL para este servidor virtual en el puerto especificado.
  • SSLCertificateFile indica la ruta al certificado público.
  • SSLCertificateKeyFile indica la clave privada con la que se cifra la conexión.

Guardamos los cambios y recargamos la configuración de Apache:

~$ sudo systemctl reload apache2

Accedemos al servidor virtual, pero esta vez lo hacemos usando el protocolo HTTPS, en este ejemplo accedemos con https://ejemplo.ubuntu2004.local como URL:

configurar servidores virtuales de apache en ubuntu 20.04 lts focal fossa

Al tratarse de certificados autofirmados el navegador no podrá comprobar su autenticidad, por eso muestra la advertencia. Si los certificados estuvieran firmados por alguna autoridad certificadora reconocida, el navegador habría accedido al sitio directamente. El navegador suele ofrecer la forma para continuar con el acceso, mostrándose la página:

servidores virtuales de apache en ubuntu 20.04 lts focal fossa

Se mostrará el sitio pero, dependiendo del navegador, de un modo u otro seguirá avisando del problema de los certificados autofirmados. Aun así, la conexión está cifrada y es segura.

Conclusión

Ahora que sabes cómo instalar y configurar el servidor web Apache en Ubuntu 20.04 LTS Focal Fossa podrás desplegar diversos sitios web, tanto en red local como desde Internet, gracias a la característica de servidores virtuales, y usando el cifrado SSL para establecer conexiones seguras HTTPS.

Si tienes alguna duda o pregunta, quieres sugerir alguna mejora de este artículo o notificar algún error, puedes dejar un comentario.

¡Apoya comoinstalar.me!

¿Ya dispones de servicio web gracias a esta guía de instalación y configuración de Apache en Ubuntu 20.04 LTS? Si es así y te apetece agradecérnoslo realizando una mínima aportación que ayudará mucho al mantenimiento de este sitio y a la creación de nuevos tutoriales de Ubuntu 20.04 o Apache, puedes hacerlo o dejando 1 $ de propina con PayPal para una CocaCola:

O, si te sientes especialmente agradecido, invitándonos a un cappucino:

¡Gracias!

Valora esta entrada

5/5 - (4 votos)

7 comentarios en «Cómo instalar Apache en Ubuntu 20.04 LTS»

  1. Mil gracias por el tuto, está muy bien redactado.
    En mi caso no me deja publicar el servidor virtual, me manda error del AccessLog. ¿Alguna pista que me pueda orientar y poder levantar el servicio?

    ● apache2.service – The Apache HTTP Server
    Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
    Active: failed (Result: exit-code) since Sun 2022-02-20 18:29:07 CST; 7min ago
    Docs: https://httpd.apache.org/docs/2.4/
    Process: 25047 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)

    feb 20 18:29:07 alberto-desktop systemd[1]: Starting The Apache HTTP Server…
    feb 20 18:29:07 alberto-desktop apachectl[25050]: AH00526: Syntax error on line 9 of /etc/apache2/sites-enabled/ubuntu2022.local.conf:
    feb 20 18:29:07 alberto-desktop apachectl[25050]: Invalid command ‘AccessLog’, perhaps misspelled or defined by a module not included in the server configuration
    feb 20 18:29:07 alberto-desktop apachectl[25047]: Action ‘start’ failed.
    feb 20 18:29:07 alberto-desktop apachectl[25047]: The Apache error log may have more information.
    feb 20 18:29:07 alberto-desktop systemd[1]: apache2.service: Control process exited, code=exited, status=1/FAILURE
    feb 20 18:29:07 alberto-desktop systemd[1]: apache2.service: Failed with result ‘exit-code’.
    feb 20 18:29:07 alberto-desktop systemd[1]: Failed to start The Apache HTTP Server.

    Responder
  2. Hola amigos.

    Los felicito, está muy bueno el tuto, como ninguno que haya visto en mucho tiempo, en verdad que excelente; sin embargo, he tenido dificultad con los servidores virtuales, no se crean, he revisado exhaustivamente paso por paso el documento pero no logro ingresar.

    Por otro lado, encontré un errorcito justo en este renglón: AccessLog ${APACHE_LOG_DIR}/error-ejemplo.ubuntu2004.local.log, donde dice Access debe ser Error para que el apache funcione correctamente, o al menos así se ha funcionado a mí.

    Agradecería sus palabras al respecto.

    Saludos,

    Manuel Rangel

    Responder
    • ¡Gracias, Manuel! Ya lo hemos corregido, intentamos siempre evitar los errores, pero siempre se cuela alguno. Por otro lado, no queda claro cuál es exactamente tu problema. Si arrancas el servicio y configuras el firewall deberías poder acceder desde el navegador al servicio web Apache a través de la dirección IP, o del nombre DNS si tienes un dominio configurado.

      Responder
      • Hola, antes que nada, ¡excelente tutorial!
        Supongo que Manuel Rangel se refiere a que no puede acceder desde el navegador al nuevo VirtualHost porque dentro del tutorial se saltea el paso de configurar el DNS agregando el dominio al archivo /etc/hosts.

        Para completar el ejercicio de configurar el dominio propuesto en el tutorial (ejemplo.ubuntu2004.local) dentro de un entorno local de pruebas, podríamos hacer lo siguiente:

        # agregar la siguiente línea a /etc/hosts
        127.0.0.1 ejemplo.ubuntu2004.local

        Guardamos los cambios y ya deberíamos poder acceder a esa URL (siempre localmente).

        ¡Espero que sirva el aporte!
        ¡Saludos!

        Responder
        • ¡Hola, Pablo! El problema de Manuel podría ser ese y podría ser cualquier otro, ya que no ofreció pista alguna.
          Por otro lado, en el tutorial omito el paso que mencionas porque no forma parte del tema principal, pertenece a otros aspectos de las configuraciones de red, y los posibles escenarios son tantos que no tiene sentido intentar abarcarlos. Por ejemplo, Manuel podría trabajar sobre una máquina Windows y configurar remotamente la máquina Ubuntu 20.04 sobre la que está instalando Apache.

          Responder

Deja un comentario