como instalar apache en centos 7

Cómo instalar Apache en CentOS 7

En esta entrada vamos a ver cómo instalar Apache en CentOS 7 paso a paso. CentOS es una de las distribuciones de Linux más prestigiosas en el entorno de servidores y servicios VPS. Por tanto instalar y configurar un servidor web en CentOS es uno de los primeros pasos a realizar.

Antes de instalar Apache en CentOS 7

Si quieres seguir esta guía de instalación de Apache en CentOS 7 necesitas cumplir una serie de requisitos:

  • Una instalación actualizada de CentOS 7.
  • Acceso por terminal como root o usuario con privilegios de sudo.
  • Conexión a Internet.

Seguramente ya cumples todo esto, así que podemos continuar.

Instalar Apache en CentOS 7

Vamos a ver cómo instalar Apache en CentOS 7, concretamente sobre un servidor recién preparado desde la versión minimal (tengo una entrada dedicada a la instalación de CentOS 7 en una máquina virtual VirtualBox con esa distribución, por si te interesa). La instalación del servidor web se realizará usando los paquetes oficiales de la distribución, a través de yum.

En primer lugar actualizamos los paquetes instalados en el sistema, como buena práctica antes de instalar cualquier nueva colección de paquetes:

~$ sudo yum update -y

A continuación instalamos el paquete httpd, que es el que contiene Apache:

~$ sudo yum install httpd -y

Cómo saber qué versión de Apache hemos instalado

Si queremos saber qué versión exacta de Apache estamos instalando en CentOS 7 usaríamos el comando httpd:

~$ httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Aug  8 2019 11:41:18

Cómo iniciar Apache y configurar el arranque automático

Ya tenemos Apache instalado, pero no está en marcha, algo que podríamos comprobar fácilmente mediante el comando systemctl status httpd:

como instalar el servidor web apache en centos 7

Por tanto tenemos que iniciar el servicio y hacer que lo haga también en cada inicio del sistema, para no tener que iniciarlo manualmente. En primer lugar configuramos el inicio del servicio con cada arranque del sistema:

~$ sudo systemctl enable httpd

Y a continuación iniciamos el servicio httpd por primera vez:

~$ sudo systemctl start httpd

Si lo prefieres, puedes usar el comando systemctl sin usar sudo, ya que cuando se requiere el nivel de superusuario se nos pide la contraseña.

Cómo configurar el firewall de CentOS 7 para acceder al servidor Apache

Ahora ya tenemos el servicio funcionando y configurado para iniciar automáticamente, pero tenemos un pequeño problema: Por defecto el firewall bloquea el acceso al servidor web.

La solución es configurar el acceso a Apache abriendo en el firewall los puertos tcp 80 y 443 (si queremos tener servicio http seguro), de modo permanente:

~$ sudo firewall-cmd --permanent --zone=public --add-service=http
success
~$ sudo firewall-cmd --permanent --zone=public --add-service=https
success
~$ sudo firewall-cmd --reload
success
~$

Fíjate que además de abrir los puertos para Apache, hay que recargar la configuración del firewall para que los cambios entren en funcionamiento de modo inmediato.

Ahora sí podemos acceder a nuestro servicio web Apache en CentOS 7 desde cualquier lugar de la red, usando como URL la dirección IP o el dominio del servidor:

instalar el servidor web apache en centos 7
Página web por defecto de Apache en CentOS 7

Configurar Apache en CentOS 7

A continuación vamos a configurar Apache en CentOS para utilizarlo en los escenarios más habituales.

En CentOS 7 encontramos el directorio de configuración de Apache en /etc/httpd/, y el archivo de configuración principal en /etc/httpd/conf/httpd.conf. Este es el archivo que editaremos para realizar los ajustes.

ServerName (nombre del servidor)

Si nuestro servidor NO tiene configurado el FQDN (nombre cualificado de dominio) habrá que configurar un detalle con respecto a nuestro nuevo servicio Apache. Podremos observar si revisamos el registro del sistema (/var/log/messages) lo siguiente:

Sep 21 13:16:05 localhost systemd: Starting The Apache HTTP Server...
Sep 21 13:16:06 localhost httpd: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Sep 21 13:16:06 localhost systemd: Started The Apache HTTP Server.

Vemos que cada vez que inicia el servidor web Apache se registra un aviso de que no está configurada la directiva ServerName en la configuración. La solución es simple, consiste en configurar un ajuste /etc/httpd/conf/httpd.conf:

~$ sudo nano /etc/httpd/conf/httpd.conf

Buscamos la directiva ServerName que, por defecto, aparece desactivada:

# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName www.example.com:80

Añadimos una línea con la directiva ServerName y el nombre de nuestra máquina, solucionando así el aviso en el registro.

ServerName centos7.local

Guardados los cambios, reiniciamos Apache para aplicar la nueva configuración:

~$ sudo systemctl restart httpd

Y comprobamos los mensajes del sistema:

~$ sudo tail /var/log/messages
...
Sep 21 13:30:11 localhost systemd: Stopping The Apache HTTP Server...
Sep 21 13:30:13 localhost systemd: Starting The Apache HTTP Server...
Sep 21 13:30:13 localhost systemd: Started The Apache HTTP Server.

Como podemos ver ya no queda rastro del error.

Esto no sería necesario si el servidor CentOS tiene configurado el nombre de dominio, ya que Apache lo toma como valor por defecto de ServerName.

Usuario y grupo de Apache

Un dato importante que debemos conocer es el usuario y grupo con que se ejecuta Apache, que son, respectivamente, apache y apache. Es necesario saberlo para configurar los permisos de escritura que puedan necesitar nuestras aplicaciones web.

Podemos consultar e incluso cambiar el usuario y grupo de Apache mirando en httpd.conf.

Servidores Virtuales Apache en CentOS 7

Si queremos que nuestro servidor o VPS CentOS 7 sea capaz de servir distintos sitios web para distintos dominios, necesitamos configurar servidores virtuales de Apache.

Si aún no has registrado los dominios, te recomiendo Namecheap, el lugar donde registro y renuevo los dominios de mis sitios web, como por ejemplo este sitio.

En este ejemplo trabajaremos con servidores virtuales para el dominio centos7.local y los subdominios vhost1.centos7.local y vhost2.centos7.local.

Para configurar servidores virtuales de Apache en CentOS 7 vamos a seguir una aproximación similar a la de Debian.

Tendremos una carpeta /etc/httpd/sites-available/ donde guardaremos los archivos de configuración de cada servidor virtual. En una segunda carpeta /etc/httpd/sites-enabled/ crearemos enlaces simbólicos a cada uno de los archivos de la primera carpeta. Creando y eliminando estos enlaces dentro de sites-enabled/ será la forma en que activaremos y desactivaremos cada servidor virtual, de forma independiente.

Así que en primer lugar creamos las carpetas sites-available/ y sites-enabled/ dentro de /etc/httpd/ como acabamos de decir:

~$ sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled

Para que Apache tenga en consideración estos archivos de configuración, tendremos que instruirle a través de la configuración en httpd.conf.

~$ sudo nano /etc/httpd/conf/httpd.conf

Añadiremos una directiva IncludeOptional al final del archivo para que cargue los archivos de configuración presentes en /etc/httpd/sites-enabled/:

...
IncludeOptional sites-enabled/*.conf

Guardamos los cambios, cerramos el archivo y recargamos la configuración de Apache:

~$ sudo systemctl reload httpd

Ahora, cada vez que Apache reinicie o recargue la configuración, tendrá en cuenta los servidores virtuales que tengan enlaces desde sites-enabled/ a los archivos de configuración en sites-available/.

Vamos a crear las carpetas que contendrán los archivos de las webs de cada servidor virtual en /var/www/:

~$ sudo mkdir /var/www/vhost1 /var/www/vhost2

Además de crear las carpetas, cambiamos el propietario de las mismas para que sea el usuario que se ocupará de gestionarlas.

~$ sudo chown chacho:chacho /var/www/vhost1 /var/www/vhost2

Creamos un archivo index.html en cada carpeta de servidor virtual para que tengan algún contenido. Por ejemplo, para el servidor virtual vhost1.centos7.local creamos el archivo index.html:

~$ nano /var/www/vhost1/index.html

Con este único contenido:

<h1>vhost1.centos7.local</h1>

De forma similiar haríamos con el resto de servidores virtuales.

Ya sólo queda crear los archivos de configuración para cada servidor virtual dentro de la carpeta /etc/httpd/sites-available/. Por ejemplo, para el primer servidor virtual:

~$ sudo nano /etc/httpd/sites-available/vhost1.conf

Y este sería el contenido del archivo:

<VirtualHost *:80>
        ServerName vhost1.centos7.local
        DocumentRoot /var/www/vhost1
        <Directory /var/www/vhost1>
                AllowOverride all
                Require all granted
        </Directory>
        ErrorLog /var/log/httpd/vhost1-error.log
        CustomLog /var/log/httpd/vhost1-access.log combined
</VirtualHost>

Y creamos el segundo servidor virtual:

~$ sudo nano /etc/httpd/sites-available/vhost2.conf

Con este contenido:

<VirtualHost *:80>
        ServerName vhost2.centos7.local
        DocumentRoot /var/www/vhost2
        <Directory /var/www/vhost2>
                AllowOverride all
                Require all granted
        </Directory>
        ErrorLog /var/log/httpd/vhost2-error.log
        CustomLog /var/log/httpd/vhost2-access.log combined
</VirtualHost>

Lógicamente tú tendrás que sustituir tus dominios, nombres de carpeta, etc. donde corresponda.

Ahora vamos a enlazar estos archivos de configuración para que carguen en la configuración de Apache:

~$ sudo ln -s /etc/httpd/sites-available/vhost1.conf /etc/httpd/sites-enabled/
~$ sudo ln -s /etc/httpd/sites-available/vhost2.conf /etc/httpd/sites-enabled/

Y ya sólo nos quedaría recargar la configuración de Apache:

~$ sudo systemctl reload httpd

Y ya podemos acceder a los servidores virtuales a través de los dominios que hemos configurado.

servidores virtuales de apache en centos 7

Servidor Virtual de Apache por defecto en CentOS

Un problema que tenemos es que accediendo al servidor por su dirección IP o por cualquier dominio o subdominio que se resuelva con esa IP mostrarán siempre la página perteneciente al primer servidor virtual que cargue la configuración de Apache.

Este no suele ser un comportamiento deseable, así que la solución es crear un servidor virtual adicional que se encargue de responder a todas estas peticiones. Podríamos llamar al archivo de configuración 000-default.conf (para que por orden alfabético se cargue en primer lugar):

~$ sudo nano /etc/httpd/sites-available/000-default.conf

Y su contenido sería algo como:

<VirtualHost *:80>
        DocumentRoot /var/www/html
</VirtualHost>

Recordemos que prácticamente toda la configuración por defecto se toma de /etc/httpd/conf/httpd.conf, por lo que no es necesario especificar opciones, a no ser que queramos cambiarlas. Enlazamos este archivo en sites-enabled/:

~$ sudo ln -s /etc/httpd/sites-available/000-default.conf /etc/httpd/sites-enabled/

Y recargamos la configuración de Apache:

~$ sudo systemctl reload httpd

Y tenemos el servidor por defecto y los servidores específicos funcionando.

apache virtual host centos 7

Servidores virtuales de Apache en directorios de usuario en CentOS 7

Al configurar servidores virtuales o sitios web bajo /var/www/ y /var/www/html/, como hemos visto en los ejemplos anteriores, no deberíamos tener ningún tropiezo. Sin embargo, si usamos la carpeta personal de cada usuario para alojar sus sitios web, sí que podríamos tener problemas.

Por ejemplo, yo suelo alojar los sitios web que desarrollo bajo la carpeta ~/public_html/ de mi usuario en el sistema. Es decir, si mi usuario es chacho, alojaré en /home/chacho/public_html/ tantas carpetas como proyectos quiera desplegar. Es muy habitual hacerlo así, especialmente en sistemas donde conviven varios usuarios.

Podríamos tener un archivo de configuración de servidor virtual para un proyecto en la carpeta personal de usuario como este:

<VirtualHost *:80>
   ServerName vhost1.centos7.local
   DocumentRoot /home/chacho/public_html/vhost1
   <Directory /home/chacho/public_html/vhost1>
      AllowOverride all
      Require all granted
   </Directory>
   ErrorLog /var/log/httpd/vhost1-error.log
   CustomLog /var/log/httpd/vhost1-access.log combined
</VirtualHost>

Error AH00035 y error 403 Forbidden de Apache en CentOS 7

Pero esta configuración no funciona por defecto, y mientras que el navegador puede arrojar un error 403 Forbidden, en los registros del servidor virtual pueden aparecer errores AH00035.

como configurar el servidor web apache en centos 7
Error 403: Forbidden. Apache no puede acceder a los archivos web.

Para conseguir nuestro objetivo, debemos vencer dos obstáculos distintos.

Por un lado los permisos de lectura. Aunque la carpeta ~/public_html/ y las que cuelguen de ella tengan permisos de lectura y acceso para terceros, en CentOS 7 la carpeta personal del usuario (la que cuelga directamente de /home/) sólo tiene permisos para el propietario. No tiene permisos ni para el grupo ni para terceros. Por tanto debemos dar permisos de lectura y acceso a terceros:

~$ chmod 755 /home/chacho

El siguiente problema es la seguridad extendida SELinux que viene activada por defecto en CentOS 7. En nuestro caso, el servidor no tiene permiso para servir archivos desde cualquier ubicación sólo desde las ubicaciones estándar.

La solución es dar los permisos extendidos necesarios a las ubicaciones que SELinux no permite por defecto en CentOS 7.

Por ejemplo, para conceder al servidor acceso a la carpeta /home/chacho/public_html/ usaremos el comando chcon:

~$ sudo chcon -R --type=httpd_sys_content_t /home/chacho/public_html

Si la aplicación web que vamos a instalar va a escribir archivos en su propio directorio, por ejemplo, un WordPress, entonces usaremos chcon de esta forma:

~$ sudo chcon -R --type=httpd_sys_rw_content_t /home/chacho/public_html/wordpress

Cambiando los permisos de acceso convencionales y extendidos ya podremos configurar servidores virtuales en cualquier ubicación

Para estos cambios no es necesario recargar la configuración de Apache.

Conclusión

Ya hemos visto cómo instalar y configurar Apache en CentOS 7, manejar su configuración básica y añadir servidores virtuales. Con todo esto ya sólo quedarían pequeños retoques dependientes de cada caso particular, para ajustar el servidor web de CentOS a tus necesidades.

Para cualquier duda, pregunta o error, déjame un mensaje y te digo algo.

Apoya este sitio

¿Te ha sido de utilidad este artículo? ¿Te has ahorrado un dolor de cabeza al configurar Apache en CentOS 7? Puedes apoyarnos al mantenimiento del sitio con una mínima donación.

Valora esta entrada

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (6 votos, promedio: 5,00 de 5)
Cargando…

Deja un comentario

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies.

ACEPTAR
Aviso de cookies