Instalar y configurar Apache HTTP server

Apache HTTPD

Apache HTTP es un servidor web de propósito general diseñado para lograr un balance entre flexibilidad, portabilidad y rendimiento. Apache HTTP presenta una arquitectura modular la cual permite extender las funcionalidades básicas mediante la selección de un conjunto de módulos: los módulos son compilados como Dynamic Shared Objects (DSO) y prodrán activarse y desactivarse a través de la directiva LoadModule.

Apache HTTP es usado para servir contenido estático y dinámico (mod_php, mod_python, mod_ruby, mod_perl), es multiplataforma (UNIX, GNU/Linux, BSD, Windows), compatible con el protocolo HTTP/1.1 y https (versión segura del protocolo http). Otras de las características son: implementación de sitios virtuales , reescritura de url (mod_rewrite), diferentes tipos de autenticación (básica, digest, dbm, dbd, ldap), compresión de contenido web (mod_deflate, mod_gzip).

Instalar Apache HTTP

# yum -y install httpd

Iniciar el servidor web

# systemctl start httpd

Comprobar que el servidor está funcionando

# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since mié 2016-06-01 17:07:42 EDT; 7min ago
   ...

Reiniciar el servidor web

# systemctl restart httpd

Recargar/Refrescar configuraciones

# systemctl reload httpd

Detener el servicio

# systemctl stop httpd

Saber si el servicio inicia automáticamente

# systemctl is-enabled httpd
disabled

Iniciar el servicio automáticamente

Esto evitará que deba iniciar el servicio de forma manual despúes de reiniciar el servidor.

# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

Editar el fichero de configuración

# vim /etc/httpd/conf/httpd.conf

Algunas directivas para mejorar la seguridad y el rendimiento del servidor

ServerSignature Off
SeverTokens ProductOnly
HostnameLookups Off
<Directory />
   Options -Indexes -ExecCGI -Includes FollowSymLinks
   # no htaccess por defecto
   AllowOverride None
</Directory>

ServerSignature: Añade un pie de página a los documentos generados por el servidor (mensajes de error, listados de directorios, modinfo) un mensaje generado puede ser:

Apache/2.4.6 (CentOS) PHP/5.4.16 Server at 192.168.0.6 Port 80

Esta directiva solo debe activarse si el servidor es parte de una cadena de proxies con el objetivo de determinar cual servidor es el que esta retornando un mensaje de error, también puede activarse si está usando Apache como servidor de ficheros ya que el riesgo de seguridad es mínimo.

SeverTokens: Cuando su valor es Full esta directiva envía en las cabeceras de respuesta información sobre el servidor web, los módulos instalados y sistema operativo, ejemplo de un mensaje cuando el valor es Full.

Apache/2.4.6 (CentOS) PHP/5.4.16

Por eso es recomendable establecer su valor a ProductOnly con el objetivo de dar la menor cantidad de información posible en este caso solo sería:

Apache

HostnameLookups: Si está en On el servidor realiza una consulta de DNS reverso para determinar el nombre de la computadora o dispositivo cliente. El valor de On suele ser útil si lleva su propio sistema de estadística y desea conocer de donde provienen sus visitas pero una mejor variante es establecer esta directiva en Off y usar: freegeoip.net .

Si se establece el valor de está directiva en Double entonces se hacen 2 consultas, la primera una consulta de DNS reverso y la segunda una consulta DNS normal con el objetivo de averiguar la dirección IP del host la cual, al menos una, debe casar con la dirección IP original. Sólo se debe usar este valor si autentica usuarios directamente contra el servidor web y desea añadir otro nivel de seguridad.

De modo general esta directiva debe estar en Off permitiendo que su servidor web tenga un mejor desempeño y rendimiento.

Options: Esta directiva controla que características están disponibles para un directorio en específico, en el ejemplo anterior establecemos la siguiente configuración:

* -Indexes: No mostrar el contenido de ningún directorio en caso de que el servidor web no encuentre el fichero establecido en DirectoryIndex.
* -ExecCGI: No permitir la ejecución de script cgi.
* -Includes: No permitir Server Side Include, para saber más puede consultar: Server Side Includes, Explicación de Server Side Includes o SSI, Introducción a los Server Side Includes
* FollowSymLinks: Permitir que el servidor web siga los enlaces simbólicos

