Tutorial

Cómo instalar el servidor web Apache en CentOS 8

Published on May 21, 2020
Español
Cómo instalar el servidor web Apache en CentOS 8

Introducción

El servidor HTTP Apache es el más usado del mundo. Ofrece muchas características potentes, entre las que se incluyen módulos que se cargan de forma dinámica, una sólida compatibilidad con medios y amplia integración con otras herramientas de software populares.

A través de esta guía, instalará un servidor web Apache con hosts virtuales en su servidor de CentOS 8.

Requisitos previos

Necesitará lo siguiente para completar esta guía:

Paso 1: Instalar Apache

Apache está disponible dentro de los repositorios de software predeterminados de CentOS, lo cual significa que puede instalarlo con el administrador de paquetes dnf.

Ya que configuramos un non-root sudo user en los requisitos previos, instale el paquete Apache:

  1. sudo dnf install httpd

Una vez confirmada la instalación, dnf instalará Apache y todas las dependencias necesarias.

Al completar el paso 4 de la guía de Configuración inicial del servidor con CentOS 8 que se mencionó en la sección de requisitos previos, ya habrá instalado firewalld en su servidor para suministrar las solicitudes a través de HTTP.

Si además piensa configurar Apache para que proporcione contenido a través de HTTPS, también le convendrá abrir el puerto 443 al habilitar el servicio https:

  1. sudo firewall-cmd --permanent --add-service=https

A continuación, vuelva a cargar el firewall para que entren en efecto estas nuevas reglas:

  1. sudo firewall-cmd --reload

Una vez que se vuelva a cargar el firewall, estará listo para iniciar el servicio y comprobar el servidor web.

Paso 2: Comprobar su servidor web

Una vez que la instalación se completa, Apache no se inicia automáticamente en CentOS, por lo que deberá iniciar el proceso de Apache de forma manual:

  1. sudo systemctl start httpd

Verifique que el servicio funcione con el siguiente comando:

  1. sudo systemctl status httpd

Obtendrá un estado active cuando el servicio esté en ejecución:

Output
● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disa> Active: active (running) since Thu 2020-04-23 22:25:33 UTC; 11s ago Docs: man:httpd.service(8) Main PID: 14219 (httpd) Status: "Running, listening on: port 80" Tasks: 213 (limit: 5059) Memory: 24.9M CGroup: /system.slice/httpd.service ├─14219 /usr/sbin/httpd -DFOREGROUND ├─14220 /usr/sbin/httpd -DFOREGROUND ├─14221 /usr/sbin/httpd -DFOREGROUND ├─14222 /usr/sbin/httpd -DFOREGROUND └─14223 /usr/sbin/httpd -DFOREGROUND ...

Como lo indica este resultado, el servicio se inició correctamente. Sin embargo, la mejor forma de comprobarlo es solicitar una página de Apache.

Puede acceder a la página de destino predeterminada de Apache para confirmar que el software funcione correctamente mediante su dirección IP: Si no conoce la dirección IP de su servidor, puede obtenerla de varias formas desde la línea de comandos.

Escriba q para volver a la línea de comandos y, luego, escriba:

  1. hostname -I

Con este comando se mostrarán todas las direcciones de red del host, de modo que obtendrá algunas direcciones IP separadas por espacios. Puede probar cada uno en el navegador web para determinar si funcionan.

De forma alternativa, puede utilizar curl para solicitar su IP en icanhazip.com, que le proporcionará su dirección IPv4 pública tal como aparece en otra ubicación en Internet:

  1. curl -4 icanhazip.com

Cuando tenga la dirección IP de su servidor, introdúzcala en la barra de direcciones de su navegador:

http://your_server_ip

Visualizará la página web predeterminada de Apache en CentOS 8:

Página predeterminada de Apache para CentOS 8

Esta página indica que Apache funciona correctamente. También incluye información básica sobre archivos y ubicaciones de directorios importantes de Apache.

Paso 3: Administrar el proceso de Apache

Ahora que el servicio está instalado y en ejecución, puede utilizar diferentes comandos de systemctl para administrarlo.

Para detener su servidor web, escriba lo siguiente:

  1. sudo systemctl stop httpd

Para iniciar el servidor web cuando no esté activo, escriba lo siguiente:

  1. sudo systemctl start httpd

Para detener y luego iniciar el servicio de nuevo, escriba lo siguiente:

  1. sudo systemctl restart httpd

Si solo realiza cambios de configuración, Apache a menudo puede recargarse sin cerrar conexiones. Para hacerlo, utilice este comando:

  1. sudo systemctl reload httpd

Por defecto, Apache está configurado para iniciarse automáticamente cuando el servidor lo hace. Si no es lo que quiere, deshabilite este comportamiento escribiendo lo siguiente:

  1. sudo systemctl disable httpd

Para volver a habilitar el servicio de modo que se cargue en el inicio, escriba lo siguiente:

  1. sudo systemctl enable httpd

Ahora, Apache se iniciará de forma automática cuando el servidor se inicie de nuevo.

