Un servidor web almacena, procesa y entrega páginas web a los visitantes del sitio web. Hay bastantes servidores web de código abierto opciones de software, pero el servidor HTTP Apache se considera el servidor web más utilizado en el mundo. Esto se debe a que, además de ser de código abierto, su arquitectura modular permite ampliar sus capacidades mediante la adición de módulos para diferentes propósitos. Como resultado, el servidor web es extremadamente robusto.
Si estás buscando instalar Apache en un sistema CentOS 7, este tutorial es para ti. Además, aprenderás a crear hosts virtuales para que puedas alojar múltiples sitios web en un solo servidor HTTP Apache que se ejecuta en CentOS.
Este es un tutorial detallado que se centra únicamente en la instalación de Apache. Si estabas buscando el tutorial resumido sobre el stack LAMP, tenemos esta guía sobre Cómo instalar Linux, Apache, MySQL, PHP (LAMP) en CentOS 7 que puedes consultar. ¡Ahora, comencemos!
Requisitos previos
Como este es un tutorial práctico, debes tener lo siguiente:
- Un servidor que ejecute CentOS 7, puedes crear uno en CloudSigma en unos pocos sencillos pasos siguiendo este enlace.
- Configurar un usuario no raíz con privilegios sudo en tu servidor. Luego, inicia sesión con este usuario.
- Configurar un cortafuegos básico siguiendo los pasos de nuestro tutorial sobre Configuración de un cortafuegos con FirewallD en CentOS 7.
Paso 1: Instalación del servidor HTTP Apache
Puedes encontrar Apache dentro de los repositorios predeterminados de CentOS. Por lo tanto, la instalación es sencilla utilizando el gestor de paquetes yum. Desde la sección de requisitos previos, debes haber iniciado sesión con el usuario no raíz. Ejecuta el siguiente comando en tu terminal para actualizar el índice de paquetes local de Apache httpd:
|
1 |
sudo yum update httpd |
Una vez que los paquetes estén actualizados, introduce el siguiente comando para instalar Apache:
|
1 |
sudo yum install httpd |
Confirma la instalación y espera a que yum instale Apache y sus dependencias requeridas.
Si seguiste los pasos del tutorial sobre Configuración de un cortafuegos con FirewallD en CentOS 7 y habilitaste el cortafuegos para el puerto 80, entonces estás listo. Firewalld es el gestor de cortafuegos para CentOS. De lo contrario, puedes habilitar el servicio http (puerto 80) de firewalld introduciendo el siguiente comando:
|
1 |
sudo firewall-cmd --permanent --add-service=http |
Si planeas servir tráfico a través de HTTPS seguro, puedes habilitar el servicio https (puerto 443) de firewalld introduciendo el siguiente comando:
|
1 |
sudo firewall-cmd --permanent --add-service=https |
Finalmente, debes recargar firewalld para que los cambios surtan efecto. Aquí está el comando para recargar:
|
1 |
sudo firewall-cmd –reload |
En este punto, has instalado y configurado Apache para servir tráfico a través de HTTP, o HTTPS dependiendo de si ejecutaste los comandos anteriores.
Step 2: Confirming that Apache Web Server is Running
En CentOS, el proceso de Apache no se inicia automáticamente después de la instalación. Para iniciar Apache manualmente, introduce el siguiente comando:
|
1 |
sudo systemctl start httpd |
Para verificar que el servicio se inició correctamente, comprueba el estado introduciendo el siguiente comando:
|
1 |
sudo systemctl status httpd |
Si el servicio se está ejecutando, deberías ver una salida similar a la captura de pantalla de abajo. Observa el estado activo:

La salida indica que el servicio se inició correctamente y se está ejecutando. A continuación, también debemos probar que Apache puede servir una página a los usuarios de Internet. Apache viene con una página predeterminada que puedes usar para probar si se puede acceder a tu servidor a través de Internet.
Necesitarás encontrar la dirección IP pública de tu servidor si aún no la tienes. Esta dirección IP es la que usarás en la barra de direcciones de tu navegador para solicitar la página web predeterminada de Apache. Puedes mostrar las direcciones de red del host introduciendo el siguiente comando:
|
1 |
hostname –I |
De la lista de direcciones que obtengas, puedes probar cada una en tu navegador para confirmar que funcionan. Opcionalmente, puedes usar curl para obtener su dirección IP de icanhazip.com. El siguiente comando muestra su dirección IP pública tal como se ve desde una computadora en otra ubicación de Internet:
|
1 |
curl -4 icanhazip.com |
Una vez que tenga la dirección IP pública de su servidor, cópiela y péguela en la barra de direcciones de su navegador:
|
1 |
http://your_server_public_ip |
Su navegador debería cargar la página web predeterminada de Apache en CentOS 7:

