Cómo instalar Apache en CentOS 8

Cómo instalar Apache en CentOS 8

En esta entrada veremos cómo instalar Apache en CentOS 8 paso a paso, de modo que al final de esta guía podrás utilizar el servidor web más popular en tu servidor o VPS CentOS, con seguridad SSL y todos los servidores virtuales que necesites.

Antes de instalar Apache en CentOS 8

Si quieres completar esta guía de instalación de Apache en CentOS 8 necesitas cumplir unos mínimos requerimientos:

  • Un sistema CentOS 8 actualizado.
  • Acceso a terminal de comandos con root o un usuario con permisos de sudo.
  • Conexión a Internet.

Si estás leyendo este artículo es porque seguramente ya cumples todo esto, así que ve abriendo una consola y empezamos.

Cómo instalar Apache en CentOS 8

Para instalar Apache en CentOS 8 usaremos los paquetes presentes en los propios repositorios, así que la primera acción será actualizar las listas de paquetes y el software instalado:

~$ sudo yum update

El paquete que necesitamos es httpd, así que lo descargamos con yum:

~$ sudo yum install -y httpd

Tras la descarga e instalación de Apache y sus dependencias, se habrá creado un nuevo servicio en nuestro sistema CentOS 8, el sistema httpd.service, aunque también podemos usar el nombre corto, httpd.

Hay que tener en cuenta que en este momento el servicio httpd.service no está en ejecución ni configurado para arrancar automáticamente junto con CentOS 8.

En primer lugar, vamos a iniciar Apache con el comando systemctl:

~$ sudo systemctl start httpd

Si además quieres que Apache arranque automáticamente con CentOS 8, debes habilitar el servicio:

~$ sudo systemctl enable httpd

Puedes comprobar el estado del servicio Apache con el comando sudo systemctl enable httpd:

como instalar apache en centos 8

¿Qué versión tengo instalada?

Si quieres averiguar la versión de Apache instalada en CentOS 8, sólo tienes que usar el comando httpd en consola:

~$ httpd -v
Server version: Apache/2.4.37 (centos)
Server built:   Jul 30 2019 19:56:12

Pasamos de la versión 2.4.6 de la versión anterior de CentOS a la actual 2.4.37.

Configurar el firewall de CentOS 8 para Apache

Para poder acceder al servicio web Apache desde la red es necesario configurar el firewall de CentOS 8, ya que por defecto suele estar activado.

Si quieres permitir el acceso estándar (HTTP) y el acceso seguro (HTTPS), tendrás que añadir ambos servicios a la configuración del firewall:

~$ sudo firewall-cmd --permanent --add-service={http,https}

Si sólo necesitas el acceso HTTP entonces basta con especificar únicamente este protocolo:

~$ sudo firewall-cmd --permanent --add-service=http

Y recargamos la configuración del firewall para que tenga en cuenta las nuevas reglas:

~$ sudo firewall-cmd --reload

Desde este momento tu servidor web Apache ya es accesible desde fuera de la máquina CentOS 8.

Puedes acceder a la página web por defecto mediante un navegador especificando la dirección IP, nombre de máquina, dominio, etc.

instalar apache en centos 8

Cómo configurar Apache en CentOS 8

Para configurar Apache en CentOS 8 debemos trabajar sobre sus archivos de configuración, organizados bajo la ruta /etc/httpd/.

El archivo principal es /etc/httpd/conf/httpd.conf que, entre otras cosas, configura la página web por defecto de CentOS 8.

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

Si buscas la directiva DocumentRoot verás la ruta sobre la que puedes alojar los archivos de la página web por defecto:

...
DocumentRoot "/var/www/html"
...

También se cargan configuraciones desde otros archivos que son incluidos desde el principal httpd.conf. Por ejemplo, las configuraciones de los módulos de Apache se incluyen con esta directiva Include:

