Diseño y Administración de Sistemas y Redes http://gsyc.es Curso 2007 2008
HTTP 1 HTTP Hypertext Transfer Protocol. Es el protocolo más habitual para servir páginas web. Protocolo cliente-servidor. Normalmente funciona sobre TCP. Normalmente en el puerto 80.
HTTP (cont.) 2 Web 1.0. Estática. 1994-1997 Tecnología asociada: HTML, GIF Las páginas web son documentos estáticos que se actualizan a mano Web 1.5. Dinámica. 1997-2003 Tecnología asociada: CGI, DHTML, ASP, CSS. Las páginas web son construidas dinámicamente a partir de una o varias bases de datos. Web 2.0. Colaborativa. 2003-Hoy Tecnología asociada: Ajax, DHTML, XML, Soap. Definición controvertida. Los usuarios se convierten en contribuidores. Publican las informaciones y realizan cambios en los datos.
HTTP (cont.) 3 Interacción cliente-servidor en HTTP El cliente abre una conexión TCP con el servidor. El cliente envía un mensaje de petición. El servidor responde con un mensaje de respuesta. El servidor cierra la conexión TCP. HTTP no mantiene estado (no hay información sobre las conexiones entre una petición y otra).
HTTP (cont.) 4 Un servidor HTTP puede escuchar en cualquier puerto Puertos del 1 al 1023: Bajos o Privilegiados. Solo el root puede atar procesos a estos puertos Puertos del 1024 al 65535: Altos o no Privilegiados. Cualquier usuario puede atar procesos a estos puertos El puerto por omisión es el 80
HTTP (cont.) 5 Formato de los mensajes Mensajes legibles (compuestos por ĺıneas de texto casi en inglés ): Línea inicial (diferente para petición y respuesta), terminada en CRLF. Cero o más ĺıneas de cabecera, cada una terminada en CRLF: Cabecera-X: Valor-X CRLF Línea en blanco (CRLF), también expresable como \r\n. En un teclado normalmente se genera pulsando intro. Cuerpo del mensaje (opcional). Además de CRLF, deberían tratarse adecuadamente ĺıneas terminadas en LF.
HTTP (cont.) 6 Línea inicial (peticiones) Especifica el recurso que se solicita, y qué se quiere de él: Nombre de método (GET, POST, HEAD). Camino de acceso (path) Versión de HTTP (siempre HTTP/x.x). Ejemplo: GET /directorio/otro/fichero.html HTTP/1.0 El servidor ignora a qué dirección IP o a qué nombre de dominio envió la petición el cliente
HTTP (cont.) 7 Proporciona información de estado: Línea inicial (respuestas) Versión de HTTP (siempre HTTP/x.x). Código numérico de estado. Código de estado en inglés. Códigos de estado: 1xx: Mensaje informativo. 2xx: Resultado exitoso (200 OK). 3xx: Redirección del cliente a otra URL (301 Moved permanently, 303 See Other). 4xx: Error en el lado del cliente (404 Not Found). 5xx: Error en el lado del servidor (500 Server Error).
HTTP (cont.) 8 Líneas de cabecera Mismo formato que las cabeceras de correo y News (RFC 822, sección 3). HTTP/1.0: 16 cabeceras, ninguna obligatoria. HTTP/1.1: 46 cabeceras, Host: obligatoria en las peticiones (usada por los virtual hosts ). Se recomienda incluir en las peticiones al menos: From: (dirección de correo). User-Agent: (ej: Mozilla/4.7). Se recomienda incluir en las respuestas al menos: Server: (ej: Apache/1.3). Last-Modified: (fecha GMT, usado por las caches).
HTTP (cont.) 9 Cuerpo del mensaje En las respuestas contiene el recurso pedido o texto explicando un error. En las peticiones contiene datos de usuario o ficheros para subir. Si hay cuerpo, normalmente hay algunas cabeceras relativas a él: Content-Type : tipo MIME de los datos (ej: text/html, image/png). Content-Length : número de bytes en el cuerpo.
HTTP (cont.) 10 Petición http 1.0 mínima : Ejemplo (GET, petición) koji@mazinger:~$ telnet pantuflo.es 80 GET / HTTP/1.0\r\n \r\n (El telnet no forma parte de la petición, equivale al navegador web)
HTTP (cont.) 11 Petición http 1.0 completa GET /~jgb/test.html HTTP/1.0\r\n Connection: Keep-Alive\r\n User-Agent: Mozilla/4.07 [en] (X11; I; Linux 2.2.15 i586; Nav)... Host: gsyc.escet.urjc.es\r\n Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, i... Accept-Encoding: gzip\r\n Accept-Language: en\r\n Accept-Charset: iso-8859-1,*,utf-8\r\n \r\n
HTTP (cont.) 12 Ejemplo (GET, respuesta) HTTP/1.1 200 OK\r\n Date: Tue, 23 Jan 2001 12:44:27 GMT\r\n Server: Apache/1.3.9 (Unix) Debian/GNU\r\n Last-Modified: Tue, 23 Jan 2001 12:39:45 GMT\r\n ETag: "19e89f-22-3a6d7b91"\r\n Accept-Ranges: bytes\r\n Content-Length: 34\r\n Keep-Alive: timeout=15, max=100\r\n Connection: Keep-Alive\r\n Content-Type: text/html\r\n \r\n <html>\nesto es una prueba\n</html> >.
HTTP (cont.) 13 Métodos HEAD y POST HEAD: POST: Igual que un GET, pero sólo pide las cabeceras. Se pueden consultar las características sin bajarse el fichero. Hay datos en el cuerpo (que se suben al servidor). El URI pedido es normalmente el programa que trata los datos enviados. También se pueden enviar datos con un GET (codificándolos en el URL pedido).
HTTP (cont.) 14 Representante (proxy) HTTP Intermediario entre un cliente y un servidor. Es por lo tanto a la vez cliente y servidor. Usos: cortafuegos, caches, etc. Las peticiones a una proxy incluyen la URL completa en la primera ĺınea del mensaje de petición. Pueden encadenarse varias proxies. Ejemplo de petición a una proxy: GET http://gsyc.escet.urjc.es/index.html HTTP/1.0 Para el exterior, todos los usuarios que están detrás de un proxy comparten la dirección IP
HTTP (cont.) 15 Los proxys son buenos Para el usuario porque reducen la latencia Para el ISP del usuario, porque ahorra tráfico Para el servidor, porque ahorra tráfico Para el resto de Internet (tocan a más) Proporcionan anonimato Los proxys pueden plantear problemas Cachés desfasadas Algunos servidores pueden pensar erróneamente que 1 IP = 1 usuario Límites en las descargas Una IP en una lista negra puede perjudicar a muchos usuarios inocentes...
HTTP (cont.) 16 Es una evolución de HTTP 1.0. HTTP 1.1 Facilidades específicas para máquinas virtuales (virtual hosts). Codificación por racimos, para respuestas dinámicas (envío antes de saber el tamaño total). Uso de conexiones persistentes que permiten varias transacciones sucesivas (se evitan establecimientos de conexión). Facilidades específicas para caches ( If-Modified-Since, If-Unmodified- Since ).
HTTP (cont.) 17 Virtual hosts En HTTP 1.1 la petición incluye el nombre de host. De esta forma un mismo servidor puede albergar varios hosts virtuales Si un servidor recibe una petición sin Host, debe devolver un mensaje de error (400 Bad Request). Los servidores también han de aceptar primeras ĺıneas de petición con URLs completas, en lugar de caminos (será lo habitual en versiones futuras). Ejemplo de petición http 1.1 mínima : koji@mazinger:~$ telnet pantuflo.es 80 GET /dir/index.html HTTP/1.1\r\n Host: pantuflo.es\r\n \r\n
HTTP (cont.) 18 Conexiones persistentes Abrir y cerrar una conexión TCP tiene un coste relativamente alto HTTP 1.1. usa por omisión conexiones persistentes Permiten que varias peticiones y respuestas sean transferidas usando la misma conexión TCP. Si se envía la cabecera Connection: close, el servidor cerrará la conexión después de cada respuesta. Un servidor puede cerrar la conexión antes de enviar todas las respuestas. El servidor cerrará las conexiones inactivas pasado un plazo (ej: 10 segundos).
Apache 19 Apache Servidor web. Responde a peticiones HTTP 1.0/1.1 (referidas a URLs), devolviendo los documentos alojados en la máquina Inicialmente, 1995 basado en el httpd 1.3 de la NCSA (National Center for Supercomputing Applications). Era el servidor más popular. El nombre es una deformación de patches (parches) Primer proyecto de la fundación Apache, que desarrolla numerosas tecnologías orientadas al servidor Software libre, distribuido bajo la Apache Software License. Disponible para diversos Unix (Linux, BSD...), Microsoft Windows, Mac OS
Apache (cont.) 20 Usado en el 50 % de los web sites mundiales (Netcraft Web Server Survey, mayo 2008) Es la base del conjunto de aplicaciones LAMP (Linux, Apache, MySQL, Perl/PHP/Python) Se distribuye con Oracle Database, IBM WebSphere application server, Mac OS X WebObjects, entre otros
Apache (cont.) 21 http://news.netcraft.com/archives/web_server_survey.html
Apache (cont.) 22 Versiones de Apache Existen dos ramas o versiones principales: Apache 1.3. Año 2000. Apache 2.0. Abril 2002. Añade multithreading (hoy ya no es ventaja), filtros. API mejorada que facilita la programación de módulo. Desaparecen las directivas Port y BindAddress. (Solo se mantiene Listen) Apache 2.0 tardó mucho tiempo en reemplazar a Apache 1.3, y aún no lo ha hecho por completo. En el año 2008 se siguen desarrollando actualizacones de seguridad para Apache 1.3
Apache (cont.) 23 Instalación de Apache en Debian En debian, la instalación de apache es muy sencilla gracias a apt. apt-cache search apache Muestra todos los paquetes conocidos que contienen apache. Mejor hacer: apt-cache search apache --names-only grep -v lib Instalación (como root): aptitude install apache2 Instala las librerias, ejecutables, directorios y ficheros de configuración necesarios.
Apache (cont.) 24 Arranque de Apache Se puede iniciar y detener como cualquier demonio /etc/init.d/apache2 [stop start reload} También puede hacerse con apache2ctl, que incluye funcionalidad adicional /usr/sbin/apache2ctl <command> start - start httpd stop - stop httpd restart - restart httpd fullstatus - dump a full status screen status - dump a short status screen graceful - do a graceful restart configtest - do a configuration syntax test graceful restart: Reiniciar el servidor cerrando ordenadamente las peticiones pendientes
Apache (cont.) 25 Ficheros y Directorios por omisión en Debian para Apache 2.x Configuración /etc/apache2/apache2.conf a Tras cambiar este fichero hay que reiniciar el demonio o releer el fichero Raíz de documentos (DocumentRoot) /var/www CGIs /usr/lib/cgi-bin Logs /var/log/apache2/error.log /var/log/apache2/access.log a En apache 1.x se usaba /etc/apache/httpd.conf, /etc/apache/srm.conf y /etc/apache/access.conf
Apache (cont.) 26 Definición de Host Virtuales /etc/apache2/sites-available (Un fichero por cada host virtual) Host Virtuales Activos /etc/apache2/sites-enabled (Para activar un host virtual, se incluye aquí un enlace simbólico a su fichero de definición) Puertos en los que se atienden peticiones /etc/apache2/ports.conf Para otras versiones, googlear Distros Default Apache Layout
Directivas de Apache 27 Directivas de Apache La configuración de apache se hace mediante directivas. (Insensibles a mayúsculas). La lista completa está en la documentación online. googlear: apache versión directives (p.e. apache 2.2 directives) El manual describe cada directiva y en qué contexto(s) puede aparecer. Se pueden usar la almohadilla para que una ĺınea sea un comentario, pero solo en la primera columna
Directivas de Apache (cont.) 28 Los contextos posibles son server config virtual host directory files location.htaccess #Afectan a todo el servidor #Afectan al host virtual #Afectan a un directorio (del host) #Afectan a los ficheros con cierto nombre #Afectan a un directorio (del web) #Afectan a un directorio y sus subdirectorios
Directivas de Apache (cont.) 29 Contexto server config Las directivas en este contexto afectan a todo el servidor. Se ubican en ĺıneas de /etc/apache2/apache2.conf que no están dentro de ningún bloque Contexto virtual host Las directivas dentro de un bloque VirtualHost afectan solo al host virtual <VirtualHost host [:puerto]> < /VirtualHost host>
Directivas de Apache (cont.) 30 <VirtualHost www.discosmanzana.com> ServerName www.discosmanzana.com DocumentRoot /var/www/discosmanzana ServerAdmin webmaster@discosmanzana.com </VirtualHost> <VirtualHost www.libreriamazonas.com> ServerName www.libreriamazonas.com DocumentRoot /var/www/libreriamazonas ServerAdmin webmaster@libreriamazonas.com </VirtualHost>
Directivas de Apache (cont.) 31 Contexto Directory Las directivas dentro de un bloque Directory afectan solo a los ficheros de ese directorio y no al DocumentRoot completo <directory mi-directorio> </directory> mi-directorio tiene que ser path absoluto, no relativo al DocumentRoot Ejemplo <Directory /var/www/discosmanzana/proveedores> options +indexes </Directory> No puede usarse dentro de un fichero.htaccess
Directivas de Apache (cont.) 32 Contexto files <Files mi-fichero> directiva_1 directiva_2 </Files> Se pueden usar comodines o regexps con FilesMatch <FilesMatch mi-fichero> </FilesMatch> Los bloques Files y FilesMatch pueden usarse dentro de un fichero.htaccess
Directivas de Apache (cont.) 33 Contexto Location En un servidor muy sencillo, la estructura de directorios del host coincide con la estructura de directorios que percibe el cliente web. En este caso, Directory equivale a Location Usando la directiva alias, ambas estructuras de directorios son distintas, con Location especificamos un directorio tal y como lo ve el cliente web Las directivas dentro de un bloque Location afectan a los ficheros dentro de esa URL <Location mi-url> </Location> mi-url es una dirección relativa al DocumentRoot LocationMatch permite usar comodines y regexp
Directivas de Apache (cont.) 34 Ejemplo <Location /proveedores> options +indexes </Location> No puede usarse dentro de un fichero.htaccess Para proteger un directorio, es mucho más seguro usar Directory que Location (podemos confundirnos con los alias...)
Directivas de Apache (cont.) 35 Contexto.htaccess Estas directivas no están centralizadas en /etc/apache2/apache2.conf sino distribuidas en ficheros.htaccess Puede haber uno en cada directorio, afecta solo a este directorio Normalmente apache2.conf debería editarlo el root o el webmaster, mientras que cada usuario en sus directorios puede editar sus.htaccess Ventajas del fichero.htaccess: No hay que reiniciar apache Un usuario puede tener permiso para modificar su propio.htaccess pero no apache2.conf Inconvenientes: Cada vez que se sirve un documento hay que procesar el.htaccess, así como los.htaccess que pueda haber en sus directorios padre
Directivas de Apache (cont.) 36.htaccess afecta a un directorio y a sus directorios, por tanto el comportamiento de un directorio depende de su.htaccess, de el de su directorio padre, abuelo... En caso de discrepancia prevalece el.htaccess local
Directivas de Apache (cont.) 37 Las directivas en.htaccess pueden contradecir a las directivas en apache2.conf? Depende de lo que diga AllowOverride Si aparece AllowOverride All, o si no parece nada, sí pueden contradecir Por omisión, Debian emplea AllowOverride None, que ignora completamente los.htaccess (no leer estos ficheros supone además cierto ahorro) Esta directiva permite un ajuste fino, que unas directivas se puedan contradecir y otras no
Directivas de Apache (cont.) 38 Algunas directivas Server Config importantes En apache2.conf aparecen algunas directivas que establecen la ubicación de ciertos ficheros y directorios. Vienen adaptadas a Debian, es raro tener que modificarlas ServerRoot "/etc/apache2" LockFile /var/lock/apache2/accept.lock ErrorLog /var/log/apache2/error.log Include /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf Include /etc/apache2/ports.conf Include /etc/apache2/sites-enabled/
Directivas de Apache (cont.) 39 Normalmente será necesario que el nombre de máquina coincida con la configuración del DNS ServerName localhost DocumentRoot indica dónde están los ficheros a servir DocumentRoot /var/www La dirección de correo del administrador aparece en algunos informes ServerAdmin webmaster@localhost El proceso que escucha en el puerto 80 debe pertenecer al root. Este pasa las peticiones a otros procesos, hijos suyos, que pertenecen a un usuario con menos privilegios. User www-data Group www-data
Directivas de Apache (cont.) 40 Apache adapta el número de procesos a la carga. Crea nuevos procesos bajo demanda y controla que queden algunos libres para picos de carga. En sitios web sencillos no cambiaremos los valores por omisión StartServers 5 Número de procesos iniciales. MinSpareServers 5 Número mínimo de procesos libres. MaxSpareServers 10 Números máximo de procesos libres. MaxClients 150 Número máximo de clientes servidos simultaneamente. MaxRequestsPerChild 100 Número de peticiones antes de matar el proceso (para paliar memory leaks)
Directivas de Apache (cont.) 41 Control de conexiones persistentes Según el campo Connection: y la versión del protocolo HTTP, las conexiones son persistentes o no Las conexiones persistentes son ventajosas para el cliente, pesadas para el servidor KeepAlive on/off Se aceptan conexiones persistentes MaxKeepAliveRequests 5 Max. numero de peticiones que mantienen la conexión. KeepAliveTimeout 5 Tiempo max (segs) entre peticiones.
Directivas de Apache (cont.) 42 Control de IPs y puertos de escucha Un mismo host puede ejecutar varios servidore apache simultáneamente (de distintos usuarios o con distintas configuraciones) Un mismo host suele tener varios interfaces de red Interfaz lo con dirección 127.0.0.1, asociada al nombre localhost Interfaz eth0, eth1, wlan0, ppp0,... Cada interfaz tiene una IP. (Puede tener más, aunque no es muy frecuente) Por defecto, apache escucha en el puerto 80 de todas las direcciones IP de todos los interfaces de la máquina Listen 80 Listen 1000 Escucha en los puertos 80 y 100 de todos los interfaces
Directivas de Apache (cont.) 43 Listen 127.0.0.1:80 Listen mazinger:1000 Escucha solamente en el puerto 80 de 127.0.0.1 (debería estar asociado a localhost) y en el puerto 1000 de mazinger Pueden usarse direcciones IP o nombres de máquinas (si se resuelven en /etc/hosts o en el DNS) La directiva Listen sustituye a las directivas obsoletas Port y BindAddress. El ámbito de Listen es server config. Debemos indicar con Listen los puertos (y si queremos, también las direcciones) de todas las peticiones que atenderemos. Posteriormente, en cada máquina virtual especificaremos interfaz y puerto (si procede)
Directivas de Apache (cont.) 44 Host Virtuales Si para distinguir un host de otro hay que considerar el nombre que figura en la petición, debe incluirse la directiva NameVirtualHost. (Si los hosts se distinguen por la IP o el puerto, no hace falta) Fichero /etc/apache2/sites-avalaible/discosmanzana NameVirtualHost 213.37.48.21 <VirtualHost www.discosmanzana.com> ServerName www.discosmanzana.com DocumentRoot /var/www/discosmanzana ServerAdmin webmaster@discosmanzana.com </VirtualHost>
Directivas de Apache (cont.) 45 Fichero /etc/apache2/sites-avalaible/libreriamazonas <VirtualHost www.libreriamazonas.com> ServerName www.libreriamazonas.com DocumentRoot /var/www/libreriamazonas ServerAdmin webmaster@libreriamazonas.com </VirtualHost> Directorio /etc/apache2/sites-enabled/libreriamazonas 000-default -> /etc/apache2/sites-available/default 010-discosmanzana -> /etc/apache2/sites-available/discosmanzana 020-libreriamazonas -> /etc/apache2/sites-available/libreriamazonas
Directivas de Apache (cont.) 46 Otras directivas alias /directorio2 /var/www-bis/directorio2 hace que http://mihost/directorio2 se corresponda con /var/www-bis/directorio2 y no con DocumentRoot (/var/www/directorio2) UserDir public_html Nombre del directorio añadido al home del usuario user, cuando se recibe una petición a ~user DirectoryIndex index.html index.htm index.cgi Si el cliente no solicita un fichero sino un directorio, se buscan estos ficheros, en este orden
Directivas de Apache (cont.) 47 Directiva Options Una directiva algo peculiar, permite activar o desactivar opciones variadas. Seguramente sería más lógico si cada opción fuera una directiva independiente. Puede aparecer en cualquier contexto Las más importantes: All - Todas las opciones están activadas None - Ninguna opción está activada ExecCGI - Se permite la ejecución de CGIs Indexes - Si el usuario pide un directorio que no contiene lo indicado por DirectoryIndex (index.html, index.htm, index.cgi...) se muestra el contenido del directorio MultiViews - Se negocian formatos de datos o idiomas FollowSymLinks - Se siguen los enlaces simbólicos
Directivas de Apache (cont.) 48 SymLinksIfOwnerMatch - Se siguen los enlaces simbólicos solo si el dueño del recurso apuntado es el dueño del enlace Ejemplo. Habilitar los índices, deshabilitar los enlaces simbólicos: options +Indexes -FollowSymLinks Si no hay directiva Options, se activan todas las opciones Si hay directiva Options, solo se activan las opciones indicadas expĺıcitamente. El resto se desactiva
Directivas de Apache (cont.) 49 Control de acceso a directorios Order, Allow y Deny pueden estar en los contextos directory o.htaccess Order deny,allow Allow from 193.147.71.0/24 Deny all Solo pueden conectarse los clientes desde la red 193.147.71 Order allow,deny Allow from 193.147.71.0/24 Deny all Nadie puede conectarse Order allow,deny Allow from all Deny from hackers-malvados.com Se admiten conexiones desde cualquier cliente, excepto desde hackers-malvados.com
Directivas de Apache (cont.) 50 La configuración por omisión es order deny,allow Otros ejemplos: <Directory /var/www/discosmanzana/proveedores> order deny,allow allow from 193.147.71.0/255.255.255.0 deny all </Directory> <Directory / > Options +SymLinksIfOwnerMatch AllowOverride None Deny from all </Directory>
Directivas de Apache (cont.) 51 Supongamos que Orden de Aplicación de las Directivas Una directiva dice que no se pueden ver los ficheros secreto.* Otra directiva dice que sí se pueden ver los ficheros en mi_carpeta Qué pasa con \mi_carpeta\secreto? Es necesario conocer el orden en que se aplican las directivas. La última aplicada es la de más peso: 1. Directory sin regexp ni comodines..htaccess sin regexp ni comodines 2. DirectoryMatch 3. Files y FilesMatch 4. Location y LocationMatch
Directivas de Apache (cont.) 52 Si hay una directiva para un directorio y otra para uno de sus subdirectorios, se aplica primero la del padre y luego la del hijo (prevalece el hijo) Si hay una directiva para un location y otra para uno de sus subdirectorios, se aplica primero la del padre y luego la del hijo (prevalece el hijo) En caso de empate, se aplican en el orden en que fueron declaradas Las directivas dentro de un VirtualHost se aplican despues que las de fuera del VirtualHost (de nuevo prevalece lo local)