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.
Necesitará lo siguiente para completar esta guía:
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:
- 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
:
- 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.
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:
- sudo systemctl start httpd
Verifique que el servicio funcione con el siguiente comando:
- 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:
- 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:
- 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:
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.
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.
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:
- 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:
<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 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:
- 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:
...
# 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
:
- 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:
<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.
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.
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
.
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 -dlZ /var/www/example.com/log/
Este comando enumera e imprime el contexto de SELinux del directorio. Obtendrá un resultado similar al siguiente:
Outputdrwxr-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:
- 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. Obtendrá el siguiente resultado que confirma los cambios:
OutputRelabeled /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:
- sudo ls -dlZ /var/www/example.com/log/
El resultado refleja el tipo de contexto actualizado:
Outputdrwxr-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.
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
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:
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.
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.
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?