...
Include conf.modules.d/*.conf
...

Y otras configuraciones adicionales se cargan con esta directiva IncludeOptional:

...
IncludeOptional conf.d/*.conf
...

Como ves, se trata de rutas relativas. Para construir la ruta completa a estos archivos se añaden al valor de la directiva ServerRoot:

...
ServerRoot "/etc/httpd"
...

Cualquier cambio de configuración de Apache exigirá recargar o reiniciar el servidor web.

Para recargar la configuración de Apache, sin detener el servicio, usaremos este comando:

~$ sudo systemctl reload httpd

Y para reiniciar Apache, es decir, detener el servicio y volver a iniciarlo, usaremos este otro comando:

~$ sudo systemctl restart httpd

Cómo añadir módulos de Apache

Para añadir ciertas funcionalidades de Apache es necesario cargar los correspondientes módulos. Si quieres saber qué módulos carga la configuración actual de Apache basta con usar el comando httpd:

~$ httpd -M

Puedes comprobar si determinado módulo está cargado filtrando el comando anterior. Por ejemplo, si quieres saber si el módulo Rewrite está cargado:

~$ httpd -M |grep -i rewrite
rewrite_module (shared)

Los módulos instalados residen en la ruta /usr/lib64/httpd/modules/. Si quieres instalar un módulo nuevo, tendrás que averiguar el nombre del paquete del repositorio (suelen llamarse mod_*).

Por ejemplo, si quieres añadir soporte SSL para usar el protocolo seguro HTTPS, tendrías que instalar el paquete mod_ssl:

~$ sudo yum install -y mod_ssl

Se instala el correspondiente archivo mod_ssl.so en la ruta /usr/lib64/httpd/modules/, junto con el resto de módulos ya instalados.

También se instala un archivo ssl.conf en /etc/httpd/conf.d/. Se instala en conf.d/ en lugar de en conf.modules.d/ porque es una configuración muy concreta para la página web por defecto.

Normalmente deberías reiniciar el servicio httpd para que la nueva configuración entre en funcionamiento, pero este módulo concreto necesita configuración previa.

Protocolo SSL HTTPS con Apache en CentOS 8

Para activar el protocolo HTTPS con seguridad SSL en Apache para CentOS 8 acabamos de ver que es necesario instalar el módulo SSL, mod_ssl.

Editaremos el archivo de configuración del módulo, ssl.conf:

~$ sudo nano /etc/httpd/conf.d/ssl.conf

El protocolo HTTPS necesita usar certificados para cifrar la conexión, por lo que en la configuración del módulo SSL hay que especificar la localización de los archivos del certificado que quieras usar.

Al instalar el módulo SSL, su archivo de configuración indica unos certificados normalmente inexistentes que deben ser modificados por los que realmente vayas a usar:

...
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
...
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
...

Si ya tienes los archivos del certificado, modifica estas rutas. En este ejemplo usaremos un certificado autofirmado que crearemos enseguida. Cambiaremos las rutas para este certificado:

...
SSLCertificateFile /etc/pki/tls/certs/centos8.local.crt
...
SSLCertificateKeyFile /etc/pki/tls/private/centos8.local.key
...

Guardamos los cambios y cerramos el archivo.

Ahora crearemos el certificado con el nombre que hayamos decidido y especificado antes:

~$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout centos8.local.key -out centos8.local.crt

Puedes contestar en blanco a las preguntas que se hacen sobre la información de la entidad, pero en «Common Name» debes contestar con el nombre del servidor (centos8.local en este ejemplo).

Se generan un archivo .crt y un archivo .key a los que hay que proporcionar los permisos de acceso necesarios:

~$ chmod 644 centos8.local.crt
~$ chmod 600 centos8.local.key

Y cambiamos el propietario:

~$ sudo chown root:root centos8.local.*

Ahora copiaremos los archivos a las rutas especificadas en el archivo de configuración:

~$ sudo cp centos8.local.crt /etc/pki/tls/certs/
~$ sudo cp centos8.local.key /etc/pki/tls/private/

Hecho todo esto, podemos comprobar que el módulo SSL está instalado:

~$ httpd -M |grep -i ssl
ssl_module (shared)

Para que la configuración haga efecto habrá que recargar el servicio httpd:

~$ sudo systemctl reload httpd

Si no lo hiciste anteriormente, añade la excepción del firewall para el puerto 443/tcp (servicio HTTPS):

~$ sudo firewall-cmd --permanent --add-service=https
~$ sudo firewall-cmd --reload

Listo, ya podemos acceder a la página web por defecto de Apache en CentOS 8 mediante cifrado SSL, indicando https:// en la URL:

como configurar apache en centos 8

Al tratarse de un certificado autofirmado el navegador nos advierte de que no es posible verificar su autenticidad. En el caso de Google Chrome pulsamos en «Configuración avanzada» y nos mostrará un enlace para ir de todas formas al sitio que queremos visitar:

Y finalmente accederemos al sitio con conexión cifrada, aunque todos los navegadores, de un modo u otro, nos advertirán del problema con el certificado:

Obviamente si instalas un certificado creado para el dominio de tu máquina y firmado por una autoridad certificadora, no tendrás ninguno de estos inconvenientes.

En estos casos puede que necesites incluir un tercer archivo de certificado, un archivo «chain», para lo cual tienes una directiva SSLCertificateChainFile que tendrías que descomentar y ajustar la ruta del archivo:

...
#   certificate for convenience.
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
...

Servidores virtuales de Apache en CentOS 8

Para configurar servidores virtuales de Apache en CentOS 8 seguiremos los siguientes pasos.

Para este ejemplo voy a configurar el subdominio blog.centos8.local y los dominios mundocentos8.local y otrodominio.local.

En primer lugar crearemos un directorio específico donde guardar los archivos de configuración de cada servidor virtual con el que trabajemos, por supuesto colgando de la ruta de configuración de Apache:

~$ sudo mkdir /etc/httpd/sites.d/

Ahora editaremos el arhivo principal de Apache:

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

Al final del archivo incluiremos esta línea:

IncludeOptional sites.d/*.conf

De esa forma se incluirán los archivos de configuración con extensión .conf que estén presentes en el directorio /etc/httpd/sites.d/.

Cada servidor virtual responderá a un dominio o subdominio distinto. Podemos crear tantos como queramos, lo importante es que todos los dominios y subdominios estén apuntados a la dirección del servidor CentOS 8.

Por cada servidor virtual tendremos que crear su propio directorio de contenido web o DocumentRoot. Un buen sitio donde alojar estos directorios es en /var/www/:

~$ sudo mkdir /var/www/blog.centos8.local

Deberíamos colocar algo de contenido en los directorios:

~$ sudo nano /var/www/blog.centos8.local/index.html

Un simple mensaje basta:

<h1>blog.centos8.local</h1>

Llega el momento de crear los archivos de configuración, uno por cada servidor virtual:

~$ sudo nano /etc/httpd/conf.d/blog.centos8.local.conf

Es buena idea darles nombres representativos, como el dominio que configuran. A continuación veremos el contenido mínimo de estos archivos:

<VirtualHost *:80>
        ServerName blog.centos8.local
        DocumentRoot /var/www/blog.centos8.local

        <Directory /var/www/blog.centos8.local>
                Options -Indexes
                AllowOverride all
                Require all granted
        </Directory>

        ErrorLog /var/log/httpd/error_blog.centos8.local.log
        CustomLog /var/log/httpd/access_blog.centos8.local.log combined
</VirtualHost>

Se trata de un bloque VirtualHost que contiene las siguientes directivas:

ServerName

El dominio o subdominio al que responderá el servidor virtual.

DocumentRoot

La ruta en el sistema de archivos donde se aloja el contenido web del servidor virtual.

Directory

Un bloque donde se pueden configurar opciones específicas para una ruta. En este caso configuramos la ruta del contenido web y todo lo que cuelga de ella.

Options

Opciones de Apache para la ruta del bloque Directory. La opción -Indexes no permite visualizar el contenido de los directorios que no contengan archivos index.html, index.htm o similares.

AllowOverride all

Permite el uso de archivos .htaccess que contienen directivas de configuración sólo aplicables a los directorios donde se encuentren.

Require all granted

Permite explícitamente el acceso del servidor web al directorio.

ErrorLog

El archivo donde se guardará el registro de errores del servidor. Si no se especifica se usará el archivo común de Apache.

CustomLog

Este es el registro de accesos y peticiones al servidor, donde se indican fechas, direcciones de los clientes, recursos solicitados, resultados de las peticiones, etc. Igualmente, si no se especifica uno concreto se usa el archivo común.

Recargamos la configuración del servicio Apache y ya podemos probar los distintos servidores virtuales desde un navegador:

Un problema que podemos tener es que el servidor por defecto, que responde por dirección IP y por el dominio configurado como nombre del servidor (en este ejemplo, centos8.local), ahora responderá al primer servidor virtual cargado por orden alfabético.

Para evitar esto podemos crear un pseudo-servidor virtual con un nombre de archivo de configuración que siempre esté alfabéticamente el primero, por ejemplo 000-default.conf, con un contenido mínimo:

<VirtualHost *:80>
</VirtualHost>

Este servidor virtual toma el resto de la configuración del archivo principal de Apache, httpd.conf.

Para añadir configuración SSL a un servidor virtual usaremos su archivo de configuración ya existente:

~$ sudo nano /etc/httpd/conf.d/blog.centos8.local.conf

Y añadiremos un nuevo bloque VirtualHost al final del archivo:

<VirtualHost *:443>
        ServerName blog.centos8.local
        DocumentRoot /var/www/blog.centos8.local

        <Directory /var/www/blog.centos8.local>
                Options -Indexes
                AllowOverride all
                Require all granted
        </Directory>

        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/blog.centos8.local.crt
        SSLCertificateFile /etc/pki/tls/private/blog.centos8.local.key

        ErrorLog /var/log/httpd/error_blog.centos8.local.log
        CustomLog /var/log/httpd/access_blog.centos8.local.log combined
</VirtualHost>

El contenido es prácticamente el mismo, pero hay cambios y novedades, empezando por que el bloque VirtualHost ahora se configura para el puerto estándar HTTPS, el 443.

Además se añaden las directivas SSLEngine on para usar el módulo SSL, y las directivas relativas a la ubicación de los certificados pare este servidor virtual.

En este caso el contenido web es el mismo, y los archivos de registro también, pero nada impide que configures un contenido diferente para la versión cifrada del servidor virtual, y archivos de registro separados.

Guarda los cambios y cierra el archivo.

No olvides crear y ubicar los certificados correspondientes a este servidor virtual y su dominio, y recarga la configuración del servidor.

Ahora ya podrás acceder a tus servidores virtuales también mediante HTTPS.

Conclusión

Ahora que sabes cómo instalar Apache en CentOS 8 ya puedes montar tus páginas web en tu servidor o VPS con este servicio tan popular y extendido en Internet.

En caso de que tengas dudas, preguntas, sugerencias, etc. puedes dejar un comentario.

¡Apoya este sitio!

¿Te ha servido esta pequeña guía de instalación de Apache en CentOS 8? Pues si quieres agradecérnoslo, cualquier mínima contribución al mantenimiento de este sitio y elaboración de nuevos tutoriales y guías es bienvenida. ¡Gracias!

Valora esta entrada

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (1 votos, promedio: 5,00 de 5)
Cargando…

Deja un comentario

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies.

ACEPTAR
Aviso de cookies