La configuración predeterminada de Apache permitirá a su servidor host alojar un único sitio web. Si piensa alojar varios dominios en su servidor, deberá configurar hosts virtuales en su servidor web de Apache.

Paso 4: Configuración de hosts virtuales (recomendado)

Cuando utilice el servidor web Apache, puede recurrir a los hosts virtuales (si está más familiarizado con Nginx, son similares a los bloques de servidor) para encapsular los detalles de configuración y alojar más de un dominio desde un único servidor. En este paso, configurará un dominio llamado example.com, pero debería cambiarlo por su propio nombre de dominio. Si va a configurar un nombre de dominio con DigitalOcean, consulte nuestra Documentación de red.

Por defecto, Apache en CentOS 8 tiene habilitado un host virtual que está configurado para suministrar documentos del directorio /var/www/html. Si bien esto funciona bien para un solo sitio, puede ser difícil de manejar si aloja varios. En lugar de modificar /var/www/html, creará una estructura de directorio dentro de /var/www para el sitio example.com y dejará /var/www/html instalado como directorio predeterminado que se presentará si una solicitud de cliente no coincide con ningún otro sitio.

Cree el directorio ​​​​​html​​​​​​ para el sitio example.com de la siguiente manera, utilizando el indicador -p para crear cualquier directorio principal necesario:

  1. sudo mkdir -p /var/www/example.com/html

Cree un directorio adicional para almacenar archivos de registro para el sitio:

  1. sudo mkdir -p /var/www/example.com/log

A continuación, asigne la propiedad del directorio html con la variable de entorno $USER:

  1. sudo chown -R $USER:$USER /var/www/example.com/html

Asegúrese de que estén configurados los permisos predeterminados de su root web:

  1. sudo chmod -R 755 /var/www

A continuación, cree una página de ejemplo index.html utilizando vi o su editor favorito:

  1. sudo vi /var/www/example.com/html/index.html

Pulse i para realizar un cambio al modo INSERT y agregar el siguiente ejemplo HTML al archivo:

/var/www/example.com/html/index.html
<html>
  <head>
    <title>Welcome to Example.com!</title>
  </head>
  <body>
    <h1>Success! The example.com virtual host is working!</h1>
  </body>
</html>

Guarde y cierre el archivo presionando ESC, escribiendo :wq y presionando ENTER.

Una vez establecidos el directorio de su sitio y el archivo de índice de ejemplo, casi estará listo para crear archivos de host virtuales. Mediante los archivos de host virtuales se especifica la configuración de sus sitios individuales y se informa al servidor web de Apache la manera de responder a varias solicitudes de dominio.

Antes de crear sus hosts virtuales, deberá crear un directorio sites-available para almacenarlos. También creará el directorio sites-enabled que indica a Apache que un host virtual está preparado para visitantes. En el directorio sites-enabled se almacenarán enlaces simbólicos a hosts virtuales que deseemos publicar. Cree ambos directorios con el siguiente comando:

  1. sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled

A continuación, indicará a Apache que busque hosts virtuales en el directorio sites-enabled. Para hacerlo, edite el archivo de configuración principal de Apache con vi o su editor preferido y agregue una línea que declare un directorio opcional para los archivos de configuración adicionales:

  1. sudo vi /etc/httpd/conf/httpd.conf

Presione la G mayúscula para ir al final del archivo. A continuación, presione i para pasar al modo INSERT y agregue la siguiente línea al final del archivo:

/etc/httpd/conf/httpd.conf
...
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf

Guarde y cierre el archivo cuando termine de añadir esa línea. Ahora que están listos sus directorios de hosts virtuales, creará su archivo de host virtual.

Comience creando un nuevo archivo en el directorio sites-available:

  1. sudo vi /etc/httpd/sites-available/example.com.conf

Agregue el siguiente bloque de configuración y cambie el dominio example.com por su nombre de dominio:

/etc/httpd/sites-available/example.com.conf
<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/example.com/html
    ErrorLog /var/www/example.com/log/error.log
    CustomLog /var/www/example.com/log/requests.log combined
</VirtualHost>

Esto indicará a Apache dónde encontrar directamente el root que contiene los documentos web de acceso público. También, dónde almacenar errores y solicitar registros para este sitio en particular.

Guarde y cierre el archivo cuando haya terminado.

Ahora que creó archivos de host virtuales, los habilitará para que Apache sepa presentarlos a los visitantes. Para lograrlo, cree un enlace simbólico para cada host virtual en el directorio sites-enabled:

  1. sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf

Su host virtual quedará, así, configurado y listo para ofrecer contenido. Antes de reiniciar el servicio de Apache, nos aseguraremos de que a través de SELinux se implementen las políticas correctas para sus hosts virtuales.

Paso 5: Ajustar los permisos de SELinux para hosts virtuales (recomendado)

SELinux es un módulo de seguridad de kernel de Linux que aporta seguridad extrema a los sistemas Linux. CentOS 8 viene equipado con SELinux que está configurado para funcionar con la configuración predeterminada de Apache. Debido a que modificó la configuración predeterminada al configurar un directorio de registro personalizado en el archivo de configuración de los hosts virtuales, recibirá un error si intenta iniciar el servicio de Apache. Para resolver esto, deberá actualizar las políticas SELinux a fin de permitir que Apache escriba en los archivos necesarios.