La directiva AllowOverride establece que directivas podrán sobreescribirse desde el .htaccess en este caso hemos decidido desactivar el .htaccess para todos los directorios web, pudiéndose establecer, como veremos más abajo, para VirtualHost y directorios específicos. Tenga en cuenta que si habilita el .htaccess de forma global el servidor web buscará por cada directorio el fichero .htaccess, por ejemplo si su VirtualHost está apuntando a /var/www/dir1 y tiene la siguiente estructura de directorios:

/var/www/dir1/
└── dir2
    └── dir3

Y accede a dir3 el servidor web hará 3 accesos al sistema de ficheros buscando el fichero .htaccess

/var/www/dir1/.htaccess
└── dir2/.htaccess
    └── dir3/.htaccess

Otro elemento a tener en cuenta es si usa directivas del módulo mod_rewrite (RewriteCond, RewriteRule) dentro del fichero .htaccess, el servidor web interpretará y compilará cada expresión regular que exista cada vez que se lea el fichero .htaccess mientras que si lo hace en la configuración principal las expresiones regulares se compilan y se guardan para posteriores usos, también desde el punto de vista de seguridad el .htaccess introduce algunos riesgos ya que posibilita que un tercero sobreescriba una configuración sobre la cual ya no va a tener control.

De modo general es recomendable desactivar el uso de .htaccess siempre que Ud. tenga acceso a la configuración principal de su servidor web, pero si es necesario, por determinadas razones, entonces no olvide poner en la configuración principal del servidor web:

<Files ".ht*">
    Require all denied
</Files>

La configuración anterior denegará cualquier intento de ver el contenido de los fichero .htaccess y .htpasswd.

Mi recomendación final es que habilite el .htaccess siempre que sepa porque lo está haciendo, donde lo está haciendo y las consecuencias que puede ocacionar.

Creando sitios virtuales (VirtualHost)

Establecer la directiva NameVirtualHost

Si desea que su servidor responda a las peticiones por todas las interfaces de red disponibles establezca:

NameVirtualHost *:80

Para una dir IP especifica establezca:

NameVirtualHost IP:80

80 es el puerto en el cual el servidor web esta escuchando las peticiones

Crear el sitio virtual

<Virtualhost *:80>
        ServerName mi.dominio.com
        ServerAlias mi.dominio.es
        DirectoryIndex index.html index.php
        DocumentRoot /var/www/php-mvc
<Directory "/var/www/php-mvc">
        AllowOverride All
</Directory>
</virtualhost>

Nótese el uso de la directiva AllowOverride la cual habilita el uso de .htaccess para este sitio virtual así como la posibilidad de sobreescribir los valores para un conjunto de directivas, para más información: Ir a.

La directiva DirectoryIndex establece que fichero se van a servir por defecto (index.html, index.php) y así no tener que agregar index.php o index.html a cada url que pongamos en nuetro navegador.

La directiva DocumentRoot establece el directorio a partir del cual el servidor web buscará y servirá los ficheros solicitados.

La directiva ServerAlias es útil si tenemos más de una url apuntandando a nuestro sitio, un ejemplo son los sitios internacionalizados. Los dominios: mi.dominio.com y mi.dominio.es son entradas que primeramente debieron ser agregadas al servidor DNS.

Lecturas recomendadas

Video asociado al artículo