Si pudo cargar la página web predeterminada de Apache, significa que su servidor está funcionando correctamente. Si se desplaza hacia abajo, podrá ver información básica sobre los archivos de Apache y las ubicaciones de los directorios. Con el servicio instalado y funcionando correctamente, debería poder utilizar los diversos systemctl comandos para administrar el servicio.
Step 3: Managing the Apache Service
En esta sección, le mostraremos algunos comandos básicos de administración de Apache. Aquí está el comando que detiene el servidor web:
|
1 |
sudo systemctl stop httpd |
Aquí está el comando para iniciar el servidor web:
|
1 |
sudo systemctl start httpd |
A continuación, este es el comando para reiniciar el servidor web (detener e iniciar):
|
1 |
sudo systemctl restart httpd |
Después de esto, le mostraremos el comando para recargar el servicio Apache. Este comando es necesario cuando simplemente está realizando cambios de configuración. Al recargar, el proceso de Apache aplicará los cambios de configuración sin perder las conexiones, como habría sido el caso si hubiera reiniciado:
|
1 |
sudo systemctl reload httpd |
Según las configuraciones predeterminadas, Apache se inicia automáticamente cuando el servidor arranca. Si desea cambiar este comportamiento, aquí está el comando para deshabilitar el inicio del servicio en el arranque:
|
1 |
sudo systemctl disable httpd |
Para volver a habilitar el inicio del servicio en el arranque, ingrese el siguiente comando:
|
1 |
sudo systemctl enable httpd |
Paso 4: Configuración de hosts virtuales de Apache
De forma predeterminada, Apache está configurado para alojar y servir un único sitio web. En la mayoría de los casos, querrá que su servidor web sirva y aloje múltiples sitios web. Por ejemplo, es posible que tenga subdominios o que desee configurar una página de blog para el sitio web principal de su empresa/organización. Aquí es donde entran en juego los hosts virtuales de Apache. Los hosts virtuales de Apache le permiten configurar su servidor web para servir múltiples sitios web. Los hosts virtuales de Apache son el equivalente a los bloques de servidor en el servidor Nginx.
Para este tutorial, le mostraremos cómo crear un host virtual utilizando example.com como nuestro dominio. Por supuesto, el dominio example.com no funcionará en Internet, por lo que debe reemplazarlo con su dominio real; los pasos son los mismos.
Cuando instala Apache en CentOS, este instala un host virtual que está configurado para servir contenido desde el directorio /var/www/html. Este diseño funciona bien si está alojando un solo sitio. Sin embargo, queremos poder alojar múltiples sitios. Dejaremos el directorio predeterminado /var/www/html y en su lugar crearemos otro directorio para el dominio example.com dentro de la ubicación /var/www. La razón para dejar el directorio predeterminado es para que se sirva cuando las solicitudes de los clientes no coincidan con ningún otro sitio que haya configurado con hosts virtuales. Además, si desea deshabilitar los hosts virtuales creados, el predeterminado seguirá sirviendo el tráfico.
Primero, cree un directorio dentro de /var/www para su nombre de dominio. Es libre de elegir el nombre que prefiera. Sin embargo, se recomienda elegir un nombre similar a su dominio para recordarlo fácilmente cuando cree el archivo conf del host virtual. Ingrese el siguiente comando para crear el directorio de ejemplo:
|
1 |
sudo mkdir -p /var/www/example |
Ingrese el siguiente comando para crear una carpeta adicional que contendrá los archivos de registro para el sitio:
|
1 |
sudo mkdir -p /var/www/example/log |
Con los directorios de su sitio web en su lugar, asigne la propiedad del directorio con la variable de entorno $USER utilizando el siguiente comando:
|
1 |
sudo chown -R $USER:$USER /var/www/example |
Ejecute el siguiente comando para asegurarse de que su raíz web tenga los permisos predeterminados:
|
1 |
sudo chmod -R 755 /var/www |
Ahora, cree una página index.html simple usando nano dentro del directorio example ingresando el siguiente comando:
|
1 |
sudo nano /var/www/example/index.html |
En el editor nano, agregue el siguiente fragmento de código HTML:
|
1 2 3 4 5 6 7 8 |
<html> <head> <title>¡Bienvenido a Example.com!</title> </head> <body> <h1>Si puede ver este mensaje , , significa que el <em>example.com</em> host virtual está funcionando!!</h1> </body> </html> |
Una vez hecho esto, guarde el archivo presionando Ctrl O y presione ENTER. Ahora puede cerrar el editor presionando Ctrl X.
Hasta ahora, tenemos el directorio de su sitio y la página web básica para probar el host virtual. A continuación, queremos crear los archivos de configuración del host virtual. Los archivos de host virtual especifican las configuraciones de los distintos sitios que desea alojar en un solo servidor Apache. Dirigen las solicitudes del nombre de dominio establecido a su directorio específico.
Los archivos de host virtual se almacenan en el directorio /etc/httpd/sites-available. Los archivos de host virtual activados se enlazan simbólicamente desde el directorio /etc/httpd/sites-available al directorio /etc/httpd/sites-enabled . Estos dos directorios no se crean de forma predeterminada en CentOS, por lo que debe crearlos usted mismo. Ingrese el siguiente comando para crear los directorios:
|
1 |
sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled |
Con los directorios en su lugar, indique a Apache que busque hosts virtuales en el directorio sites-enabled. Para ello, modificará el archivo de configuración principal de Apache. Ingrese el siguiente comando para abrir el archivo en el editor nano:
|
1 |
sudo nano /etc/httpd/conf/httpd.conf |
Queremos agregar una línea que le indique a Apache que busque archivos de configuración adicionales en un directorio opcional. Desplácese hasta la parte inferior del archivo y agregue la siguiente línea al final:
|
1 |
IncludeOptional sites-enabled/*.conf |
Guarde el archivo presionando Ctrl O y presione ENTER. Ahora puede cerrar el editor presionando Ctrl X. El siguiente paso es crear el archivo de host virtual dentro del directorio sites-available. Ingrese el siguiente comando para crear y abrir el nuevo archivo con el editor nano:
|
1 |
sudo nano /etc/httpd/sites-available/example.conf |
En el archivo abierto, agregue el siguiente bloque de configuración. Recuerde reemplazar nuestro example.com con su nombre de dominio real, y si usó un nombre de directorio diferente en el /var/www/example, actualícelo también de manera adecuada:
|
1 2 3 4 5 6 7 |
<VirtualHost *:80> ServerName www.example.com ServerAlias example.com DocumentRoot /var/www/example ErrorLog /var/www/example/log/error.log CustomLog /var/www/example/log/requests.log combined </VirtualHost> |
Como puede ver, hemos especificado el nombre de dominio y la raíz del documento donde se encontrarán los archivos que se servirán para este dominio. También hemos especificado la ubicación del registro de errores; esto le ayudará durante la resolución de problemas del servidor.
Una vez que tengamos nuestro archivo de host virtual dentro del directorio sites-available, el siguiente paso es habilitar el archivo creando un enlace simbólico al directorio sites-enabled . Ingrese el siguiente comando para crear el enlace simbólico:
|
1 |
sudo ln -s /etc/httpd/sites-available/example.conf /etc/httpd/sites-enabled/example.conf |
Si ha seguido los pasos hasta este punto, su host virtual ahora debería estar listo para servir el contenido de su sitio web. Sin embargo, hay una comprobación más que debe configurar antes de que los hosts virtuales comiencen a funcionar. Trataremos eso a continuación.
Paso 5: Ajustar los permisos de SELinux para permitir hosts virtuales
Las distribuciones de Linux, incluyendo Fedora, RHEL y CentOS vienen con SELinux por defecto. SELinux (Security Enhanced Linux) es una arquitectura de seguridad para sistemas Linux que restringe y define cómo debe procesar las solicitudes un servidor, y cómo deben interactuar los usuarios con los sockets, puertos de red y directorios esenciales.
De forma predeterminada, SELinux funcionará con la configuración predeterminada de Apache. Sin embargo, con el host virtual personalizado que creó, que incluye un directorio de registro personalizado, se producirá un error de servicio cuando intente reiniciar el servicio Apache. La solución es modificar las políticas de SELinux para permitir que el servicio Apache escriba en los archivos necesarios.
SELinux hace de CentOS un servidor altamente seguro. Por lo tanto, no recomendamos desactivarlo por completo. Dado que SELinux le permite personalizar su nivel de seguridad de varias maneras, se recomienda que solo actualice o establezca políticas según las necesidades de su entorno.
Tiene dos opciones para actualizar las políticas de Apache: ya sea Universalmente o por Directorio específico. Actualizar las políticas específicas de un directorio es más seguro. Por lo tanto, es la opción recomendada.
-
Actualizar las políticas de Apache universalmente
Puede modificar la política de Apache de forma universal, lo que indicará a SELinux que trate todos los procesos de Apache de manera idéntica mediante el uso del httpd_unified booleano. Tenga en cuenta que modificar las políticas de Apache de forma universal no le dará el mismo nivel de control que hacerlo para cada directorio de manera específica. Sin embargo, es más conveniente en lo que respecta al mantenimiento. Ejecute el siguiente comando para actualizar las políticas de Apache de forma universal:
|
1 |
sudo setsebool -P httpd_unified 1 |
Definamos qué hacen los valores de este comando:
- setsebool – actualiza los valores booleanos de SELinux.
- -P etiqueta – actualiza el valor en tiempo de arranque para que este cambio persista tras los reinicios.
- httpd_unified – el valor booleano que indicará a SELinux que trate todos los procesos de Apache como el mismo tipo. El uso del valor 1 lo habilita.
-
Ajustar las políticas de Apache en un directorio
Si desea más control sobre los directorios, ajustar las políticas de Apache por directorio es el camino a seguir. Sin embargo, conlleva la sobrecarga de requerir más mantenimiento. Esto se debe a que la política no es global. Por lo tanto, deberá establecer manualmente el tipo de contexto para cualquier nuevo directorio de registro que especifique en sus archivos conf de host virtual.
Antes de actualizar la política, primero verifique el tipo de contexto que SELinux asignó al /var/www/example/log directorio utilizando el siguiente comando:
|
1 |
sudo ls -dZ /var/www/example/log/ |
El comando mostrará algo como lo siguiente, que es básicamente el contexto de SELinux del directorio:
|
1 |
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/example/log/ |
httpd_sys_content_t es el contexto actual, que le indica a SELinux que el proceso de Apache solo tiene permitido leer archivos creados en este directorio. Dado que, a partir de nuestras configuraciones de host virtual, queremos que Apache escriba en los archivos de registro en el /var/www/example/log directorio, modificaremos esta política para permitir que Apache genere y añada contenido a los archivos de registro de la aplicación web. El contexto que permite esto es el httpd_log_t. Aquí está el comando para actualizar el contexto:
|
1 |
sudo semanage fcontext -a -t httpd_log_t "/var/www/example/log(/.*)?" |
Para aplicar los cambios del comando anterior y hacer que persistan tras los reinicios, ejecute el siguiente comando:
|
1 |
sudo restorecon -R -v /var/www/example/log |
Definamos qué hace el comando:
- restorecon – aplica los cambios y asegura que persistan a través de los reinicios.
- opción -R – ejecutará el comando de forma recursiva, actualizando cualquier archivo existente para usar el nuevo contexto.
- opción -v – imprime los cambios de contexto después de que se haya ejecutado el comando. Mostrará algo como esto:
|
1 2 |
Salida: restorecon reset /var/www/example/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0 |
|
1 |
sudo ls -dZ /var/www/example/log/ |
|
1 |
drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/example.com/log |
Paso 6: Probar la configuración del host virtual
Antes de que podamos probar el host virtual, deberá reiniciar los servicios de Apache. Aquí está el comando para eso:
|
1 |
sudo systemctl restart httpd |
A continuación, enumere el contenido del directorio de registro utilizando el siguiente comando:
|
1 |
ls -lZ /var/www/example/log |
Debería mostrar algo como esto, mostrando que Apache ha creado los archivos de registro:

Si ha estado siguiendo los pasos hasta este punto, Apache ahora debería poder servir la página HTML de muestra cuando visite su nombre de dominio tal como se define en su archivo de host virtual. Si lo desea, puede repetir los pasos 4 y 5 para configurar dominios adicionales y actualizar sus permisos de SELinux de manera adecuada.
Conclusión
En este tutorial, instalamos Apache, aprendimos cómo actualizar las políticas de SELinux para permitir que Apache escriba en archivos de registro personalizados y, finalmente, probamos nuestra configuración para confirmar que funciona correctamente. Con esta base, debería poder avanzar a partir de ella y ofrecer mejores aplicaciones con experiencias más ricas.
Si desea explorar una pila web completa, consulte nuestro tutorial sobre cómo instalar la pila LAMP en CentOS 7.
¡Feliz computación!
Comentarios
Aún no hay comentarios. Sea el primero.