Introducción
El servidor HTTP Apache es el servidor web más utilizado en el mundo. Proporciona muchas funciones potentes, incluidos módulos cargables dinámicamente, soporte de medios robusto y una amplia integración con otro software popular.
En esta guía, instalará un servidor web Apache con hosts virtuales en su servidor CentOS 7.
Requisitos
Usted necesitará lo siguiente para completar esta guía:
- Un usuario que no es root con privilegios sudo configurados en su servidor, configure siguiendo la guía de configuración inicial del servidor para CentOS 7.
- Un firewall básico configurado siguiendo la guía de Pasos Adicionales Recomendados para los nuevos servidores CentOS 7.
Paso 1-Instalación de Apache
Apache está disponible en los repositorios de software predeterminados de CentOS, lo que significa que puede instalarlo con el administrador de paquetes yum
.
Como usuario sudo no root configurado en los prerrequisitos, actualice el índice de paquetes local de Apache httpd
para reflejar los últimos cambios de desarrollo:
- sudo yum update httpd
Una vez actualizados los paquetes, instale el paquete Apache:
- sudo yum install httpd
Después de confirmar la instalación, yum
instalará Apache y todas las dependencias necesarias.
Si completó la guía de Pasos Recomendados Adicionales para los Nuevos servidores CentOS 7 mencionada en la sección requisitos previos, habrá instalado firewalld
en su servidor y necesitará abrir el puerto 80
para permitir que Apache sirva solicitudes a través de HTTP. Si aún no lo ha hecho, puede hacerlo activando el servicio firewalld
‘s http
con el siguiente comando:
- sudo firewall-cmd --permanent --add-service=http
Si planea configurar Apache para servir contenido a través de HTTPS, también querrá abrir el puerto 443
habilitando el servicio https
:
- sudo firewall-cmd --permanent --add-service=https
A continuación, vuelva a cargar el firewall para poner en práctica estas nuevas reglas:
- sudo firewall-cmd --reload
Después de que el firewall se vuelva a cargar, estará listo para iniciar el servicio y comprobar el servidor web.
Paso 2: Comprobar el servidor web
Apache no se inicia automáticamente en CentOS una vez que se completa la instalación. Deberá iniciar el proceso de Apache manualmente:
- sudo systemctl start httpd
Verifique que el servicio se esté ejecutando con el siguiente comando:
- sudo systemctl status httpd
Verá un active
estado cuando el servicio se esté ejecutando:
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 esta salida, el servicio parece haberse iniciado correctamente. Sin embargo, la mejor manera de probar esto es solicitar una página de Apache.
Puede acceder a la página de destino predeterminada de Apache para confirmar que el software se ejecuta correctamente a través de su dirección IP. Si no conoce la dirección IP de su servidor, puede obtenerla de varias maneras diferentes desde la línea de comandos.
Escriba esto en el símbolo del sistema de su servidor:
- hostname -I
Este comando mostrará todas las direcciones de red del host, por lo que obtendrá algunas direcciones IP separadas por espacios. Puedes probar cada uno en tu navegador web para ver si funciona.
Alternativamente, puede usar curl
para solicitar su IP desde icanhazip.com
, lo que le proporcionará su dirección IPv4 pública como se ve 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
Verá la página web Apache CentOS 7 predeterminada:
Esta página indica que Apache está funcionando correctamente. También incluye información básica sobre archivos Apache importantes y ubicaciones de directorios. Ahora que el servicio está instalado y en ejecución, ahora puede usar diferentes comandos systemctl
para administrar el servicio.
Paso 3-Administrar el proceso de Apache
Ahora que tiene su servidor web en funcionamiento, repasemos algunos comandos de administración básicos.
Para detener su servidor web, escriba:
- sudo systemctl stop httpd
Para iniciar el servidor web cuando se detenga, escriba:
- sudo systemctl start httpd
Para detener y luego iniciar el servicio de nuevo, escriba:
- sudo systemctl restart httpd
Si simplemente están haciendo cambios de configuración, Apache a menudo puede recargar sin soltar conexiones. Para hacer esto, use este comando:
- sudo systemctl reload httpd
De forma predeterminada, Apache está configurado para iniciarse automáticamente cuando se inicia el servidor. Si esto no es lo que desea, deshabilite este comportamiento escribiendo:
- sudo systemctl disable httpd
Para volver a habilitar el servicio para que se inicie al arrancar, escriba:
- sudo systemctl enable httpd
Apache se iniciará automáticamente cuando el servidor se inicie de nuevo.
La configuración predeterminada de Apache permitirá que su servidor aloje un solo sitio web. Si planea alojar varios dominios en su servidor, deberá configurar hosts virtuales en su servidor web Apache.
Paso 4: Configuración de Hosts virtuales (Recomendado)
Al usar el servidor web Apache, puede usar hosts virtuales (similares a los bloques de servidor en Nginx) para encapsular detalles de configuración y alojar más de un dominio desde un solo servidor. En este paso, configurará un dominio llamado example.com
, pero debe reemplazarlo con su propio nombre de dominio. Para obtener más información sobre cómo configurar un nombre de dominio con DigitalOcean, consulte nuestra Introducción a DigitalOcean DNS.
Apache en CentOS 7 tiene un bloque de servidor habilitado de forma predeterminada que está configurado para servir documentos desde el directorio /var/www/html
. Si bien esto funciona bien para un solo sitio, puede volverse difícil de manejar si aloja varios sitios. En lugar de modificar /var/www/html
, creará una estructura de directorios dentro del sitio /var/www
para el sitio example.com
, dejando /var/www/html
como el directorio predeterminado a servir si una solicitud de cliente no coincide con ninguna otra sitios.
Cree el directorio html
para example.com
de la siguiente manera, usando la bandera -p
para crear los directorios padres necesarios:
- sudo mkdir -p /var/www/example.com/html
Cree un directorio adicional para almacene 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 ambiental $USER
:
- sudo chown -R $USER:$USER /var/www/example.com/html
Asegúrese de que su raíz web tenga la conjunto de permisos predeterminados:
- sudo chmod -R 755 /var/www
Next, create a sample index.html
page using vi
or your favorite editor:
- sudo vi /var/www/example.com/html/index.html
Press i
to switch to INSERT
mode and add the following sample HTML to the file:
<html> <head> <title>Welcome to Example.com!</title> </head> <body> <h1>Success! The example.com virtual host is working!</h1> </body></html>
Save and close the file by pressing ESC
, typing :wq
, and pressing ENTER
.
Con el directorio de su sitio y el archivo de índice de muestra en su lugar, está casi listo para crear los archivos de host virtual. Los archivos de host virtual especifican la configuración de sus sitios separados e indican al servidor web Apache cómo 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 le dice a Apache que un host virtual está listo para servir a los visitantes. El directorio sites-enabled
contiene enlaces simbólicos a los hosts virtuales que queremos publicar. Cree ambos directorios con el siguiente comando:
- sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
A continuación, le dirá a Apache que busque hosts virtuales en el directorio sites-enabled
. Para lograr esto, edite el archivo de configuración principal de Apache y agregue una línea que declare un directorio opcional para archivos de configuración adicionales:
- sudo vi /etc/httpd/conf/httpd.conf
Agregue esta línea al final del archivo:
IncludeOptional sites-enabled/*.conf
Guarde y cierre el archivo cuando haya terminado de añadir esa línea. Ahora que tiene sus directorios de host virtual en su lugar, 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
a 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 le indicará a Apache dónde encontrar directamente la raíz que contiene los documentos web de acceso público. También le indica a Apache dónde almacenar los registros de errores y solicitudes para este sitio en particular.
Guarde y cierre el archivo cuando haya terminado.
Ahora que ha creado los archivos de host virtual, los habilitará para que Apache sepa servirlos a los visitantes. Para ello, 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 ahora está configurado y listo para servir contenido. Antes de reiniciar el servicio Apache, asegurémonos de que SELinux tiene las políticas correctas implementadas para sus hosts virtuales.
Paso 5-Ajuste de 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, recibirá un error si intenta iniciar el servicio Apache. Para resolver esto, necesita actualizar las políticas de SELinux para permitir que Apache escriba en los archivos necesarios. SELinux aporta una mayor seguridad a su entorno CentOS 7, por lo que no se recomienda desactivar completamente el módulo del núcleo.
Hay diferentes maneras de establecer políticas basadas en las necesidades de su entorno, ya que SELinux le permite personalizar su nivel de seguridad. Este paso cubrirá dos métodos para ajustar las políticas de Apache: universalmente y en un directorio específico. Ajustar las políticas en los directorios es más seguro y, por lo tanto, es el enfoque recomendado.
Ajustar universalmente las políticas de Apache
Establecer universalmente la política de Apache le indicará a SELinux que trate todos los procesos de Apache de forma idéntica utilizando el booleano httpd_unified
. Aunque este enfoque es más conveniente, no le dará el mismo nivel de control que un enfoque que se centra en una directiva de archivos o directorios.
Ejecute el siguiente comando para establecer una política universal de Apache:
- sudo setsebool -P httpd_unified 1
El comando setsebool
cambia los valores booleanos de SELinux. El indicador -P
actualizará el valor de tiempo de arranque, haciendo que este cambio persista en los reinicios. httpd_unified
es el booleano que le dirá a SELinux que trate todos los procesos de Apache como del mismo tipo, por lo que lo habilitó con un valor de 1
.
Ajustar las políticas de Apache en un directorio
Configurar individualmente los permisos de SELinux para el directorio /var/www/example.com/log
le dará más control sobre sus políticas de Apache, pero también puede requerir más mantenimiento. Dado que esta opción no es directivas de configuración universal, deberá configurar manualmente el tipo de contexto para cualquier nuevo directorio de registros especificado en las configuraciones de host virtual.
Primero, verifique el tipo de contexto que SELinux dio al directorio /var/www/example.com/log
:
- sudo ls -dZ /var/www/example.com/log/
Este comando muestra e imprime el contexto SELinux del directorio. Verá una salida similar a la 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 le dice a SELinux que el proceso Apache solo puede leer archivos creados en este directorio. En este tutorial, cambiará el tipo de contexto del directorio /var/www/example.com/log
a httpd_log_t
. Este tipo permitirá a Apache generar y anexar archivos de registro de aplicaciones web:
- 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 lo largo de los reinicios:
- sudo restorecon -R -v /var/www/example.com/log
El indicador -R
ejecuta este comando recursivamente, lo que significa que actualizará cualquier archivo existente para usar el nuevo contexto. El indicador -v
mostrará los cambios de contexto realizados por el comando. Verá la siguiente salida confirmando 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/
La salida 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
está utilizando el tipo httpd_log_t
, está listo para probar la configuración de su host virtual.
Paso 6-Probando el Host Virtual (Recomendado)
Una vez que el contexto SELinux se haya actualizado con cualquiera de los métodos, Apache podrá escribir en el directorio /var/www/example.com/log
. Ahora puede reiniciar con éxito el servicio 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ás que Apache fue capaz de crear el error.log
y requests.log
archivos 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 usted tiene su host virtual configurar y SELinux permisos actualizados, Apache se sirven ahora su nombre de dominio. Puede probar esto navegando a http://example.com
, donde debería ver algo como esto:
Esto confirma que su host virtual está configurado correctamente y sirve contenido. Repita los pasos 4 y 5 para crear nuevos hosts virtuales con permisos de SELinux para dominios adicionales.
Conclusión
En este tutorial, usted instaló y administró el servidor web Apache. Ahora que tiene instalado su servidor web, tiene muchas opciones para el tipo de contenido que puede servir y las tecnologías que puede usar para crear una experiencia más rica.
Si desea crear una pila de aplicaciones más completa, puede consultar este artículo sobre cómo configurar una pila de LÁMPARAS en CentOS 7.