23 Comentarios

  1. Roberto

    Muy buen tutorial pero tengo un problema al momento de acceder al sitio web, he creado una pagina de prueba llamada prueba.htm la coloque en la caperta /var/www/html pero al momento de acceder desde el explorador “http://localhost/prueba.htm” me dice que no tengo permisos para acceder al servidor, que me puedes ayudar te lo agradecería muchas gracias!

    Responder
  2. sedlav

    Roberto, gracias por tu comentario, debes verficar que el usuario o grupo con que esta ejecutandose el apache tenga permisos de lectura sobre el fichero prueba.html, en CentOS / RHEL / Fedora el usuario y grupo del servidor apache es: apache

    Responder
  3. sedlav

    Si tienes habilitao el SELinux, debes verificar que el contexto del fichero sea httpd_sys_content_t, puedes ver el contexto de los ficheros o directorios usando ls -lZ fichero. También puedes mirar los logs del servidor apache para obtener más detalles sobre el error en CentOS / RHEL / Fedora se encuentran en /var/log/httpd/ y el log del sistema /var/log/messages

    Responder
  4. Roberto

    Muchas gracias ha sido de mucha ayuda, ya me funciono; pero ahora tengo otro problema, la pagina solo aparece en el mismo centos y en otra maquina con windows 7 en una red local, pero en la misma red local la maquina con xp no puede acceder al servidor? cualquier ayuda se los agradecerá muchas gracias!

    Responder
    1. sedlav

      Estas usando la IP del servidor, para acceder a la paǵina o una url, si estas usando una url entonces es probable que la maquina con xp no tenga bien configurado los DNS

      Responder
  5. Roberto

    Estoy usando la direccion ip del servidor, cuando hago ping de centos a xp si funciona, pero cundo hago ping de xp a centos no encuentra la ip, lo he probado deshabilitando el firewall y nada?

    Responder
  6. sedlav

    Puedes acceder a otro recurso de la red desde la maquina xp?

    Responder
  7. jesus carvajal

    hola instale apache en centos pero este no me muestra nada en la pagina web. aparece como si nada estuviera instalado, al hacer ping a la ip esta si responde de manera correcta. la instalacion la estoy haciendo sobre una vps.

    Responder
    1. sedlav

      Revisa el muro cortafuegos asi como el SELInux ademas asegurare de que el apache esta ejecutandose.

      Responder
      1. jesus carvajal

        ya lo hice y todo esta bien, he estado teniendo problemas con la vps primero cuando instalaba centos y apache no me los mostraba instalados, tengo sospechas de que sea algun bloqueo del proovedor, ya trate con ellos pero el servicio es unmaneged y no me solucionaron nada.

        Responder
  8. vicente

    disculpa ia tengo instalado centos pero a la hora que quiero abrir la pagina con el dominio no me aparece nada y si coloco la direccion ip si la abre como puedo configurar http

    Responder
    1. sedlav

      Debes configurar un VirtualHost y establecer la directiva ServerName a tu dominio tal y como se explica en la seccion: Crear el sitio virtual tambien debes tener en cuenta la directiva DocumentRoot

      Responder
  9. wilson gallego

    Buenos Días: tengo un servidor con centos 5.8 y zend core, él venía funcionando correctaemnte pero de un momento a otro dejó de mostrar la información de las páginas web alojadas allí, que servicio se pudo haber caído y cómo lo subo nuevamente

    Responder
    1. sedlav

      Wilson, varias pueden ser las causas por la que tu servidor web no este mostrando los ficheros de forma correcta no obstante te recomiendo que siga los siguientes pasos:

      1- Chequear si tu servidor web esta ejecutándose
      2- Revisar los ficheros logs de tu servidor web: acceso y error
      3- Chequear log general (/var/log/messages)

      Responder
  10. Felipe Gómez

    hola, estoy trabajando en una máquina virtual,en la versión minimal de CentOS, ya he instalado todo y el servicio dice estar funcionando, el problema es cuando trato de acceder desde mi maquina local, estoy accediendo por la dirección IP y no me está accediendo, podrías por favor iluminarme el camino de ¿qué estoy haciendo mal? de ante mano muchas gracias.

    Responder
  11. Felipe Gómez

    lo olvidaba, la versión de CentOS que estoy usando es la 6.4 y mi maquina trabaja con windows 8 , además estoy usando un bridge para la dirección ip de la máquina virtual.

    Responder
    1. sedlav

      Hola Felipe ante todo debes tener en cuenta que muchas veces cuando creas una maquina virtual tienes acceso desde la maquina virtual hacia afuera pero no viceversa o sea no puedes acceder a la misma pues el router interno de la herramienta de virtualización esta bloqueando el acceso a tu maquina virtual (Este el comprtamiento pro defecto para VirtualBox) por tanto es necesario cambiar la forma en que creas la interfaz de red de tu maquina virtual (En VirtualBox bastaria con cambiar de NAT a Bridge).

      Tambien debes mirar el /var/log/httpd/access.log, /var/log/httpd/error.log y /var/log/messages siempre dan pista de porque algo no esta funcionando como uno espera

      Responder
  12. Frank

    Buen día: Actualmente estoy trabajando con un servidor dinámico, con SO CentOS la configuración por defecto me sale con plesk. Como puedo hacer para quitar la configuración de Plesk y configurar nuevamente con apache.

    Responder
    1. sedlav (Publicaciones Autor)

      Hola Frank debes tener en cuenta que Plesk es un panel de control que te permite realizar tareas de administración (configurar sitios web, modificar registros dns, crear cuentas de correos, … ) en tu servidor o hosting vía web mientras que Apache es un servidor web (Apache no permite configurar las tareas anteriormente mencionadas). Ahora si lo que quieres es deshabilitar el panel de control, lo que no recomiendo pue asi siempre tendras esta opción disponible si algo falla, entonces debes asegurarte que la configuración del mismo reside en tu servidor por otro lado si el servidor te permite conectarte via ssh no necesitas deshabiliar el panel de control para realizar tareas de administración usando la consola

      Responder
      1. Frank

        Hola sedlav..! Muchas gracias por tu ayuda, el panel de control de plesk no lo quiero deshabitar aquí realizo tareas administrativas como lo indicas; en plesk cree una suscrición para mi dominio.com, base de datos, usuario acceso y tareas como copias de seguridad. Al entrar al directorio raíz de mi servidor, plesk me crea los archivos de configuración de mi servidor en etc/http/conf/plesk.conf.d creando un directorio virtual en var/www/vhosts/system/midominio.com y su configuración var/www/vhosts/system/midominio.com/conf/httpd.conf.
        Tengo acceso ssh para poder configurar mi servidor, necesito ayuda para generar la configuración de mi directorio virtual(var/www/vhosts/midominio.com/conf/include.conf).

        Responder
        1. sedlav (Publicaciones Autor)

          Hola Frank por lo que dices entiendo que tu dominio principal: dominio.com ya está habilitado con la siguiente configuración:

          – Fichero de configuración del VirtualHost: var/www/vhosts/system/midominio.com/conf/httpd.conf

          – Dir del VirtualHost (donde reside tu aplicación): var/www/vhosts/system/midominio.com

          Entonces supongo (ten en cuenta que nunca que he configurado servidores usando Plesk) que el objectivo del fichero var/www/vhosts/midominio.com/conf/include.conf es cargar modulos extras del apache que pudiera necesitar tu aplicación, de todos modos pongo un ejemplo para tu caso:

          <VirtualHost *:80>
          ServerName dominio.com
          # Si tu aplicación sirve php o html plano
          DirectoryIndex index.html index.php
          # Los caminos relativos se resuelven a partir del valor de la
          # directiva DocumentRoot definida en la configuración principal
          # del Apache
          DocumentRoot var/www/vhosts/system/midominio.com
          <Directory “var/www/vhosts/system/midominio.com”>
          # Necesario si usas .htaccess
          AllowOverride All
          </Directory>

          </VirtualHost>

          Si no resuelves no dudes en preguntarme pero para ayudarte mejor ponme la configuracion que tienes en var/www/vhosts/system/midominio.com/conf/httpd.conf y var/www/vhosts/midominio.com/conf/include.conf

          Responder
          1. Frank

            Hola sedlav. He tenido que instalar todo nuevamente CentOS 6.5, Plesk 12, PHP 5.4, httpd 2.2 (Apache)

            Entro al panel de Plesk lo único para realizar tareas administrativas.
            Cuando ingreso al directorio raíz del servidor apache no se genera la configuración, Plesk genera la configuración en una carpeta diferente
            etc/httpd/conf/plesk.conf.d/server.conf

            #ATTENTION!
            #
            #DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
            #SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.

            NameVirtualHost IP4:7080
            NameVirtualHost IP6:7080

            NameVirtualHost 127.0.0.1:7080
            NameVirtualHost IP4:7081
            NameVirtualHost IP6:7081

            NameVirtualHost 127.0.0.1:7081

            ServerName “miservidor.dominio.info”
            ServerAdmin “admin@dominio.com”

            DocumentRoot “/var/www/vhosts/default/htdocs”

            LogFormat “%a %l %u %t “%r” %>s %O “%{Referer}i” “%{User-Agent}i”” plesklog

            LogFormat “%a %l %u %t “%r” %>s %b “%{Referer}i” “%{User-Agent}i”” plesklog

            TraceEnable off

            ServerTokens ProductOnly

            AllowOverride “All”
            Options SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all

            php_admin_flag engine off

            php_admin_flag engine off

            AllowOverride All
            Options SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all

            php_admin_flag engine off

            php_admin_flag engine off

            Header add X-Powered-By PleskLin

            Include “/etc/httpd/conf/plesk.conf.d/ip_default/*.conf”

            ServerName “default”
            UseCanonicalName Off
            DocumentRoot “/var/www/vhosts/default/htdocs”
            ScriptAlias /cgi-bin/ “/var/www/vhosts/default/cgi-bin”

            SSLEngine off

            AllowOverride None
            Options None
            Order allow,deny
            Allow from all

            php_admin_flag engine on
            php_admin_flag safe_mode on
            php_admin_value open_basedir “/var/www/vhosts/default/htdocs:/tmp”

            php_admin_flag engine on
            php_admin_flag safe_mode on
            php_admin_value open_basedir “/var/www/vhosts/default/htdocs:/tmp”

            ServerName “default-IP4”
            UseCanonicalName Off
            DocumentRoot “/var/www/vhosts/default/httpsdocs”
            ScriptAlias /cgi-bin/ “/var/www/vhosts/default/cgi-bin”

            SSLEngine on
            SSLVerifyClient none
            SSLCertificateFile “/usr/local/psa/var/certificates/certRycdu6S”

            AllowOverride None
            Options None
            Order allow,deny
            Allow from all

            SSLRequireSSL

            php_admin_flag engine on

            php_admin_flag engine on

            ServerName “default-IP6”
            UseCanonicalName Off
            DocumentRoot “/var/www/vhosts/default/httpsdocs”
            ScriptAlias /cgi-bin/ “/var/www/vhosts/default/cgi-bin”

            SSLEngine on
            SSLVerifyClient none
            SSLCertificateFile “/usr/local/psa/var/certificates/certRycdu6S”

            AllowOverride None
            Options None
            Order allow,deny
            Allow from all

            SSLRequireSSL

            php_admin_flag engine on

            php_admin_flag engine on

            DocumentRoot “/var/www/vhosts/default/htdocs”
            ServerName lists
            ServerAlias lists.*
            UseCanonicalName Off

            ScriptAlias “/mailman/” “/usr/lib/mailman/cgi-bin/”

            Alias “/icons/” “/var/www/icons/”
            Alias “/pipermail/” “/var/lib/mailman/archives/public/”

            SSLEngine off

            Options FollowSymLinks
            Order allow,deny
            Allow from all

            DocumentRoot “/var/www/vhosts/default/htdocs”
            ServerName lists
            ServerAlias lists.*
            UseCanonicalName Off

            ScriptAlias “/mailman/” “/usr/lib/mailman/cgi-bin/”

            Alias “/icons/” “/var/www/icons/”
            Alias “/pipermail/” “/var/lib/mailman/archives/public/”

            SSLEngine on
            SSLVerifyClient none
            SSLCertificateFile “/usr/local/psa/var/certificates/certRycdu6S”

            Options FollowSymLinks
            Order allow,deny
            Allow from all

            RPAFproxy_ips IP4 [IP6]

            RPAFproxy_ips IP4 [IP6]

            RemoteIPInternalProxy IP4 IP6
            RemoteIPHeader X-Forwarded-For

            Pero crea un directorio virtual en var/www/vhosts/system/midominio.com/ Todo debe de dirigirse al directorio var/www/vhosts/midominio.com/
            ya que es donde esta alojada mi web.

            que puedo hacer para que esta configuración se genere en apache en lugar del directorio que crea plesk.
            Agradecería mucho la ayuda.

            Saludos

          2. sedlav (Publicaciones Autor)

            Hola Frank a partir de la version 2.6 del kernel puedes hacer los siguiente

            mount –bind olddir newdir o sea para tu caso puedes hacer:

            mount –bind var/www/vhosts/midominio.com var/www/vhosts/system/midominio.com

            y de esta forma el mismo contenido esta disponibles desde estos 2 caminos para hacerlo permanente editas el fstab y pones algo asi como:

            var/www/vhosts/midominio.com var/www/vhosts/system/midominio.com none rw,bind 0 0

            los caminos deben ser absolutos cuando lo pones el fstab

            Lo otro que puede hacer es editar directamente el fichero de config del Apache para ellos puedes averiguar de donde el httpd esta cargando su config con httpdctl -V y buscas el valor de HTTPD_ROOT=”/etc/httpd” y SERVER_CONFIG_FILE=”conf/httpd.conf” luego editas que el fichero /etc/httpd/conf/httpd.conf y agregas ahi tu NameVirtualHost y VirtualHost tal y como se especifica en el post y en mis comentarios.

            Saludos

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *