En esta entrada veremos cómo instalar Apache en Ubuntu 18.04 LTS Bionic Beaver paso a paso, con lo que tendremos el servidor web más popular de Internet en uno de los sistemas más utilizados en los servicios VPS Ubuntu profesionales.
Contenido
Antes de instalar Apache en Ubuntu 18.04 LTS
Conviene que antes de empezar esta guía de instalación y configuración de Apache en Ubuntu 18.04 LTS cumplas los siguientes requisitos básicos:
- Una instalación de Ubuntu 18.04 LTS Bionic Beaver lo más reciente y acualizada posible.
- Un usuario con privilegios de sudo para poder instalar paquetes y modificar archivos del sistema.
- Conexión a Internet.
Con todo esto, ¡ya podemos empezar a instalar Apache en Ubuntu 18.04!
Cómo instalar Apache en Ubuntu 18.04 LTS
Para instalar Apache en Ubuntu 18.04 LTS emplearemos los repositorios y réplicas del sistema, así que previamente actualizaremos las listas de paquetes:
~$ sudo apt update
Concretamente instalaremos apache2, el paquete principal, y automáticamente se añadirán a la descarga e instalación todas las dependencias necesarias:
~$ sudo apt install -y apache2
El servicio apache2 queda en ejecución tras la instalación y, además, se configura para iniciar automáticamente en cada arranque de Ubuntu 18.04. Para comprobar que Apache está iniciado usaremos el comando systemctl status apache2
:
Cómo configurar el firewall UFW para Apache en Ubuntu 18.04
Si quieres que se pueda acceder al servidor web Apache desde la red y tienes activado el firewall UFW en tu sistema Ubuntu 18.04, necesitarás añadir las reglas que permitan las conexiones:
~$ sudo ufw allow http
Si vas a utilizar páginas seguras con conexión SSL tendrás que permitir también el servicio HTTPS:
~$ sudo ufw allow https
Cómo probar el servicio Apache
Seguro que quieres comprobar el servicio a través de un navegador, así que si la máquina Ubuntu es un sistema de escritorio, abrimos un navegador en la propia máquina, con la dirección http://127.0.0.1 ó http://localhost.
Si accedemos desde otra máquina (como se hará en este ejemplo) se debe introducir la dirección de la interfaz de red con que se conecta la máquina Ubuntu a la red local, o un dominio que apunte a esa dirección.
Por ejemplo, la máquina Ubuntu 18.04 sobre la que hemos realizado este tutorial es accesible en el subdominio ubuntu64.local.lan, así que podemos usar http://ubuntu64.local.lan como URL:
Cómo saber la versión de Apache instalada
Para saber qué versión de Apache tenemos instalada en Ubuntu 18.04, aunque ya intuirás que se trata de Apache 2 por el nombre del paquete que hemos instalado, usaremos el comando apache2ctl:
~$ apachectl -v Server version: Apache/2.4.29 (Ubuntu) Server built: 2021-06-18T11:06:22
Veremos la versión y revisión de Apache y la fecha de compilación de los binarios.
Cómo configurar Apache en Ubuntu 18.04 LTS
Al configurar Apache en Ubuntu 18.04 debemos tener en cuenta que toda la configuración se guarda en el directorio /etc/apache2/, siendo /etc/apache2/apache2.conf el archivo principal de configuración de Apache.
Cómo activar módulos de Apache en Ubuntu 18.04
La instalación estándar de Apache en Ubuntu 18.04 viene con muchos módulos con diversas funcionalidades para el servidor web, pero no todos están cargados o activos.
Si quieres saber qué módulos están cargados en tu configuración, lanza el comando apachectl -M
:
Si necesitas algún módulo concreto y no está en esa lista deberás activarlo. Por ejemplo, si quisieras activar el módulo de CGI podrías activarlo con el comando a2enmod:
~$ sudo a2enmod cgi
Por el contrario, si tuvieras activo este módulo y quisieras desactivarlo podrías hacerlo con el comando a2dismod:
~$ sudo a2dismod cgi
En cualquier caso, tras activar o desactivar módulos, necesitarás reiniciar el servidor Apache:
~$ sudo systemctl restart apache2
Seguridad SSL
Para que el servidor web pueda trabajar con el protocolo HTTPS, usando seguridad SSL, será necesario disponer de los correspondientes certificados y claves. En el caso de que se trate de un servicio ofrecido desde Internet es importante que estos certificados estén firmados por autoridades certificadoras, como los que podemos obtener a través de servicios profesionales como Namecheap:
Para un servidor local o en pruebas podemos utilizar certificados autofirmados generados en la misma máquina Ubuntu 18.04 mediante el comando openssl:
~$ sudo openssl req -newkey rsa:2048 -x509 -nodes -days 365 -out /etc/ssl/certs/ubuntu64.local.lan.crt -keyout /etc/ssl/private/ubuntu64.local.lan.key
El anterior comando pide de forma interactiva una serie de datos para incorporarlos al certificado, como puede ser el código de país, el nombre de la organización, etc. Es importante que en la sección «Common Name» especifiquemos el dominio o nombre DNS con el que se accederá al servidor Apache:
... Common Name (e.g. server FQDN or YOUR name) []:ubuntu64.local.lan ...
Este comando guarda la clave y el certificado en las rutas que especifiquemos como argumentos, de modo que luego utilizaremos dichas rutas para configurar las conexiones HTTPS en Apache.
Será necesario activar el módulo SSL de Apache, lo que haremos de la forma que vimos anteriormente:
~$ sudo a2enmod ssl
Reiniciamos el servidor web:
~$ sudo systemctl restart apache2
Ahora editaremos el archivo de configuración del sitio web por defecto de Apache en Ubuntu 18.04:
~$ sudo nano /etc/apache2/sites-available/000-default.conf
Y añadimos un bloque VirtualHost similar al siguiente al final del archivo (ajusta los valores necesarios según tu configuración particular):
... <VirtualHost *:443> DocumentRoot /var/www/html SSLEngine on SSLCertificateFile /etc/ssl/certs/ubuntu64.local.lan.crt SSLCertificateKeyFile /etc/ssl/private/ubuntu64.local.lan.key CustomLog ${APACHE_LOG_DIR}/access.log combined ErrorLog ${APACHE_LOG_DIR}/error.log </VirtualHost>
Guardamos el archivo y recargamos la configuración del servidor web:
~$ sudo systemctl reload apache2
Podemos probar la versión segura de la página web por defecto de modo similar a como hicimos anteriormente, pero sustituyendo el protocolo HTTP por HTTPS, es decir usando https:// en lugar de http:// en la URL.
Siguiendo con el ejemplo de este tutorial, probaríamos la versión segura del sitio por defecto usando https://ubuntu64.local.lan como URL.
Si has usado certificados autofirmados, el navegador web mostrará un aviso de seguridad al no poder comprobar la veracidad de dichos certificados:
Dependiendo del navegador, de alguna manera nos permitirá continuar con la conexión.
Se mostrará la versión segura del sitio web:
Cómo crear servidores virtuales de Apache en Ubuntu 18.04 LTS
Una de las funcionalidades más interesantes a la hora de configurar Apache en Ubuntu es la de servidores virtuales o Virtual Hosts, que nos permitirá alojar varios sitios web independientes referenciados por nombres de dominio distintos.
En Ubuntu la funcionalidad de servidores virtuales ya viene activada y configurada por defecto. De hecho, la página web que hemos visto es el servidor virtual por defecto, que es el que responde ante cualquier dirección IP o dominio que apunte a este servidor y no tenga configurado un servidor virtual propio.
Crear un nuevo servidor virtual de Apache en Ubuntu
Para empezar necesitaremos un dominio adicional (o más, si vas a configurar varios servidores virtuales). En el caso de tratarse de un servidor en Internet, o VPS Ubuntu, necesitaremos tener registrados y configurados los dominios a través de algún servicio profesional como Namecheap, por ejemplo.
En caso de tratarse de una red local será el servicio DNS local el que tenga que estar configurado.
En este tutorial vamos a configurar un servidor virtual para el dominio ubuntu18.local.lan, configurado para apuntar a la dirección IP del mismo servidor Ubuntu 18.04 en el que estamos trabajando. Antes de crear el nuevo servidor virtual, esa dirección en un navegador devolverá la misma página web por defecto que vimos antes:
Las configuraciones de los servidores virtuales se guardan en archivos independientes con extensión .conf en el directorio /etc/apache2/sites-available/.
Usando nuestro editor de texto favorito, crearemos un archivo en ese directorio. Lo ideal es darle como nombre el dominio al que va a responder, terminando con la extensión .conf. Esto es especialmente útil cuando tenemos varios servidores virtuales configurados en el sistema.
El archivo podría ser /etc/apache2/sites-available/ubuntu18.local.lan.conf:
~$ sudo nano /etc/apache2/sites-available/ubuntu18.local.lan.conf
Y podría tener este contenido:
<VirtualHost *:80> ServerName ubuntu18.local.lan DocumentRoot /home/instalador/public_html/ubuntu18.local.lan LogLevel info ErrorLog ${APACHE_LOG_DIR}/ubuntu18.local.lan-error.log CustomLog ${APACHE_LOG_DIR}/ubuntu18.local.lan-access.log combined </VirtualHost>
En la directiva ServerName indicamos el dominio al que responde el nuevo servidor virtual.
En la directiva DocumentRoot indicamos el directorio en el que residirán los archivos del sitio web. Un buen sitio para crear estos directorios podría ser /var/www/, pero podría ser interesante y cómodo tenerlos en el directorio personal del usuario que mantiene el sitio web. Es lo que haremos en este ejemplo:
~$ mkdir -p public_html/ubuntu18.local.lan
Pondremos algún contenido para el sitio web, como el archivo índice por defecto (index.html):
~$ nano public_html/ubuntu18.local.lan/index.html
El contenido de podría ser un simple mensaje identificativo:
<h1>Bienvenido a ubuntu18.local.lan</h1>
Para activar el nuevo servidor virtual tendremos que usar el comando a2ensite:
~$ sudo a2ensite ubuntu18.local.lan.conf
A continuación se aplicarán los cambios recargando la configuración de Apache con systemctl:
~$ sudo systemctl reload apache2
Ya estaríamos en condiciones de probar el sevidor virtual recargando la página web a la que accedimos hace un momento:
Un momento, ¿qué ha ocurrido?
Error 403 Fobidden en servidores virtuales de Apache en Ubuntu
La configuración por defecto de Apache en Ubuntu no permite el acceso a contenido web fuera de /var/www/, pero en este ejemplo sí lo hemos configurado fuera, concretamente bajo /home/. De ahí el error 403.
Para configurar servidores virtuales debemos permitir expresamente el acceso a ubicaciones alternativas dentro del archivo de configuración del servidor virtual.
Los cambios que haremos serán añadir un bloque Directory con una directiva Require en el archivo de configuración del servidor virtual, en este ejemplo /etc/apache2/sites-available/ubuntu18.local.lan.conf:
<VirtualHost *:80> ServerName ubuntu18.local.lan DocumentRoot /home/instalador/public_html/ubuntu18.local.lan <Directory /home/instalador/public_html/ubuntu18.local.lan> Require all granted </Directory> LogLevel info ErrorLog ${APACHE_LOG_DIR}/ubuntu18.local.lan-error.log CustomLog ${APACHE_LOG_DIR}/ubuntu18.local.lan-access.log combined </VirtualHost>
Recargamos la configuración de Apache con systemctl y probamos de nuevo a acceder a la página web del servidor virtual:
Configuración adicional de Apache
Si borramos el archivo index.html del directorio web del servidor virtual, obtendríamos un error 403 al intentar acceder desde el navegador. Esto ocurre porque por defecto no se pemite listar el contenido de directorios web.
Para modificar este comportamiento y permitir el listado, habría que añadir una directiva Options en el bloque Directory del archivo de configuración del servidor web:
<Directory /home/instalador/public_html/blog.ubuntu18.local> Options +Indexes Require all granted </Directory>
Tras recargar la configuración de Apache, si accedemos al directorio vacío esta vez sí recibiremos una página de listado elaborada por el servidor web:
Este comportamiento en general no es deseable, ya que se expone a la vista de cualquiera la estructura del sitio, archivos que podrían dar más información de la deseada, etc.
Sin embargo podríamos querer tener un directorio donde sí se listara el contenido, como una zona de descargas.
Para lograr esta configuración modificaremos de nuevo el bloque Directory del servidor virtual:
... <Directory /home/instalador/public_html/ubuntu18.local.lan> Options -Indexes Require all granted AllowOverride all </Directory> ...
Eliminamos la opción de indexar o, mejor aún, la desactivamos explícitamente. Y añadimos la directiva AllowOverride que permite la modificación de la configuración de Apache mediante archivos .htaccess.
Recargamos la configuración de Apache y creamos un directorio nuevo, por ejemplo, descargas/ dentro de la estructura del sitio web:
~$ mkdir public_html/ubuntu18.local.lan/descargas
Dentro de este directorio crearemos un archivo .htaccess:
~$ nano public_html/ubuntu18.local.lan/descargas/.htaccess
Con este contenido:
Options +Indexes
Para los cambios en los archivos .htaccess no es necesario recargar la configuración de Apache, porque la configuración se modifica al vuelo, cada vez que se accede al directorio que los contiene.
Ahora tenemos vacíos de contenido web tanto el directorio principal del sitio web como el directorio descargas/. La configuración del servidor virtual por defecto no permite el listado de directorios sin archivo índice, pero en el directorio descargas/ sí se permite gracias al archivo .htaccess.
Accediendo tanto a la raíz del sitio como al directorio descargas/ comprobamos el comportamiento personalizado:
Justo lo que queríamos.
Cómo desactivar un servidor virtual de Apache en Ubuntu
Igual que para activar un servidor virtual en Apache tenemos un comando, para desactivarlo tenemos otro, el comando a2dissite:
~$ sudo a2dissite ubuntu18.local.lan
Al igual que para el caso de la activación, debemos recargar la configuración de Apache para que los cambios tomen efecto y el servidor virtual no sea accesible.
Si el dominio del servidor virtual que acabamos de desactivar sigue apuntando a la dirección IP del servidor Ubuntu, se servirá la página web por defecto.
Servidor Virtual por defecto de Apache en Ubuntu
La configuración de Apache en Ubuntu tal y como viene tras la instalación incluye un servidor virtual por defecto. Su archivo de configuración es /etc/apache2/sites-available/000-default.conf, donde puedes hacer los cambios que creas necesarios. El directorio web de este servidor es /var/www/html/.
Como ya he dicho anteriormente, este servidor virtual responde a las conexiones a través de dirección IP y de cualquier dominio que se resuelva a la dirección IP del servidor y no tengan configurado su propio servidor virtual.
Conclusión
Ahora que sabes cómo instalar y configurar Apache en Ubuntu 18.04 LTS con servidores virtuales incluidos puedes alojar varios sitios en una misma máquina, lo que hará que rentabilices mucho más los recursos de la máquina Ubuntu. Esto es especialmente interesante si usas un VPS Ubuntu de algún servicio profesional.
Si tienes alguna pregunta, quieres indicar algún error o corrección, o tienes sugerencias para otros temas, déjame un comentario.
¡Apoya comoinstalar.me!
¿Te ha servido este artículo? ¿Crees que te has ahorrado algún dolor de cabeza al configurar Apache en Ubuntu 18.04 LTS? Si es así y quieres agradecérmelo, puedes hacerlo dejando 1 $ de propina desde PayPal para una CocaCola:
O, si te sientes especialmente agradecido, puedes invitarme a un cappuccino:
¡Gracias!
Hola, ¿sabes cómo redireccionar la URL http://mi_dominio.com:443 a https://mi_dominio.com? Y sí, muchos sitios web hacen exactamente esto, pero en mi caso no sé cómo configurarlo para que me redireccione. Y sí, ya he buscado en muchísimos sitios, pero no me funciona. Si quieres te puedo pagar por ayudarme en esto, gracias 🙂
¡Hola, Alexis! Es sencillo de hacer si no te importa perder la URI, es decir, redireccionar http://mi_dominio.com:443/la-uri/ a https://mi_dominio.com/, pero manteniendo la URI y redireccionando a https://mi_dominio.com/la-uri/ la verdad es que no sabría cómo hacerlo.
Hola, ¿me podías ayudar a instalar un server con este manual?
¡Hola, Vasilio! Es sencillo, sólo tienes que seguir los pasos indicados.
Hola Buenas noches he realizado toda la configuración como lo indicas pero me manda el siguiente error
No se puede acceder a este sitioNo se pudo encontrar la dirección IP del servidor de yo.local.
Buscar yo local en Google
ERR_NAME_NOT_RESOLVED
Parece que el dominio yo.local no puede resolverse a la dirección IP del servidor. Necesitas un servidor DNS que resuelva tus dominios locales o, mucho más fácil, echar un vistazo a esta guía de simulación de dominios locales.
¡gracias, me fue muy útil y logré entender unas cosas que antes ni idea! muchas gracias
Me alegra saberlo, esa era la intención al realizar esta guía de Apache en Ubuntu 18.04.