Documentos de Académico
Documentos de Profesional
Documentos de Cultura
servidor HTTP Apache es un servidor HTTP de código abierto para
plataformas Unix (BSD, GNU/Linux, etcétera), Windows y otras, que
implementa el protocolo HTTP/1.1 (RFC 2616) y la noción de sitio virtual.
Cuando comenzó su desarrollo en 1995 se basó inicialmente en código del
popular NCSA HTTPd 1.3, pero más tarde fue reescrito por completo. Su
nombre se debe a que originalmente Apache consistía solamente en un
conjunto de parches a aplicar al servidor de NCSA. Era, en inglés, a
patchy server (un servidor parcheado).
¿Quién usa Apache?
Apache es el servidor web mas usado en el mundo actualmente Esta
información puede corroborarse en
http://news.netcraft.com/archives/web_server_survey.html
Comparación de Web Servers
Se puede consultar una lista de comparación de servidores web en
Wikipedia:
http://en.wikipedia.org/wiki/Comparison_of_web_servers
Versión 2.x
El núcleo 2.x de Apache tiene varias mejoras clave sobre el núcleo de
Apache 1.x. Estas mejoras incluyen threads de UNIX, mejor soporte para
plataformas no Unix (como Windows), un nuevo API, y soporte de Ipv6
Módulos
La arquitectura del servidor Apache es muy modular. El servidor consta de
un sección core y mucha de la funcionalidad que podría considerarse
básica para un servidor web es provista por módulos. Algunos de estos
son:
●
mod_ssl Comunicaciones Seguras vía TLS.
●
mod_rewrite Reescritura de direcciones servidas (php a html)
●
mod_auth_ldap Permite autentificar usuarios contra un servidor
LDAP.
●
mod_proxy_ajp Conector a Jakarta Tomcat (Java, servlets y JSP).
El servidor de base puede ser extendido con la inclusión de módulos
externos entre los cuales se encuentran:
●
mod_perl Páginas dinámicas en Perl.
●
mod_php Páginas dinámicas en PHP.
●
mod_python Páginas dinámicas en Python.
●
mod_ruby Páginas dinámicas en Ruby.
●
mod_aspdotnet Páginas dinámicas en .NET_de_Microsoft.
Archivos de configuración
●
/etc/apache2/apache2.conf
●
/etc/apache2/httpd.conf
●
/etc/apache2/sitesavailables
●
/etc/apache2/sitesenabled
●
/etc/apache2/modsavailables
●
/etc/apache2/modenabled
●
/etc/apache2/ports.conf
Directivas: Conjunto de “Instrucciones que definen el comportamiento del
servidor Apache. Algunas de estas directivas son:
●
NameVirtualHost addr[:port]
Designa una dirección IP para usar hosting virtual basado en nombres
●
<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>
Contiene las directivas que se aplican solo a un nombre de host específico
o dirección IP
●
DocumentRoot /una/ruta
Directorio principal que contiene la estructura de directorios visible desde la
web
●
Alias URLpath filepath|directorypath
Mapea URLs a ubicaciones en el sistema operativo. La directiva Alias
permite que los documentos sean guardados en otros directorios
distintos a los guaradso en DocumentRoot.
Ejemplo: Alias /image /ftp/pub/image
●
ScriptAlias URLpath filepath|directorypath
Similiar a la directiva Alias excepto que marca el directorio destino como un
directorio que contiene scripts CGI que serán procesados por el módulo
mod_cgi
Ejemplo: ScriptAlias /cgibin/ /web/cgibin/
<Directory directorypath> ... </Directory>
Engloba a un grupo de directivas que se aplicarán solamente al directorio
del sistema de ficheros especificado y a sus subdirectorios
UserDir directoryfilename
Directiva que indica en cual directorio buscar las páginas de los usarios del
sistema
Ejemplo: UserDir public_html
ErrorLog filepath|syslog[:facility]
La directiva ErrorLog directive confgura el archivo donde se guardaran los
errores que encuentre el servidor.
Ejemplo: ErrorLog /var/log/httpd/error_log
Iniciando el Servicio
Para iniciar el servidor Apache, se pueden emplear 3 formas:
apache2:
●
Es el programa que inicia el servidor HTTP Apache. Está diseñado para
correr como un proceso demonio standalone. Cuando se inicia el servidor de
esta forma, se creará un pool de procesos hijos para manejar las peticiones.
Para detener el servicio se debe enviar la señal TERM al proceso inicial (el
padre)
/etc/init.d/apache2 (start/stop/restart/reload)
●
Este es un script que invoca al programa apache2, o al programa apache2ctl
para iniciar, detener o recargar configuraciones del servidor Apache.
apache2ctl
●
Herramienta para controlar el servidor Apache, diseñada para ayudar al
administrador a manejar el demonio apache2. Algunas de las opciones son:
D name : define a name for use in <IfDefine name> directives
d directory : specify an alternate initial ServerRoot
f file : specify an alternate ServerConfigFile
C "directive" : process directive before reading config files
c "directive" : process directive after reading config files
v : show version number
V : show compile settings
l : list compiled in modules
L : list available configuration directives
S : a synonym for t D DUMP_VHOST
Hosting Virtual en Apache
●
El término Hosting Virtual se refiere a hacer funcionar más de un sitio
web (tales como www.company1.com y www.company2.com) en una
sola máquina.
●
Los sitios web virtuales pueden estar "basados en direcciones IP", lo que
significa que cada sitio web tiene una dirección IP diferente, o "basados
en nombres diferentes", lo que significa que con una sola dirección IP
están funcionando sitios web con diferentes nombres (de dominio). El
hecho de que estén funcionando en la misma máquina física pasa
completamente desapercibido para el usuario que visita esos sitios web.
Notas:
●
Crear configuraciones de hosts virtuales en su servidor Apache no hace
que mágicamente se creen las entradas del DNS para esos servidores
●
Usted debe configurar el servidor de DNS, para que esos nombres de
host resuelvan a una dirección IP, de lo contrario nadie podrá ver su sitio
web
Host Virtuales Basados en Nombres
●
Con este tipo de hosting solo se necesita configurar el servidor de DNS
para que mapee cada dominio a una dirección IP, y luego configurar el
servidor APACHE para que reconozca cada uno de estos dominios.
●
Podemos tener un servidor con una única dirección IP, y configurar el
servidor de DNS con múltiples dominios apuntando a esa única máquina.
Por ejemplo, tener un servidor para los dominios www.dominio1.org y
www.dominio2.org.
●
El hecho de que estén alojados varios sitios web en un mismo servidor
no será notado por el usuario final.
Ejemplo:
NameVirtualHost *
<VirtualHost *>
DocumentRoot /var/www/dominio1
ServerName www.dominio1.org
</VirtualHost>
<VirtualHost *>
DocumentRoot /var/www/dominio2
ServerName www.dominio2.org
</VirtualHost>
Host Virtuales Basados en IP
●
Se usa cuando un servidor posee mas de una dirección IP, y se quiere
tener un servidor para www.dominio5.org y www.dominio6.org en
diferentes direcciones IP.
●
Los hosts basados en IP requieren de una dirección IP por cada servidor
virtual. Esto se puede conseguir haciendo que la máquina tenga varias
conexiones físicas a la red, o a través de interfaces virtuales (IP alias)
Ejemplo:
NameVirtualHost 192.168.2.5
<VirtualHost 192.168.2.5>
DocumentRoot /var/www/dominio5
ServerName www.dominio5.org
</VirtualHost>
NameVirtualHost 192.168.2.6
<VirtualHost 192.168.2.6>
DocumentRoot /var/www/dominio6
ServerName www.dominio6.org
</VirtualHost>
Hosting virtual basado en nombres vs Hosting virtual basado en IP
En general, se debe usar servidores virtuales basado en nombre a menos
que se tenga una razón específica para usar servidores basado en IP.
Algunas de estas razones pueden ser.
●
Navegadores antiguos que no sean compatibles con las peticiones HTTP
requeridas para el manejo de servidores virtuales por nombre.
●
Los servidores virtuales basado en nombres no pueden ser usados con
servidores SSL, dado la naturaleza del protocolo SSL.
●
Algunos sistemas operativos y equipos de red implementan técnicas de
manejo de ancho de banda que no pueden diferenciar entre hosts a menos
de que estén en direcciones IP separadas.
mod_auth
Este módulo permite el usar de autenticación básica HTTP para restringir
el acceso usando un archivo de contraseñas
Ejemplo:
●
Crear el archivo de contraseñas
htpasswd c Filename username
Incluir las siguientes directivas a la sección Directory para el directorio a
restringir:
<Directory /var/www/dominio1/mods>
AuthType Basic
AuthName "Area privada"
AuthUserFile /etc/apache2/passwd.db
AuthAuthoritative on
Require validuser
</Directory>
Nota: También se pueden poner las opciones en el archivo .htaccess del
directorio a restringir.
Restringiendo el acceso a través del archivo .htacces
También se pueden poner las directivas en el archivo .htaccess del
directorio a restringir. En este caso solo sería:
AuthType Basic
AuthName "Area privada"
AuthUserFile /etc/apache2/passwd.db
AuthAuthoritative on
Require validuser
RewriteEngine On
# let the server know that we were reached via /xyz and not
# via the physical path prefix /abc/def
RewriteBase /xyz
# now the rewriting rules
RewriteRule ^oldstuff\.html$ newstuff.html