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.
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 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.
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:
OutputRedirecting 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:
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.
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.
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:
<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:
<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 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.
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 -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:
Outputdrwxr-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:
Outputrestorecon 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:
Outputdrwxr-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.
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:
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 desea construir una pila de aplicaciones más completa, puede consultar este artículo sobre cómo configurar una pila LAMP en CentOS 7.
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!