Existen diferentes formas de configurar políticas en función de las necesidades de su entorno, ya que SELinux le permite personalizar el nivel de seguridad. En este paso se abarcarán dos métodos de ajuste de políticas de Apache: el universal y el que se aplica a un directorio específico. Ajustar políticas en directorios es más seguro y, por lo tanto, es el enfoque recomendado.

Ajustar políticas de Apache de forma universal

Establecer la política de Apache de forma universal indicará a SELinux que trate de forma idéntica todos los procesos de Apache usando el booleano httpd_unified. Si bien este enfoque es más conveniente, no le brindará el mismo nivel de control que uno centrado en una política de archivos o directorios.

Ejecute el siguiente comando para configurar una política universal de Apache:

  1. sudo setsebool -P httpd_unified 1

El comando setsebool cambia los valores booleanos de SELinux. El marcador -P actualizará el valor de tiempo de inicio y hará que este cambio persista en los reinicios. httpd_unified es el booleano que indicará a SELinux que trate todos los procesos de Apache como el mismo tipo, por lo que lo habrá habilitado con un valor de 1.

Ajustar políticas de Apache en un directorio

Configurar individualmente los permisos de SELinux para el directorio /var/www/example.com/log le brindará mayor control sobre sus políticas de Apache, pero también puede requerir más mantenimiento. Debido a que esta opción no establece políticas de forma universal, deberá fijar de forma manual el tipo de contexto para cualquier nuevo directorio de registro especificado en sus configuraciones de host virtuales.

Primero, compruebe el tipo de contexto que SELinux dio al directorio /var/www/example.com/log:

  1. sudo ls -dlZ /var/www/example.com/log/

Este comando enumera e imprime el contexto de SELinux del directorio. Obtendrá un resultado similar al siguiente:

Output
drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_sys_content_t:s0 6 Apr 23 23:51 /var/www/example.com/log/

El contexto actual es httpd_sys_content_t, que indica a SELinux que el proceso de Apache solo puede leer archivos creados en este directorio. A través de este tutorial, cambiará el tipo de contexto del directorio /var/www/example.com/log a httpd_log_t. Este tipo permitirá que Apache genere archivos de registro de la aplicación web y realice anexos a ellos:

  1. sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"

A continuación, utilice el comando restorecon para aplicar estos cambios y hacer que persistan a través de los reinicios:

  1. sudo restorecon -R -v /var/www/example.com/log

El indicador -R ejecuta este comando de forma recursiva, lo que significa que actualizará cualquier archivo existente para que utilice el nuevo contexto. El indicador -v imprimirá los cambios de contexto realizados por el comando. Obtendrá el siguiente resultado que confirma los cambios:

Output
Relabeled /var/www/example.com/log from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:httpd_log_t:s0

Puede enumerar los contextos una vez más para ver los cambios:

  1. sudo ls -dlZ /var/www/example.com/log/

El resultado refleja el tipo de contexto actualizado:

Output
drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_log_t:s0 6 Apr 23 23:51 /var/www/example.com/log/

Ahora que el directorio /var/www/example.com/log usa el tipo httpd_log_t, estará listo para probar su configuración de host virtual.

Paso 6: Probar el host virtual (recomendado)

Una vez que el contexto se SELinux se haya actualizado con cualquiera de los métodos, Apache podrá realizar tareas de escritura en el directorio /var/www/example.com/log. Ahora podrá reiniciar con éxito el servicio de Apache:

  1. sudo systemctl restart httpd

Enumere el contenido del directorio /var/www/example.com/log para ver si Apache creó los archivos de registro:

  1. ls -lZ /var/www/example.com/log

Se le confirmará que Apache pudo crear los archivos error.log y requests.log especificados en la configuración del host virtual:

Output
-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 error.log -rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 requests.log

Ahora que tiene su host virtual configurado y los permisos SELinux actualizados, Apache proporcionará su nombre de dominio. Puede comprobarlo visitando http://example.com, donde debería ver algo como esto:

¡Éxito! ¡El host virtual example.com funciona!

Esto confirma que su host virtual está correctamente configurado y ofrece contenido. Repita los pasos 4 y 5 para crear nuevos hosts virtuales con permisos de SELinux para dominios adicionales.

Conclusión

A través de este tutorial, instaló y gestionó el servidor web de Apache. Ahora que ha instaló su servidor web, dispone de varias opciones respecto del tipo de contenido que puede ofrecer y de las tecnologías que puede utilizar para crear una experiencia más completa.

Si quiere construir una pila de aplicaciones más completa, puede consultar este artículo sobre cómo configurar una pila LAMP en CentOS 8.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors
Default avatar

Senior Manager, DevEd

Open source advocate and lover of education, culture, and community.



Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
1 Comments


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Excelente información, todo me funciono, pero tengo un problema, cuando quiero ingresar con mi dominio ¨dominio.com¨ me dice el navegador que no pudo encontrar la IP del servidor, podría alguien ayudarme?

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Featured on Community

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more