Tutorial

Cómo instalar el servidor web de Apache en CentOS 7

CentOSApache

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 de Apache con hosts virtuales en su servidor de CentOS 7.

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 yum.

Como usuario sudo no root configurado en los requisitos previos, actualice el índice local de paquetes de Apache httpd para reflejar los últimos cambios:

  • sudo yum update httpd

Una vez que se actualicen los paquetes, instale el paquete de Apache:

  • sudo yum install httpd

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

Si completó la guía de Pasos adicionales recomendados para servidores nuevos de CentOS 7 mencionada en la sección de requisitos previos, habrá instalado firewalld en su servidor y necesitará abrir el puerto 80 para permitir que Apache proporcione solicitudes a través de HTTP. Si aún no lo hizo, puede hacerlo habilitando el servicio http de firewalld con el siguiente comando:

  • sudo firewall-cmd --permanent --add-service=http

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

  • sudo firewall-cmd --permanent --add-service=https

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

  • 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

Apache no se inicia de forma automática en CentOS una vez que se completa la instalación. Deberá iniciar el proceso de Apache de forma manual:

  • sudo systemctl start httpd

Verifique que el servicio funcione con el siguiente comando:

  • sudo systemctl status httpd

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

Output
Redirecting to /bin/systemctl status httpd.service ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2019-02-20 01:29:08 UTC; 5s ago Docs: man:httpd(8) man:apachectl(8) Main PID: 1290 (httpd) Status: "Processing requests..." CGroup: /system.slice/httpd.service ├─1290 /usr/sbin/httpd -DFOREGROUND ├─1291 /usr/sbin/httpd -DFOREGROUND ├─1292 /usr/sbin/httpd -DFOREGROUND ├─1293 /usr/sbin/httpd -DFOREGROUND ├─1294 /usr/sbin/httpd -DFOREGROUND └─1295 /usr/sbin/httpd -DFOREGROUND ...

Como puede ver en este resultado, parece que 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 esto en la línea de comandos de su servidor:

  • 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 una de ellas en su navegador web para ver si funcionan.

De forma alternativa, puede utilizar curl para solicitar su IP de icanhazip.com, que le brindará su dirección IPv4 pública como se muestra desde otra ubicación en Internet:

  • 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 para Apache de CentOS 7:

Página predeterminada de Apache para CentOS 7

Esta página indica que Apache funciona correctamente. También incluye información básica sobre archivos y ubicaciones de directorios importantes de Apache. Ahora que el servicio está instalado y en ejecución, puede utilizar diferentes comandos de systemctl para administrarlo.

Paso 3: Administrar el proceso de Apache

Ahora el servidor web funciona, repasemos algunos comandos de administración básicos.

Para detener su servidor web, escriba lo siguiente:

  • sudo systemctl stop httpd

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

  • sudo systemctl start httpd

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

  • sudo systemctl restart httpd

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

  • 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:

  • sudo systemctl disable httpd

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

  • 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)

Al emplear el servidor web Apache, puede utilizar hosts virtuales (similares a bloques de servidor de Nginx) para encapsular 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. Consulte nuestra Introducción a DNS de DigitalOcean para hallar más información sobre la configuración de un nombre de dominio con DigitalOcean.

Por defecto, Apache en CentOS 7 tiene habilitado un bloque de servidor que está configurado para proporcionar 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:

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

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

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

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

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

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

  • sudo chmod -R 755 /var/www

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

  • 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:

  • 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 lograr esto, edite el archivo de configuración principal de Apache y añada una línea que declare un directorio opcional para archivos de configuración adicionales:

  • sudo vi /etc/httpd/conf/httpd.conf

Añada esta línea al final del archivo:

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:

  • 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:

  • 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 está configurado para funcionar con la configuración predeterminada de Apache. Dado que configuró un directorio de registro personalizado en el archivo de configuración de hosts virtuales, verá un mensaje de 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. SELinux aporta mayor seguridad a su entorno de CentOS 7. Por lo tanto, no se recomienda desactivar por completo el módulo del kernel.

Existen diferentes formas de configurar políticas según las necesidades de su entorno, ya que SELinux le permite personalizar su 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:

  • 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:

  • sudo ls -dZ /var/www/example.com/log/

Este comando enumera e imprime el contexto de SELinux del directorio. El resultado debe ser similar a lo siguiente:

Output
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /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:

  • 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:

  • 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. Verá el siguiente resultado que confirma los cambios:

Output
restorecon reset /var/www/example.com/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0

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

  • sudo ls -dZ /var/www/example.com/log/

El resultado refleja el tipo de contexto actualizado:

Output
drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /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:

  • sudo systemctl restart httpd

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

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

Verá 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 0 Feb 26 22:54 error.log -rw-r--r--. 1 root root 0 Feb 26 22:54 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 desea construir una pila de aplicaciones más completa, puede consultar este artículo sobre cómo configurar una pila LAMP en CentOS 7.

0 Comments

Creative Commons License