Documente Academic
Documente Profesional
Documente Cultură
Protocolo HTTP
2
Irontec – Curso Apache
Protocolo HTTP
● Elementos:
– Cliente=user agent: web browser, spider, wget, curl,...
– Servidor
– Intermediarios: Proxy, gateway, túnel
3
Irontec – Curso Apache
Protocolo HTTP
● Mensaje de petición:
– Línea de método de petición
– Líneas de cabecera de petición (de tipo XXX:YYY)
– <CR><LF> (Línea en blanco)
– Cuerpo (opcional)
● Mensaje de respuesta:
– Línea de código de estado
– Líneas de cabecera de respuesta (de tipo XXX:YYY)
– <CR><LF> (Línea en blanco)
– Cuerpo (opcional)
● Todas las líneas acaban en <CR><LF>
4
Irontec – Curso Apache
Protocolo HTTP
● Mensajes de petición
● Ej:
– GET / HTTP/1.1
– Host:
– User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US;
rv:1.8.1.12) Gecko/20080207 Ubuntu/7.10 (gutsy)
Firefox/2.0.0.12 Paros/3.2.13
– Accept: text/xml,text/plain;q=0.8,image/png,*/*;q=0.5
– Accept-Language: es-es,en-us;q=0.7,en;q=0.3
– Accept-Charset: UTF-8,*
● Otras líneas de cabecera:
– Keep-Alive, Proxy-Connection, Referer, Cookie, Content-
length,...
– Ref: http://en.wikipedia.org/wiki/List_of_HTTP_headers
5
Irontec – Curso Apache
Protocolo HTTP
Protocolo HTTP
● Mensajes de respuesta
● Ej:
– HTTP/1.1 200 OK
– Date: Thu, 27 Mar 2008 21:29:14 GMT
– Content-Type: text/html; charset=US-ASCII
– Server: AmazonS3
● Otras líneas de cabecera:
– ETag, Expires, Pragma, Vary, X-*
– Ref: http://en.wikipedia.org/wiki/List_of_HTTP_headers
7
Irontec – Curso Apache
Protocolo HTTP
● Codigos de estado
● Son los códigos devueltos por el servidor.
● Se agrupan en:
– 1xx Información
– 2xx Éxito
– 3xx Redirección
– 4xx Error de cliente
– 5xx Error de servidor
8
Irontec – Curso Apache
Protocolo HTTP
9
Irontec – Curso Apache
Protocolo HTTP
10
Irontec – Curso Apache
Protocolo HTTP
11
Irontec – Curso Apache
Protocolo HTTP
12
Irontec – Curso Apache
Protocolo HTTP
13
Irontec – Curso Apache
Protocolo HTTP
14
Irontec – Curso Apache
Introducción
http://www.apache.org
15
Irontec – Curso Apache
Introducción
16
Irontec – Curso Apache
Introducción
http://httpd.apache.org/docs/2.2/new_features_2_2.html
17
Irontec – Curso Apache
Introducción
18
Irontec – Curso Apache
Instalación
● Código fuente
● Paquete binario para la distribución Debian
GNU/Linux
19
Irontec – Curso Apache
http://apache.rediris.es/httpd/httpd-2.2.11.tar.gz
http://apache.rediris.es/httpd/httpd-2.2.11.tar.gz.asc
20
Irontec – Curso Apache
21
Irontec – Curso Apache
22
Irontec – Curso Apache
Por favor, decida su nivel de confianza en que este usuario
verifique correctamente las claves de otros usuarios (mirando
pasaportes, comprobando huellas dactilares en diferentes fuentes...)
1 = No lo sé o prefiero no decirlo
2 = NO tengo confianza
3 = Confío un poco
4 = Confío totalmente
5 = confío absolutamente
m = volver al menú principal
23
Irontec – Curso Apache
pub 1024D/311A3DE5 creado: 20051002 caduca: nunca uso: SCA
confianza: absoluta validez: desconocido
sub 2048g/A21CD598 creado: 20051002 caduca: nunca uso: E
[desconocida] (1). Ruediger Pluem <rpluem@apache.org>
Por favor, advierta que la validez de clave mostrada no es necesariamente
correcta a menos de que reinicie el programa.
24
Irontec – Curso Apache
25
Irontec – Curso Apache
26
Irontec – Curso Apache
27
Irontec – Curso Apache
29
Irontec – Curso Apache
30
Irontec – Curso Apache
31
Irontec – Curso Apache
32
Irontec – Curso Apache
http://es.wikipedia.org/wiki/.php
33
Irontec – Curso Apache
wget http://es2.php.net/get/php-5.2.9.tar.gz/from/es.php.net/mirror
● Comprobamos que la suma de integridad es correcta
con md5sum:
./configure –-with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql \
--with-gd
34
Irontec – Curso Apache
35
Irontec – Curso Apache
36
Irontec – Curso Apache
Configuración
39
Irontec – Curso Apache
Configuración
40
Irontec – Curso Apache
Configuración
41
Irontec – Curso Apache
Configuración
● Contextos de aplicación
– Servidor
– Host Virtual
– <Directory>,<Location>,<Files>,<Proxy>
– Fichero .htaccess
42
Irontec – Curso Apache
Configuración
<Directory /var/www/info/>
AllowOverride None
DirectoryIndex prueba.php
</Directory>
43
Irontec – Curso Apache
Configuración
44
Irontec – Curso Apache
Configuración
<Location /info>
Deny from All
</Location>
45
Irontec – Curso Apache
Configuración
<Files ~ "\.jpg$">
Deny from all
</Files>
46
Irontec – Curso Apache
Configuración
Configuración
Configuración
49
Irontec – Curso Apache
Configuración
Configuración
Configuración
# ulimit -n
1024
52
Irontec – Curso Apache
Configuración
53
Irontec – Curso Apache
Configuración
54
Irontec – Curso Apache
Configuración
http://httpd.apache.org/docs/2.2/mod/core.html#options
55
Irontec – Curso Apache
Configuración
56
Irontec – Curso Apache
Configuración
LimitRequestBody 102400
57
Irontec – Curso Apache
Configuración
58
Irontec – Curso Apache
Autenticación de usuarios
miguel:YXP3FBeNjIHDs
miguel:YXP3FBeNjIHDs
iker:g1Zy7z22KMSko
59
Irontec – Curso Apache
Autenticación de usuarios
AllowOverride AuthConfig
60
Irontec – Curso Apache
Autenticación de usuarios
61
Irontec – Curso Apache
Autenticación de usuarios
● Inconvenientes
– Cada acceso al directorio protegido hace una nueva
comprobación del nombre de usuario y contraseña. Esto
carga de forma considerable el servidor.
– Es útil para número reducido de usuarios.
62
Irontec – Curso Apache
VirtualHost
63
Irontec – Curso Apache
VirtualHost
64
Irontec – Curso Apache
VirtualHost
65
Irontec – Curso Apache
VirtualHost
66
Irontec – Curso Apache
VirtualHost
67
Irontec – Curso Apache
VirtualHost
● Dentro de <VirtualHost> es donde llevaremos a cabo
todas las configuraciones necesarias. Como mínimo se
recomienda:
ServerName mihost.com
ServerAlias www.mihost.com
DocumentRoot /var/www/info
● Con ServerName indicamos el nombre del VirtualHost.
Por lo tanto, cuando entremos con Firefox en
mihost.com estaremos accediendo realmente al
VirtualHost
● ServerAlias nos permite añadir distintos Alias al
dominio.
● DocumenRoot nos ayudará a especificar donde se
68
Irontec – Curso Apache
VirtualHost
69
Irontec – Curso Apache
Certificados
70
Irontec – Curso Apache
Certificados
● Introducción a la Criptografía
● Criptografía simétrica o de Clave Privada
● Criptografía de Clave Pública
● Resúmenes o Hashes
● Firmas Digitales
● Certificados
71
Irontec – Curso Apache
Certificados
Certificados
● Certificados
● Información que contiene un Certificado
– Sujeto:
● Nombre Distinguido
● Clave Pública
– Expendedor
● Nombre Distinguido
● Firma Digital
– Periodo de Validez
– Información Administrativa
● Versión
● Número de Serie
73
Irontec – Curso Apache
Certificados
● Autoridades de Certificación
● Son las entidades encargadas de expedir y
gestionar los certificados
● Hay 3 tipos de Autoridades de Certificación
– Oficiales y reconocidas por las herramientas más
comunes
● Verisign, Thawte, Comodo...
– Oficiales y no reconocidas por las herramientas más
comunes
● Izenpe, Ceres, Camerfirma...
– No Oficiales
● Nosotros mismos ;-)
74
Irontec – Curso Apache
Certificados
● Consideraciones Previas
● La longitud de las claves privadas para SSL
debe ser 512 o 1024 bits (recomendado), para
compatibilidad con todos los navegadores.
● Una secuencia SSL se compone de:
– Negociación de cifrado a utilizar durante el
intercambio de datos (criptografía simétrica)
– Establecer e intercambiar una clave de sesión
– Puede autenticar al servidor por parte del cliente
– Puede autenticar al cliente por parte del servidor
75
Irontec – Curso Apache
Certificados
● Creación de Certificados
● Generar la clave privada del servidor
– Cifrada con criptografía simétrica por seguridad
# openssl genrsa -des3 -out apache.key
1024
– Sin cifrar
# openssl genrsa -out apache.key 1024
● Securizar la clave para que nadie tenga acceso
# chmod 400 apache.key
● Generar la Solicitud de Certificado (CSR)
# openssl req -new -key apache.key -out dominio.csr
● Las Solicitudes de Certificado se realizan para un
dominio concreto.
76
Irontec – Curso Apache
Certificados
77
Irontec – Curso Apache
Certificados
● Creación de Certificados
● Autoridad de Certificación Oficial
– Se envía, habitualmente, a través de un formulario
web a la empresa certificadora
– Validan si se ha pagado, en caso de ser necesario.
– Validan nuestras credenciales.
– Generan el Certificado (.crt), con su clave
privada y con la Solicitud de Certificado
remitida por nosotros.
78
Irontec – Curso Apache
Certificados
● Creación de Certificados
● Certificados auto-firmados
–Generar la Clave Privada de nuestra propia CA
# openssl genrsa -out mica.key 1024
– Generar el Certificado auto-firmado
# openssl req -new -x509 -nodes -sha1 -days 365 -key
mica.key -out dominio.crt
79
Irontec – Curso Apache
Certificados
Certificados
<VirtualHost IP:443>
Listen 443
DocumentRoot /var/www
SSLEngine on
SSLCertificateFile /usr/local/apache2/ssl/mica.crt
SSLCertificateKeyFile /usr/local/apache2/ssl/mica.key
</VirtualHost>
81
Irontec – Curso Apache
Certificados
● Conversión de Formatos
● El formato por defecto de OpenSSL es PEM.
● Algunas aplicaciones (IExplorer) requieren el
formato DER
● Algunas aplicaciones (Mozilla) requieren el
formato PKCS#12
● Para transformar de formato PEM a DER:
# openssl x509 -in certificado.pem -out certificado.der -outform
DER
● Para transformar de formato PEM a PKCS#12
# openssl pkcs12 -export -clcerts -in certificado.pem -inkey
server.key -out certificado.p12
82
Irontec – Curso Apache
Certificado cliente
83
Irontec – Curso Apache
Certificado cliente
Certificado cliente
85
Irontec – Curso Apache
Certificado cliente
86
Irontec – Curso Apache
Balanceo de carga
87
Irontec – Curso Apache
Balanceo de carga
88
Irontec – Curso Apache
Balanceo de carga
Balanceo de carga
90
Irontec – Curso Apache
Balanceo de carga
91
Irontec – Curso Apache
Balanceo de carga
92
Irontec – Curso Apache
Balanceo de carga
punisher@shyris:~$ glbd help
Usage:
glbd [OPTIONS] LISTEN_ADDRESS [DESTINATION_LIST]
OPTIONS:
help this help message.
daemon run as a daemon.
fifo <fifo name> name of the FIFO file for control.
control [HOST:]PORT listen for control requests on this address.
threads N number of working threads (connection pools).
source_tracking turn on source tracking: route connections from
one
source to the same destination.
verbose turn on verbose reporting.
version print program version.
LISTEN_ADDRESS:
[IP:]PORT where to listen for incoming TCP connections.
DESTINATION_LIST:
[H1[:P1[:W1]]] [H2[:P2[:W2]]]... a spaceseparated list of destinations
in the form address:port:weight.
93
Irontec – Curso Apache
Balanceo de carga
94
Irontec – Curso Apache
Balanceo de carga
punisher@shyris:~$ glbd verbose 10.10.0.123:8081
10.10.0.211:80:1 10.10.0.204:80
Incoming address: 10.10.0.123:8080 , control FIFO:
/tmp/glbd.fifo
Control address: none
Number of threads: 1, source tracking: OFF, verbose: ON,
daemon: NO
Destinations: 2
0: 10.10.0.211:80 , w: 1.000
1: 10.10.0.204:1 , w: 1.000
Router:
Address : weight usage conns
10.10.0.211:80 : 1.000 0.000 0
10.10.0.204:1 : 1.000 0.000 0
Destinations: 2, total connections: 0
95
Irontec – Curso Apache
Balanceo de carga
INFO:glb_pool.c:323: Pool 0: added connection, (total pool connections: 1)
INFO:glb_listener.c:77: Accepted connection from 10.10.0.123:45370
INFO:glb_listener.c:79: to 10.10.0.204:80
INFO:glb_pool.c:323: Pool 0: added connection, (total pool connections: 2)
INFO:glb_listener.c:77: Accepted connection from 10.10.0.123:45371
INFO:glb_listener.c:79: to 10.10.0.211:80
INFO:glb_pool.c:323: Pool 0: added connection, (total pool connections: 2)
INFO:glb_listener.c:77: Accepted connection from 10.10.0.123:45372
INFO:glb_listener.c:79: to 10.10.0.204:80
INFO:glb_pool.c:323: Pool 0: added connection, (total pool connections: 2)
INFO:glb_listener.c:77: Accepted connection from 10.10.0.123:45373
INFO:glb_listener.c:79: to 10.10.0.211:80
96
Irontec – Curso Apache
Balanceo de carga
LVS
97
Irontec – Curso Apache
Balanceo de carga
98
Irontec – Curso Apache
Balanceo de carga
aptget install ipvsadm
● La configuración es en consola, mediante el comando
ipvsadm
● Es posible guardar las reglas en un fichero de
configuración para que se carguen al arranque
● LVS puede actuar como master o backup, de forma
que podemos tener HA en el balanceador
● Cuando un master se cae, los estados de las conexiones
pasan al Backup
99
Irontec – Curso Apache
Balanceo de carga
Balanceo de carga
101
Irontec – Curso Apache
Balanceo de carga
Keepalived
102
Irontec – Curso Apache
Balanceo de carga
103
Irontec – Curso Apache
Balanceo de carga
DNS
104
Irontec – Curso Apache
Balanceo de carga
105
Irontec – Curso Apache
Balanceo de carga
● Ventajas
– Facil de implementar
– No necesita de un servidor extra
– Rápido (consulta DNS)
● Desventajas
– No controla la caída de un servidor
– Las caches de los DNS pueden hacer que no sea tan
Round Robin
– No puedes establecer pesos
106
Irontec – Curso Apache
Balanceo de carga
mod_proxy_balancer
107
Irontec – Curso Apache
Balanceo de carga
108
Irontec – Curso Apache
Balanceo de carga
</Proxy>
ProxyPass /test balancer://supercluster
109
Irontec – Curso Apache
Balanceo de carga
● Estadísticas:
110
Irontec – Curso Apache
Balanceo de carga
<Location /balancermanager>
SetHandler balancermanager
Order deny,allow
Allow from all
</Location>
111
Irontec – Curso Apache
Módulos
MÓDULOS
112
Irontec – Curso Apache
Mod_Cache
113
Irontec – Curso Apache
Mod_Cache
CacheRoot /tmp/cache
CacheEnable disk /
CacheDirLevels 5
CacheDirLength 4
CacheMaxFileSize 64000
CacheDefaultExpire 86400
114
Irontec – Curso Apache
Mod_Cache
● CacheIgnoreCacheControl
Ingora las cabeceras no-cache o no-store, guardándo
los datos en caché
● CacheIgnoreHeaders
Podemos especificar una serie de cabeceras a ignorar.
Por ejemplo para prevenir que las cookies se guarden
en cache (Set-Cookie)
● CacheIgnoreNoLastMod
Si no dispone de “Last Modified” lo cachea igualmente.
Por defecto no se cachearian
115
Irontec – Curso Apache
Mod_Cache
● CacheSize
Tamaño global de la cache, importante poner un valor
normal que no nos deje sin espacio en el disco duro
● CacheMinFileSize
Tamaño mínimo que debe tener un fichero para poder
se cacheado
● CacheIgnoreURLSessionIdentifiers
No cacheamos las páginas que incluyan un
identificador de sesión
116
Irontec – Curso Apache
Mod_Cache
Manuales de Apache
http://httpd.apache.org/docs/2.2/mod/mod_cache.html
http://httpd.apache.org/docs/2.2/mod/mod_disk_cache.html
http://httpd.apache.org/docs/2.2/mod/mod_mem_cache.html
117
Irontec – Curso Apache
Mod_Deflate
Mod_Rewrite
119
Irontec – Curso Apache
Mod_Rewrite
● Para activarlo:
– a2enmod rewrite
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
● Lo habilitamos:
– RewriteEngine On
● Y le indicamos donde realizar la reescritura (opcional)
– RewriteBase /vida
● Finalmente reescribimos
– RewriteRule ^index\.html$ home.hmtl
120
Irontec – Curso Apache
Mod_Rewrite
121
Irontec – Curso Apache
Mod_Rewrite
RewriteCond %{HTTPS} !^on$ [NC]
RewriteRule . nossl.html
122
Irontec – Curso Apache
Mod_Rewrite
123
Irontec – Curso Apache
Mod_Rewrite
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} firefox [NC]
RewriteCond %{REMOTE_ADDR} ^10\.10\.0\.123
RewriteRule (.*) $1 [F]
124
Irontec – Curso Apache
Mod_Rewrite
125
Irontec – Curso Apache
Mod_Rewrite
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/google/(.*)
RewriteRule . http://www.google.es/search?q=%1
126
Irontec – Curso Apache
Mod_Rewrite
● Un poco de SEO
● http://voz-ip.com
● La URL incluye el nombre del producto, simplemente
para posicionamiento
● Todo lo que hay antes del guión no importa a nivel
interno, solamente el identificativo final
● Crear una regla de Rewrite de forma que:
– dskndnpsn3-hola.html
– 324234n-vida.html
● Sin importar lo que tengamos antes del guión,
nos muestre el documento indicado.
127
Irontec – Curso Apache
Mod_Rewrite
RewriteRule .*(.*) $1
128
Irontec – Curso Apache
Mod_Rewrite
129
Irontec – Curso Apache
Mod_Rewrite
<Directory /var/www/inicio>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.*)login\.html
RewriteCond %{HTTPS} !^on$ [NC]
RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI} [L]
RewriteCond %{REQUEST_URI} !^(.*)login\.html
RewriteCond %{HTTPS} ^on$ [NC]
RewriteRule . http://%{HTTP_HOST}%{REQUEST_URI} [L]
</Directory>
130
Irontec – Curso Apache
Mod_Security
Mod Security
131
Irontec – Curso Apache
Mod_Security
Mod_Security
133
Irontec – Curso Apache
Mod_Security
134
Irontec – Curso Apache
Mod_Security
135
Irontec – Curso Apache
Mod_Proxy
136
Irontec – Curso Apache
Mod_Proxy
<VirtualHost *:8080>
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
137
Irontec – Curso Apache
Mod_Proxy
● Otro VirtualHost
<VirtualHost *:81>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /ma/b/ http://miguelangelnieto.net/
ProxyPassReverse /ma/b/ http://miguelangelnieto.net/
</VirtualHost>
138
Irontec – Curso Apache
139
Irontec – Curso Apache
140
Irontec – Curso Apache
141
Irontec – Curso Apache
142
Irontec – Curso Apache
143
Irontec – Curso Apache
144
Irontec – Curso Apache
146
Irontec – Curso Apache
147
Irontec – Curso Apache
AB
148
Irontec – Curso Apache
AB
ab -n 1000 -c 10 http://mihost.com/awstats
● Realiza 1000 conexiones, 10 concurrentes a la URL
indicada:
Concurrency Level: 10
Time taken for tests: 0.331 seconds
Complete requests: 1000
Failed requests: 0
149