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é 2030-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 www.mydomain.com
ServerAlias www.mydomain.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.