Cómo instalar Apache en CentOS 6

En este artículo veremos cómo instalar Apache en CentOS 6 paso a paso, de modo que puedas experimentar con este servidor web, incluyendo la configuración del firewall, servidores virtuales y configuración de seguridad SSL para el protocolo HTTPS.

Antes de instalar Apache en CentOS 6

Para poder seguir esta guía de instalación de Apache en CentOS 6 necesitas partir de los siguientes requisitos básicos:

  • Un sistema CentOS 6 actualizado.
  • Dominios o subdominios apuntando al servidor CentOS 6 si planeas configurar servidores virtuales.
  • Acceso a consola con un usuario con permisos de sudo o el mismo root.
  • Conexión a Internet.

Este tutorial se ha realizado sobre la versión 6.10 Final de CentOS.

Cómo instalar Apache en CentOS 6

Para instalar Apache en CentOS 6 usaremos los paquetes presentes en los repositorios de la distribución, por lo que es conveniente actualizar la información de las listas de paquetes:

~$ sudo yum update -y

El paquete que buscamos es httpd, que corresponde con el servidor web Apache 2.2.15, así que lo instalaremos con yum:

~$ sudo yum install -y httpd

Cuando termine la descarga e instalación del paquete httpd y sus dependencias tendremos un nuevo servicio en CentOS 6 llamado httpd. Este servicio no queda en ejecución ni activado, por lo que Apache no iniciará automáticamente en cada arranque de CentOS 6.

Iniciaremos el servicio httpd con el comando service:

~$ sudo service httpd start

Y nos aseguraremos de que Apache inicie automáticamente con CentOS 6 con el comando chkconfig:

~$ sudo chkconfig --level 2345 httpd on

Comprobaremos el estado del servicio en cualquier momento con el comando service:

~$ sudo service httpd status
Se está ejecutando httpd (pid  1851)...

Configurar el firewall para Apache en CentOS 6

Por defecto el firewall de CentOS 6 bloqueará los puertos en los que acepta conexiones el servidor web Apache, el 80/TCP para el protocolo HTTP estándar y el 443/TCP para el protocolo HTTPS seguro.

Antes de añadir reglas para el firewall, veamos la configuración actual:

~$ sudo iptables -L --line
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
2    ACCEPT     icmp --  anywhere             anywhere
3    ACCEPT     all  --  anywhere             anywhere
4    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
5    REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Vemos que la regla 5 de la cadena INPUT rechaza todo el tráfico entrante, por lo que tendremos que insertar las nuevas reglas por encima de ese número de línea.

Para habilitar el puerto HTTP insertaremos la siguiente regla con iptables:

~$ sudo iptables -I INPUT 5 -m state --state NEW -p tcp --dport 80 -j ACCEPT

Si tenemos pensado usar también el protocolo HTTPS tendremos que insertar su propia regla:

~$ sudo iptables -I INPUT 5 -m state --state NEW -p tcp --dport 443 -j ACCEPT

En cualquier caso si queremos que la configuración sea permanente tendremos que guardar las nuevas reglas:

~$ sudo service iptables save

Comprobaremos el funcionamiento de Apache conectando desde otra máquina de la red empleando como URL la dirección IP o el dominio del servidor CentOS 6:

como instalar apache en centos 6

Cómo configurar Apache en CentOS 6

Para configurar Apache en CentOS 6 debes saber que la ruta de los archivos y directorios de configuración es /etc/httpd/. El archivo de configuración principal es httpd.conf y se encuentra en la carpeta conf/.

como configurar apache en centos 6

Hay otra carpeta adicional de la que también se cargan otros archivos de configuración, además de conf/, que es conf.d/.

La página web por defecto de Apache está configurada para ser alojada en /var/www/html/. Sin embargo, la página de prueba que hemos visto hace unos instantes no se ubica en esa ruta. En realidad es una página de error que se muestra al estar vacía la ruta /var/www/html/. La configuración que muestra esta página de bienvenida/error se carga de conf.d/welcome.conf.

Las páginas de registro de accesos y errores son access_log y error_log y se guardan en la ruta /var/log/httpd/.

Tras realizar cualquier cambio en la configuración de Apache en CentOS 6 será necesario recargar la configuración del servicio httpd:

~$ sudo service httpd reload

En ocasiones puede ser necesario reiniciar el servicio:

~$ sudo service httpd restart

Servidores virtuales de Apache en CentOS 6

Vamos a configurar servidores virtuales de Apache en CentOS 6. Para ello editaremos httpd.conf para activar el uso de servidores virtuales:

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

Buscaremos la directiva NameVirtualHost:

...
# Use name-based virtual hosting.
#
#NameVirtualHost *:80
...

Activaremos esta directiva eliminando el carácter # inicial:

...
NameVirtualHost *:80
...

Ahora añadimos al final del archivo una directiva Include relativa a un directorio donde guardaremos los archivos de configuración de cada servidor virtual que configuremos:

...
Include sites.d/*.conf

Guardamos los cambios y cerramos el archivo.

Tenemos que crear el directorio para las configuraciones de servidores virtuales tal como hemos indicado en la configuración:

~$ sudo mkdir /etc/httpd/sites.d

Servidor virtual por defecto de Apache

Antes de añadir un servidor virtual para un nuevo dominio o subdominio es necesario crear el servidor virtual por defecto, que recogerá las peticiones para la dirección o direcciones IP del servidor CentOS 6, el dominio principal (en este ejemplo es centos6.local.lan) y cualquier dominio que apunte al servidor pero no tenga su propio servidor virtual configurado.

Apache considera como servidor virtual por defecto aquel cuya configuración carga en primer lugar, así que usaremos un nombre de archivo alfabéticamente favorable para nuestros propósitos:

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

El contenido será mínimo:

<VirtualHost *:80>
</VirtualHost>

Toda la configuración cargará con valores por defecto y los especificados en httpd.conf.

Servidores virtuales adicionales

Solucionado el asunto del servidor virtual por defecto, pasamos a añadir servidores virtuales adicionales, por ejemplo para el subdominio blog.centos6.local.lan, creando el archivo de configuración:

~$ sudo nano /etc/httpd/sites.d/blog.centos6.local.lan.conf

El contenido básico sería el siguiente:

<VirtualHost *:80>
        ServerName blog.centos6.local.lan
        DocumentRoot /var/www/blog.centos6.local.lan
        ErrorLog logs/blog.centos6.local.lan-error.log
        CustomLog logs/blog.centos6.local.lan-access.log combined
</VirtualHost>

Donde encontramos las siguientes directivas:

  • ServerName: Especifica el dominio al que responde este servidor virtual.
  • DocumentRoot: El directorio donde se alojan los archivos web del servidor.
  • ErrorLog: El archivo de registro de errores.
  • CustomLog: El registro de accesos al servidor.

Guardamos los cambios y cerramos el archivo.

Tenemos que preparar el contenido web de este servidor virtual creando su carpeta raíz de archivos web tal y como está especificada en la directiva DocumentRoot:

~$ sudo mkdir /var/www/blog.centos6.local.lan

Para este ejemplo preparamos un contenido mínimo:

~$ sudo nano /var/www/blog.centos6.local.lan/index.html

El archivo HTML contendrá un simple mensaje:

<h1>Bienvenidos a blog.centos6.local.lan</h1>

Guardados los cambios del archivo, sólo queda recargar la configuración de Apache:

~$ sudo service httpd reload

Y ya podemos conectar al servidor Apache desde un navegador con las distintas posibilidades:

como instalar y configurar apache en centos 6

A partir de este momento, añadir más servidores virtuales de Apache en CentOS 6 es tan sencillo como:

  1. Configurar un dominio o subdominio que apunte al servidor CentOS 6.
  2. Preparar la carpeta y archivos web del nuevo servidor virtual.
  3. Crear el archivo de configuración con extensión .conf en la carpeta sites.d/.
  4. Recargar la configuración de Apache.

Desactivar servidores virtuales

Por otro lado para eliminar o desactivar un servidor virtual podemos borrar su archivo de configuración o cambiarle la extensión a cualquiera distinta de .conf, y a continuación recargar la configuración del servicio Apache.

Configurar Apache con seguridad SSL en CentOS 6

Para configurar la seguridad SSL de Apache en CentOS 6 es necesario instalar el módulo SSL de Apache, que encontraremos en los repositorios de CentOS 6. El paquete que necesitamos es mod_ssl y lo instalaremos con yum:

~$ sudo yum install mod_ssl

Además de la instalación del módulo SSL de Apache, se instala un archivo de configuración ssl.conf en conf.d/ y unos certificados autofirmados. La configuración por defecto usa estos nuevos certificados, llamados localhost.key y localhost.crt y sus rutas están configuradas en el archivo ssl.conf.

Si dispones de tus propias claves RSA y certificados SSL puedes editar ssl.conf:

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

Las directivas que hay que buscar son SSLCertificateFile y SSLCertificateKeyFile:

...
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
...
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
...

Tendrás que ajustar sus valores a las rutas de tus propios certificados. Si planeas usar un certificado firmado por alguna autoridad certificadora, además tendrás que configurar la directiva SSLCertificateChainFile:

...
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
...

Será necesario eliminar el carácter # inicial e indicar la ruta al archivo «chain«. Por defecto viene desactivada porque para certificados autofirmados no es necesaria.

Guardados los cambios en el archivo, habrá que recargar la configuración de Apache.

Ahora probaremos a acceder al servidor web usando una URL que comience por https:// en lugar de por http:// como hicimos anteriormente:

instalar apache en centos 6

En el caso de usar certificados SSL autofirmados el navegador nos hará saber que no confía en ellos, ya que no hay una autoridad certificadora que los garantice.

Según el navegador del que se trate habrá una opción que nos permita continuar, en este ejemplo sería pulsando el botón «Configuración avanzada» y a continuación el enlace «Acceder a xxxxxxxx (sitio no seguro)» que se despliega. Hecho esto el navegador accederá a la página, aunque de una forma u otra seguirá mostrando avisos de seguridad relativos a los certificados empleados:

apache en centos 6

A pesar de los avisos, la conexión está cifrada y se usa el puerto 443/TCP en lugar del 80/TCP.

Configuración para servidores virtuales

Esta configuración por defecto del módulo SSL de Apache en CentOS 6 está pensada para un servidor que ofrece la página web por defecto. Si estás interesado en montar distintos servidores virtuales con sus propios certificados SSL, partiendo del ejemplo de servidores virtuales de este tutorial haremos algunos cambios.

En primer lugar, el archivo ssl.conf incluye una parte de configuración general para cargar el módulo SSL y ajustes por defecto. De esta primera lo único que hay que hacer es añadir una directiva NameVirtualHost.

En una segunda parte, el archivo ssl.conf incluye una configuración para el servidor virtual por defecto que habremos de cortar y pegar en el archivo 000-default.conf. Debemos hacerlo porque si no esta configuración cargaría siempre, colisionando con la configuración particular si accedemos a un servidor virtual distinto.

Haremos un respaldo del archivo ssl.conf original:

~$ sudo cp /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.ORIGINAL

Y editaremos el archivo ssl.conf eliminando por completo el bloque VirtualHost. Nos quedaría algo así (se han eliminado los comentarios por brevedad):

LoadModule ssl_module modules/mod_ssl.so
Listen 443
NameVirtualHost *:443
SSLPassPhraseDialog  builtin
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout  300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin
#SSLRandomSeed startup file:/dev/random  512
#SSLRandomSeed connect file:/dev/random  512
#SSLRandomSeed connect file:/dev/urandom 512
SSLCryptoDevice builtin
#SSLCryptoDevice ubsec

Observa que hemos añadido la directiva NameVirtualHost debajo de Listen para activar la configuración de servidores virtuales con seguridad SSL.

Si guardas los cambios y recargas Apache, se cargará el módulo SSL y el servidor web seguirá atendiendo peticiones en el puerto 443/TCP, pero ningún servidor virtual podrá responderlas.

Editaremos la configuración del servidor virtual por defecto y copiaremos al final del mismo el bloque VirtualHost que hemos eliminado de ssl.conf:

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

El bloque que añadimos quedaría así (sin los comentarios):

<VirtualHost *:80>
</VirtualHost>

<VirtualHost _default_:443>
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn

SSLEngine on

SSLProtocol all -SSLv2

SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES

SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
#SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt

#SSLVerifyClient require
#SSLVerifyDepth  10
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire

<Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

Guardamos los cambios y cerramos el archivo.

En realidad la configuración puede ser más simple. Vamos a añadir cifrado SSL al servidor virtual adicional que configuramos antes para el subdominio blog.centos6.local.lan.

Si no tenemos un certificado SSL firmado, podemos crear e instalar uno nuevo autofirmado para este servidor virtual:

~$ sudo openssl req -newkey rsa:2048 -x509 -nodes -days 365 -keyout /etc/pki/tls/private/blog.centos6.local.lan.key -out /etc/pki/tls/certs/blog.centos6.local.lan.crt

Puedes contestar en blanco a las preguntas, pero en «Common Name» es interesante responder con el dominio o subdominio que estamos configurando:

...
Common Name (eg, your name or your server's hostname) []:blog.centos6.local.lan
...

Editamos el archivo del sevidor virtual:

~$ sudo nano /etc/httpd/sites.d/blog.centos6.local.lan.conf

Y añadimos un bloque VirtualHost para el protocolo HTTPS:

<VirtualHost *:80>
        ServerName blog.centos6.local.lan
        DocumentRoot /var/www/blog.centos6.local.lan
        ErrorLog logs/blog.centos6.local.lan-error.log
        CustomLog logs/blog.centos6.local.lan-access.log combined
</VirtualHost>

<VirtualHost *:443>
        ServerName blog.centos6.local.lan
        DocumentRoot /var/www/blog.centos6.local.lan

        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/blog.centos6.local.lan.crt
        SSLCertificateKeyFile /etc/pki/tls/private/blog.centos6.local.lan.key
        #SSLCertificateChainFile

        LogLevel warn
        ErrorLog logs/blog.centos6.local.lan-error.log
        CustomLog logs/blog.centos6.local.lan-access.log combined
</VirtualHost>

Observa que es mucho más reducido. Guardamos los cambios, cerramos el archivo y recargamos la configuración de Apache.

Por fin podemos acceder con las distintas direcciones y dominios al servidor web de nuestra máquina CentOS 6:

apache para centos 6

Ha sido un camino lleno de obstáculos, pero al final lo hemos conseguido.

Conclusión

Ahora ya sabes cómo instalar y configurar Apache en CentOS 6 al más puro estilo old school, con una configuración de firewall algo correosa, la entrañable versión 2.2 de Apache y la farragosa configuración del módulo SSL. A partir de aquí ya puedes sacarle todo el partido a tu VPS CentOS 6 si aún no te animas a actualizar.

En caso de dudas, sugerencias, preguntas, etc. puedes dejar un comentario.

¡Apoya comoinstalar.me!

¿Te ha servido esta guía de instalación y configuración de Apache en CentOS 6? ¿Quieres más guías y tutoriales del viejo CentOS 6 para mantener viejos servidores y VPS CentOS 6? Un poco de apoyo estimulará la inversión de tiempo y recursos en este tipo de guías, así que si quieres agradecérnoslo puedes hacerlo dejando tan sólo 1 $ de propina desde PayPal:

¡Gracias!

Valora esta entrada

5/5 - (1 voto)

Deja un comentario