Documente Academic
Documente Profesional
Documente Cultură
Servidor Apache 2
LA BIBLIA DE
TTULO DE LA OBRA ORIGINAL:
La biblia de
Servidor Apache 2
Mohammed J. Kabir
ANAYA
I MULTIMEDIA I
Edicin espaola:
EDICIONES ANAYA MULTIMEDIA (GRUPO ANAYA, S.A.), 2003
Juan Ignacio Luca de Tena, 15. 28027 Madrid
Depsito legal: M. 51.355-2002
ISBN: 84-415-1468-2
Printed in Spain
Imprime: Lavel, S. A.
A la memoria de mi madre,
Nazma Bathen.
Agradecimientos
Me gustara dar las gracias al grupo Apache por haber creado el servidor Web
ms poderoso, ampliable y modular del mundo. Quiero darle especialmente las
gracias a Ralf S. Engelschall. Ralf, es el autor del mdulo mod r e w r i t e , y
proporcion un gran soporte al desarrollo del captulo 9 sobre las reglas para
reescribir las URL. Los ejemplos prcticos de ese captulo pertenecen a su coleccin personal, que mantiene en aumento su sitio Web www. e n g e l s c h a l l .
com/pw/apache/rewriteguide.
Quiero dar las gracias tambin al equipo de Hungry Minds, el cual hizo de este
libro una realidad. Es imposible realizar una lista con todos los implicados pero
debo mencionar a las siguientes personas:
James Russell, el Director de desarrollo del proyecto, el cual empuj este
proyecto. No s cmo hubiese podido hacer este libro sin su generosa ayuda y sus
sugerencias a cada paso del camino. Gracias James.
Terri Varveris, el Director de adquisiciones, que me ofreci esta oportunidad y
que asegur su final. Gracias Terri.
Sheila Kabir, mi esposa, que tuvo que cargar con muchas horas de trabajo
duro durante los meses que tard en escribir este libro. Gracias cielo.
^^E^^l
ndice
Agradecimientos
Acerca del autor
6
6
Introduccin
33
34
34
34
34
34
34
35
35
35
Parte I. Comenzar
37
39
En este captulo
Popularidad de Apache
Apache: el comienzo
La lista de caractersticas de Apache
Entender la arquitectura de Apache 2.0
Mdulos multiproceso
El MPM prefork
39
40
41
41
44
44
44
El MPM threaded
El MPM perchild
El MPM winnt
Filtrado I/O
El nuevo demonio CGI
Apache es portable en tiempo de ejecucin
Entender la licencia de Apache
44
45
45
45
46
46
47
51
En este captulo
La fuente oficial de Apache
Requisitos del sistema
Requisitos para construir Apache desde la distribucin de la fuente
Requisitos para ejecutar un servidor Web Apache
Bajar el software
Instalar Apache desde el cdigo fuente
Configurar la fuente de Apache
Opciones avanzadas de configuracin para sitios con mucho trfico
Compilar e instalar Apache
Instalar Apache desde los paquetes binarios RPM
Mantenerse al da en el desarrollo de Apache
51
52
52
53
54
56
57
58
63
65
69
69
73
En este captulo
Configurar Apache
Configurar el entorno global para Apache
PidFile
ScoreBoardFile
Timeout, KeepAlive, MaxKeepAliveRequests y KeepAliveTimeout
Contenedores IfModule
Directivas para el comportamiento MPM threaded (comportamiento
MPM por defecto)
StartServers
MaxClients
MinSpareThreads
MaxSpareThreads
ThreadsPerChild
MaxRequestPerChild
Configurar el servidor principal
Puerto
Directivas de usuarios y grupos
ServerAdmin
DocumentRoot
73
73
78
79
80
80
80
81
81
81
82
82
82
82
83
83
83
84
84
86
88
89
91
91
91
91
91
91
92
92
92
92
93
93
93
94
94
94
94
95
97
97
97
97
98
101
En este captulo
Contextos de las directivas Apache
Contexto de configuracin del servidor
Contexto de contenedor
Contexto en el mbito de directorio
Directivas de configuracin general
AccessFileName
AddDefaultCharset
ContentDigest
DefaultType
DocumentRoot
ErrorDocument
<IfDefne>
<IfModule>
Include
101
102
103
103
105
106
106
107
107
108
108
109
111
111
112
Options
Port
ServerAdmin
ServerName
ServerRoot
ServerSignature
ServerTokens
SetlnputFilter
SetOutputFilter
Directivas de rendimiento y de configuracin de recursos
Controlar los procesos de Apache
ListenBacklog
MaxClients
MaxRequestsPerChild
MaxSpareServers
MinSpareServers
SendBufferSize
StartServers
TimeOut
Realizar conexiones persistentes
KeepAlive
KeepAliveTimeout
MaxKeepAliveRequests
Controlar los recursos del sistema
RLimitCPU
RLimitMEM
RLimitNPROC
UseCanonicalName
Utilizar mdulos dinmicos
AddModule
ClearModuleList
Directivas de contenedores estndar
<Directory>
<DirectoryMatch>
<Files>
<FilesMatch>
<Location>
<LocationMatch>
Directivas especficas de host virtuales
NameVirtualHost
ServerAlias
ServerPath
<VirtualHost>
ro
113
115
115
116
117
117
117
118
118
118
119
119
119
119
119
120
120
120
120
120
121
121
122
122
122
123
123
124
124
124
125
125
125
127
127
128
128
129
129
129
130
131
131
Directivas de registro
LogLevel
PidFile
ScoreBoardFile
Directivas de autentificacin y de seguridad
AllowOverride
AuthName
AuthType
HostNameLookups
IdentityCheck
<Limit>
<LimitExcept>
LimitRequestBody
LimitRequestFields
LimitRequestFieldsize
LimitRequestLine
Require
Satisfy
ScriptlnterpreterSource
Directivas especficas de MPM threaded
CoreDumpDirectory
Group
Listen
ListenBacklog
LockFile
MaxClients
MaxRequestsPerChild
MaxSpareThreads
MinSpareThreads
SendBufferSize
StartServers
ThreadsPerChild
User
'.
Directiva especficas de MPM perchild
AssignUserID
ChildPerUserID
ConnectionStatus
CoreDumpDirectory
Group
Listen
ListenBacklog
LockFile
MaxRequestsPerChild
132
133
134
134
135
135
136
137
137
138
138
139
139
140
140
140
140
141
142
142
143
143
143
144
144
145
145
146
146
147
147
148
148
149
149
150
150
151
151
151
151
151
151
MaxSpareThreads
MaxThreadsPerChild
MinSpareThreads
NumServers
PidFile
ScoreBoardFile
SendBufferSize
StartThreads
User
Directivas especficas de MPM
CoreDumpDirectory
Listen
ListenBacklog
MaxRequestsPerChild
PidFile
SendBufferSize
ThreadsPerChild
Directivas especficas de MPM prefork
CoreDumpDirectory
Group
Listen
ListenBacklog
LockFile
MaxClients
MaxRequestsPerChild
MaxSpareServers
MinSpareServers
PidFile
ScoreBoardFile
SendBufferSize
StartServers
User
151
151
152
152
152
152
152
153
153
153
153
153
153
153
154
154
154
154
154
154
154
154
155
155
155
155
155
156
156
156
156
156
5. Mdulos Apache
159
En este captulo
Un vistazo a los mdulos
Mdulos relacionados con el entorno
modenv
PassEnv
SetEnv
UnsetEnv
modsetenvif
BrowserMatch
159
160
160
161
161
161
162
162
162
BrowserMatchNoCase
SetEnvIf
SetEnvIfNoCase
moduniqueid
Mdulos de control de acceso y autentifcacin
modauthanon
Anonymous
AnonymousAuthoritative
AnonymousLogEmail
AnonymousMustGiveEmail
AnonymousNoUserID
Anonymous VerifyEmail
modauthdbm
AuthDBMUserFile
AuthDbmGroupFile
AuthDBMAuthoritative
modauthdb
AuthDBUserFe
AuthDBGroupFile
AuthDBAuthoritative
Mdulos de generacin de contenido dinmico
modactions
Action
Script
modextfilter
ExtFilterDefine
ExtFilterOptions
Mdulos de configuracin de tipo de contenido
modmime
AddCharset
AddEncoding
AddHandler
AddLanguage
AddType
DefaultLanguage
ForceType
SetHandler
RemoveHandler
TypesConfig
modmimemagic
modnegotiation
CacheNegotiatedDocs
LanguagePriority
163
163
163
164
164
165
165
165
166
166
166
167
167
170
170
171
172
173
173
174
174
175
175
178
179
179
180
181
181
181
182
182
182
183
183
184
184
184
185
185
186
186
187
El
187
188
188
189
189
190
190
190
191
191
192
192
192
193
193
195
195
195
196
197
197
198
198
199
200
200
200
201
201
202
202
202
202
202
203
204
204
205
205
206
207
207
207
ScriptAliasMatch
modspeling
modvhostalias
VirtualDocumentRoot
VirtualDocumentRootlP
VirtualScriptAlias
VirtualScriptAliasIP
Otros mdulos
modso
LoadFile
LoadModule
modimap
ImapMenu
ImapDefault
ImapBase
modfilecache
MMapFile
CacheFile
moddav
Dav
DavLockDB
DavMinTimeout
DavDepthlnfinity
207
208
208
208
209
210
210
210
211
211
211
212
213
214
215
215
215
216
216
216
216
216
217
219
221
En este captulo
Entender las capacidades del hospedaje virtual en Apache
Establecer un host virtual
Host virtuales basados en nombre
Host virtuales basados en IP
Varios servidores principales como host virtuales
Configurar DNS para un host virtual
Entender los archivos de zona
Establecer las DNS para host virtuales nuevos
Ofrecer servicios de correo virtual
Asignar usuario y grupo a cada host virtual
Gestionar un gran nmero de host virtuales
Configuracin automtica de host virtuales utilizando mod_perl
Generar la configuracin de host virtuales utilizando el script makesite
Gestionar host virtuales utilizando MySQL con el mdulo mod_v2h
221
222
223
224
225
226
229
229
231
231
232
234
235
238
242
245
En este captulo
Autentificacin vs. autorizacin
Entender cmo funciona la autentificacin
Autentificar usuarios mediante el mdulo modauth
Entender las directivas modauth
Directiva AuthUserFile
Directiva AuthGroupFile
Directiva AuthAuthoritative
Crear una seccin slo de miembros en su sitio Web
Crear una seccin slo de miembros utilizando un archivo .htaccess
Agrupar usuarios para accesos restringidos a distintas secciones Web
Autorizar el acceso mediante el nombre del host o las direcciones IP
Directiva allow
Directiva deny
Directiva order
Directiva allow from env=variable
deny from env=variable
Combinar autentificacin y autorizacin
Autentificacin con bases de datos relacinales
Utilizar un servidor con una base de datos MySQL para la
autentificacin
Crear la base de datos de autentificacin de usuarios en el servidor
MySQL
Conceder acceso al servidor Apache a la base de datos
de autentificacin de usuarios en MySQL
Compilar e instalar el mdulo m o d a u t h m y s q l
Autentificar usuarios utilizando el mdulo modauthmysql
Utilizar otras bases de datos para autentificacin de usuarios
Gestionar usuarios y grupos en una RDBM
Utilizar cookies para autentificar sesiones
245
246
246
248
249
249
249
250
251
252
254
256
256
257
258
258
259
260
261
283
En este captulo
Monitorizar Apache
Acceder a la informacin de configuracin con modinfo
Permitir pginas de estado con with modstatus
Ver pginas de estado
Simplificar el despliegue de estado
Almacenar informacin del estado del servidor
Crear archivos de registro
Directiva TransferLog
Directiva LogFormat
283
284
284
287
288
290
291
292
293
294
na
262
262
265
266
267
269
271
276
Directiva CustomLog
Directiva CookieLog
Personali7ar sus archivos de registro
Crear varios archivos de registro
Registrar cookies
Directiva CookieExpires
Directiva CookicTracking
Utilizar registros de error
Analizar sus archivos de registro
Mantenimiento de registros
Utilizar rotatelog
Utilizar Iogrotate
Utilizar logresolve
295
296
2%
299
300
301
302
302
304
306
306
307
308
313
En este captulo
El motor de reescritura de URL de Apache
RewriteFngine
RewriteOptions
RewriteRule
RewriteCond
RewriteMap
RcwriteBase
RcwriteLog
RewriteLogLcvel
RewriteLoek
Distribucin de las URL
Ampliar una URL a la forma cannica de las URL
Redirigir un directorio home de usuario a un nuevo servidor Web
Buscar una pgina en varios directorios
Asignar una variable de entorno basndose en una URI
Crear sitios www.username.domain.com
Redirceeionar una URL fallida a otro servidor Web
Crear un acceso rnultiplexor
Crear URL dependientes del tiempo
Manejar contenido
Aadir compatibilidad retroactiva en las URL
Crear las URL con contenido especifico para el navegador
Crear HTML para un puente CGI
Restriccin de acceso
Robots de bloqueo
Crear deflector URL basado en una referencia HTTP
313
314
3 16
317
318
321
323
325
325
325
326
326
326
328
329
332
333
335
335
337
338
338
338
339
339
340
340
343
En este captulo
Quin debera utilizar un servidor proxy?
Anlisis de los tipos de servidores proxy
Proxy forward
Proxy reverse
Directivas modproxy
ProxyRequests
ProxyRemote
ProxyPass
ProxyBlock
NoProxy
ProxyDomain
CacheRoot
CacheSize
CacheGclnterval
CacheMaxExpire
CacheLastModifiedFactor
CacheDirLength
CacheDirLevels
CacheDefaultExpire
NoCache
Configurar un servidor proxy Apache
Escenario 1: conectar una IP privada a Internet
Escenario 2: caching sitios web remotos
Escenario 3: crear una copia local de un sitio Web
Preparar un navegador Web para utilizar un proxy
Configuracin manual del proxy
Configurar Netscape manualmente
Configurar Internet Explorer manualmente
Configuracin automtica del proxy
Asignar valores de retorno para FindProxyForURL
Utilizar funciones predefinidas en FindProxyForURL
Escenario 1: utilizar un proxy nicamente para solicitudes
URL remotas
Escenario 2: utilizar varios servidores proxy
Escenario 3: generar FindProxyForURL dinmicamente utilizando
un script CGI
343
344
344
345
346
347
347
347
348
349
349
350
350
351
351
351
352
352
353
353
353
354
355
355
357
357
358
358
359
360
362
363
373
En este captulo
Ciclo de desarrollo Web
Poner en marcha el ciclo Web
373
374
376
365
367
369
377
378
379
381
381
382
382
384
387
387
387
387
387
388
388
390
392
392
393
393
394
394
394
396
396
396
397
397
397
397
397
398
398
399
399
399
399
400
400
401
El
403
405
En este captulo
Qu es CGI?
Input y Output CGI
Solicitudes GET
Solicitudes POST
Comparar GET y POST
Decodifcacin de los datos introducidos
Variables CGI Apache
Variables del servidor
SERVERSOFTWARE
SERVER ADMIN
DOCUMENT ROOT
Variables para las solicitudes del cliente
SERVER AME
HTTP HOST
HTTP ACCEPT
HTTPACCEPTCHARSET
HTTPACCEPTENCODING
HTTPACCEPTLANGUAGE
HTTPUSER AGENT
HTTPREFERER
HTTP CONNECTION
SERVER PORT
REMOTEHOST
REMOTEPORT
REMOTE ADDR
REMOTEUSER
SERVERPROTOCOL
REQUESTMETHOD
REQUESTURI
REMOTEIDENT
AUTHTYPE
CONTENTTYPE
CONTENTLENGTH
SCRIPTNAME
SCRIPTFILENAME
QUERYSTRING
PATHJNFO
PATHTRANSLATED
Configurar Apache para CGI
405
406
407
407
410
411
412
413
413
414
414
414
414
415
415
415
415
415
416
416
416
417
417
417
417
417
418
418
418
418
418
419
419
419
419
419
419
420
420
420
WrbW
421
422
424
424
425
427
427
428
430
435
457
457
458
458
458
458
460
462
467
En este captulo
Server Side Include
Configurar Apache para SSI
Activar SSI para un directorio completo
Activar SSI para un tipo especfico de archivo
Utilizar XBitHack para archivos .htm o .html
Utilizar comandos SSI
confg
echo
exec
fsize
flastmod
include
printenv
set
Variables SSI
Control de flujo de los comandos
467
468
469
469
470
471
472
473
476
476
481
481
482
483
483
483
484
489
En este captulo
FastCGI
Alcanzar alto rendimiento utilizando caching
Escalabilidad a travs de aplicaciones distribuidas
489
489
491
492
El
494
497
498
499
500
501
504
504
505
506
507
507
513
En este captulo
Entender cmo funciona PHP
PHP en su compaa
Requisitos previos para PHP
Compilar e instalar PHP
Construir PHP como una solucin CGI
Construir PHP como un mdulo Apache
Construir PHP como un mdulo esttico de Apache
Construir PHP como un mdulo Dynamic Shared Object
(DSO)
Configurar Apache para PHP
ConfigurarPHPutilizandophp.ini
Directivas PHP en httpd.conf
phpadminflag
php_admin_value
phpflag
phpvalue
Directivas PHP en php.ini
autoappendfile
autoprependfile
default_charset
disablefunctions
displayerrors
enabledl
error_append_string
error_log
errorprependstring
errorreporting
extensin
513
514
515
517
517
518
518
518
519
520
521
521
521
521
522
522
522
522
522
523
523
523
523
524
524
524
524
525
extensiondir
implicitflush
includepath
logerrors
magicquotesgpc
magic_quotes_runtime
maxexecutiontime
memorylimit
outputbuffering
safemode
safemodeallowedenvvars
safemodeprotectedenvvars
trackerrors
upload rnaxfilesize
uploadtmpdir
Trabajar con PHP
Crear un script PHP sencillo desde la lnea de comandos
Crear pginas Web PHP
Utilizar un script PHP como un Server-Side Include
Utilizar una pgina PHP para un directorio index
Utilizar archivos include
Mejorar el manejo de errores con PHP
Procesar formularios Web con PHP
Crear sesiones con PHP
Utilizar cookies HTTP para crear sesiones de usuario
Utilizar codificacin de URL para crear sesiones de usuario
Finalizar una sesin de usuario
Utilizar MySQL con PHP
Crear una pgina PHP sencilla para acceder a la base de datos
MySQL
Asegurar archivos include PHP
Autentifcacin de usuarios con PHP y MySQL
526
526
526
527
527
527
527
527
528
528
528
529
529
529
529
530
530
530
531
532
533
535
535
538
538
540
541
542
551
En este captulo
Compilare instalar modperl
Ejecutar scripts CGI utilizando modperl
No realice ms trabajo del necesario
Crear un mdulo modperl utilizando el API de Perl para Apache
Utilizar CGI.pm para escribir mdulos mod_perl
Precargar mdulos Perl para ahorrar memoria
Seguir la pista de los mdulos modperl en la memoria
Implementar ASP utilizando el mdulo Apache::ASP
542
545
546
551
552
553
554
555
560
561
: 562
563
567
En este captulo
Utilizar servlets
Instalar Tomcat
Instalar el ltimo JDK para Tomcat
Instalar Tomcat y el mdulo modjk
Configurar Tomcat
Configurar Tomcat para Apache
Configurar Tomcat para utilizar el Java Security Manager
Configurar Apache para Servlets y JSP
Trabajar con Tomcat
Desactivar el servicio HTTP por defecto de Tomcat
Iniciar y parar Tomcat
Iniciar Tomcat con un empaquetador de scripts de shell
Ejecutar servlets de Java
Ejecutar un ejemplo de servlets de Java mediante Tomcat
Ejecutar sus propios servlets o JSP
567
568
569
569
571
572
572
577
579
583
583
584
584
585
585
590
593
595
En este captulo
Entender el concepto de seguridad Web
Los puntos de control
Punto de control 1: su red
Punto de control 2: el sistema operativo
Punto de control 3: software del servidor Web
Elegir una configuracin segura
Consideraciones de poltica de seguridad
Una configuracin de seguridad prctica para Apache
Utilizar un usuario y un grupo especializado para Apache
Utilice una estructura de directorios segura
Permisos de archivos y directorios apropiados
Archivo index del directorio
Desactivar el acceso por defecto
Desactivar invalidacin de usuarios
La configuracin "El cordero del sacrificio"
La configuracin paranoica
Proteger su contenido Web
Guas de publicacin de contenido
Proteger su contenido de robots
Excluir todos los robots
Permitir acceso completo a todos los robots
595
595
596
598
599
600
601
601
603
603
604
605
607
609
610
610
611
613
613
614
615
616
616
616
616
616
617
618
619
619
620
620
620
621
623
630
634
634
638
639
640
640
640
641
643
644
647
En este captulo
Introduccin a SSL
Cmo funciona SSL
Entender la encriptacin
Entender los certificados
Transacciones basadas en certificados
Definir una Autoridad certificadora
Establecer SSL para Apache
Opciones SSL
Establecer OpenSSL
Requisitos previos de OpenSSL
Obtener OpenSSL
Compilare instalar OpenSSL
Elegir el mdulo m o d s s l para soporte SSL
Compilare instalar modssl
Configurar Apache para SSI basado en modssl
647
648
649
649
651
652
654
655
656
656
656
656
657
660
660
661
664
664
665
666
667
668
668
668
669
670
671
673
675
En este captulo
Requisitos del sistema
Cargar Apache para Windows
Instalar binarios de Apache
Ejecutar Apache
Ejecutar Apache automticamente como un servicio Windows
Ejecutar Apache desde el men Start
Gestionar Apache desde la lnea de comandos
Ejecutar varios servicios Apache
675
676
676
677
681
681
684
685
685
689
En este captulo
Sintaxis httpd.conf en Windows
Ajustar Apache para su funcionamiento
Probar la configuracin de Apache
Gestionar Apache con Comanche
Configurar Apache para contenido dinmico
Ejecutar scripts CGI basados en Perl
Ejecutar scripts mod_perl
Ejecutar scripts PHP
Ejecutar extensiones ISAPI con modisapi
ISAPIReadAheadBuffer
ISAPI
LogNotSupported
ISAPIAppendLogToErrors
ISAPIAppendLogToQuery
UserDir en Windows
689
690
690
691
691
694
695
695
697
698
698
699
699
699
699
MAM
701
703
En este captulo
Utilizar hardware de alto rendimiento
CPU
RAM
Disco duro
Entender losacrnimos
Trucos en la eleccin de un disco duro
Poner a punto sus discos duros EIDE/IDE (Electrnica de dispositivos
integrados o Electrnica de unidades inteligentes) en Linux
Comprobar las opciones de su disco duro con hdparam
Poner a punto el modo multisector para su disco duro
Activar acceso directo a memoria (Direct Memory Access, DMA)
en su disco duro
Tarjeta ethernet
Poner a punto el sistema de archivos ext2 de Linux
Cambiar el tamao del bloque del sistema de archivos ext2
Poner a punto el sistema de archivos ext2 con e2fsprogs
Instalar e2fsprogs
Poner a punto su sistema de archivos con tune2fs
Comprobar y reparar un sistema de archivos ext2 con e2fsck
Poner a punto su sistema operativo
Compilar e instalar un kernel personalizado
Ajustar su sistema para aplicaciones Web en demanda
Controlar el nmero mximo de manejadores de archivos abiertos
Convertir el software de su servidor Apache de competitividad global
Poner a punto su red
Utilizar fast Ethernet
Entender y controlar el flujo de trfico de red
Equilibrio de carga utilizando el servidor DNS
Utilizar hardware de equilibrio de carga
Poner a punto la configuracin de Apache
Minimizar las bsquedas DNS
Apurar el servicio de archivos estticos
Reducir el manejo de I/O para entregar pginas estticas
rpidamente
Reducir las llamadas al sistema y los manejos I/O para los archivos
simblicos
Poner a punto su configuracin utilizando ApacheBench
Utilizar el caching para aumentar la velocidad
Meter los archivos muy utilizados en la memoria cach con modfcache .
703
704
704
704
705
707
709
709
711
712
713
714
714
715
716
716
717
719
719
719
720
720
721
723
724
724
727
727
729
729
729
729
730
732
734
734
El
736
736
737
738
739
742
743
743
744
744
753
En este captulo
Caractersticas de una red de alto nivel
Aumentar la seguridad DNS
Equilibrio de carga en su red
Distribuir solicitudes HTTP con Round-Robin DNS
Distribuir solicitudes HTTP con equilibradores de carga basados
en hardware
Gestionar almacenamiento Web
RAID, SAN o dispositivos de almacenamiento
RAID de hardware
Las redes de almacenamiento (SAN)
Dispositivos de almacenamiento
Poner a punto sus discos duros
Obtener hdparam
Estimar el rendimiento de su unidad de disco
Mejorar el rendimiento de su unidad de disco
Ajustar el sistema de archivos ext2
Cambiar el tamao del bloque del sistema de archivos ext2
Instalar e2fsprogs para ajustar el sistema de archivos ext2
Comprobar y reparar un sistema de archivos ext2 con e2fsck
Aumentar la seguridad con un sistema de archivos journaling
para Linux
Compilare instalar ReiserFS
Montar el sistema de archivos ReiserFS
Utilizar un benchmark para ReiserFS
Compartir espacio de disco con el servidor NFS
Establecer un servidor NFS
Aspectos de seguridad del servidor
753
754
754
755
755
E9
747
749
756
758
759
759
759
760
760
761
761
763
765
765
766
769
769
771
772
772
775
775
777
778
779
782
783
783
784
784
788
788
790
792
793
794
795
795
799
803
803
804
806
807
807
823
826
827
829
829
830
831
831
833
835
809
810
813
815
816
MrlM
839
Recursos gratuitos
Sitios Web
Grupos de noticias Usenet
Grupos de noticias relacionados con servidores Web
Grupos de noticias relacionados con lenguajes de autor
Grupos de noticias relacionados con navegadores Web
Grupos de noticias de anuncios
Otros grupos de noticias WWW
Grupos de noticias Perl
Listas de correo
Recursos comerciales
Otros recursos relacionados
839
839
840
840
841
842
842
842
843
843
843
844
847
847
848
848
848
848
849
849
849
MhM
Introduccin
Parte I. Comenzando
En esta primera parte introducir el servidor Web nmero uno en el mundo y le
guiar a travs del proceso de obtencin y compilacin de Apache. Le mostrar
cmo preparar y ejecutar Apache con el menor nmero de cambios posibles con
respecto a la configuracin de los archivos por defecto para que pueda preparar y
ejecutar Apache lo ms rpido posible. Esta parte finaliza con referencias completas a las directivas principales de Apache y a los mdulos estndar para que,
de este modo, pueda estar preparado para las tareas de administracin de Apache.
E3
mas Windows. Con Apache 2.0, el rendimiento del servidor Web en esta plataforma se est haciendo cada vez ms prometedor. En esta parte, aprender a instalar
y a configurar Apache en la plataforma Win32.
Parte VI. Mejorar la escalabilidad
En esta parte, discutir cmo podemos aumentar la velocidad de Apache ajustando el sistema del servidor Web y optimizando varias configuraciones de servidores Apache. El captulo ofrece gran cantidad de informacin sobre cmo sacar
partido de un hardware de alto rendimiento y cmo ajustar discos duros y sistemas de archivos en Linux, para aumentar el rendimiento del sistema. Adems,
cubre los aspectos de caching y de ajuste relacionados con aplicaciones Web
basadas en Perl.
Parte Vil. Apndices
En esta parte, podemos encontrar cuatro apndices que continenen los cdigos
de estado HTTP 1.1, informacin sobre las expresiones regulares, recursos online y sobre el contenido del CD-ROM que acompaa al libro.
BcU
Parte I
Comenzar
wm
Q Apache:
el servidor
nmero uno
En este captulo
1. Entendemos por qu Apache es tan popular.
2. Estudiamos la historia de Apache.
3. Echamos un vistazo al conjunto de caractersticas.
4. Examinamos la arquitectura Apache.
5. Revisamos las opciones de licencia.
Bienvenido a Apache, el servidor nmero uno del mundo. Si est acariciando
la idea de ejecutar Apache, se encuentra en el lugar adecuado. Este captulo
introduce el modo en que Apache ejecuta un servidor Web.
Ms del 60 por 100 de los servidores Web del mundo utilizan Apache, de
acuerdo con un eminente servidor Web de una compaa dedicada a encuestas
llamada Netcraft (www . n e t c r a f t. co . u k / S u r v e y / ) . Esta compaa publica peridicamente las estadsticas de los servidores ms utilizados. La tabla
1.1 muestra las estadsticas publicadas en el momento en el que se escribi este
captulo. Si quiere conocer a los miembros de Apache, puede visitar
www.apache.org/info/apache users.html.
Servidor
Nov 2001
Porcentaje
Dic2001
Porcentaje
Apache
7750275
61.88
8588323
63.34
Microsoft US
3307207
26.40
3609428
26.62
IPIanet
431935
3.45
383078
2.83
Zeus
174052
3.45
172352
1.27
Popularidad de Apache
Lo conseguido por Apache es simplemente asombroso. Quin hubiese dicho
que ese servidor de cdigo fuente abierto podra vencer a sus dos mayores competidores comerciales, Microsoft y Netscape, como plataforma de servidores Web.
Cada persona tiene sus razones para justificar la popularidad de Apache. Aqu
estn las mas:
Apache es un servidor altamente configurable de diseo modular. Es
muy sencillo ampliar las capacidades del servidor Web Apache. Cualquiera que posea una experiencia decente en la programacin de C o Perl puede
escribir un mdulo para realizar una funcin determinada. Esto significa
que hay una gran cantidad de mdulos Apache disponibles para su utilizacin.
mm
Apache: el comienzo
A continuacin tenemos un poco de historia de Apache. Al principio, el NCSA
(National Center for Super Computing Applications) cre un servidor Web que se
convirti en el nmero uno en 1995. Sin embargo, el principal desarrollador de
servidores Web del NCSA abandon el NCSA casi en ese mismo momento y el
proyecto del servidor empez a bloquearse. Entretanto, la gente que estaba utilizando el servidor Web de NCSA, empez a intercambiar sus propios paquetes
para el servidor y pronto pensaron que era necesario un foro para gestionarlos.
Naci el grupo Apache.
El grupo utilizaba el cdigo del servidor Web de NCSA y dio nacimiento a un
nuevo servidor Web llamado Apache. Originariamente derivado del cdigo central del servidor Web de NCSA y de un manojo de paquetes, hoy en da el servidor
Web Apache es el lenguaje de la comunidad de los servidores Web. En los siguientes tres aos, adquiri el papel de servidor lder del mercado. La primera
versin (0.6.2) de Apache que fue distribuida al pblico se estren en abril de
1995. La versin 1.0 se estren el 1 de diciembre de 1995. El grupo Apache se
ampli y se convirti en un grupo sin nimo de lucro. El grupo trabaja exclusivamente va Internet. Sin embargo, el desarrollo del servidor Apache no est limitado en ningn sentido por el grupo.
Cualquiera que tenga el conocimiento para participar en el desarrollo del servidor o de sus mdulos componentes, es bienvenido para hacerlo, aunque el grupo
es la autoridad que finalmente decide qu se incluye en la distribucin estndar de
lo que se conoce como el servidor Apache. Esto permite que, literalmente, miles
de desarrolladores de todo el mundo aporten nuevas caractersticas, localicen
fallos, puertos para nuevas plataformas, etc. Cuando se enva cdigo nuevo al
grupo Apache, los miembros del grupo investigan los detalles, realizan las pruebas y las revisiones del control de calidad. Si estn satisfechos, el cdigo se
integra en la distribucin de Apache.
Soporte del ltimo protocolo HTTP 1.1: Apache es uno de los primeros
servidores Web en integrar el protocolo HTTP 1.1. Es totalmente compatible con el nuevo estndar HTTP 1.1 y al mismo tiempo sigue siendo compatible con HTTP 1.0. Apache est preparado para todas las novedades
del nuevo protocolo. Por ejemplo, antes de HTTP 1.1, un navegador Web
tena que esperar una respuesta del servidor Web antes de poder emitir otra
peticin. Con el surgimiento de HTTP 1.1, esto ha dejado de ser as. Un
navegador Web puede enviar solicitudes en paralelo, las cuales ahorran
ancho de banda dejando de trasmitir las cabeceras HTTP en cada solicitud.
De algn modo estamos ofreciendo un estmulo del lado del usuario final
porque los archivos solicitados en paralelo aparecern antes en el navegador.
Sencillo, con la configuracin basada en un poderoso archivo: el servidor Apache no posee una interfaz de usuario grfica para su administracin. Se trata de un sencillo archivo de configuracin llamado h t t p d . conf
que se puede utilizar para configurar Apache. nicamente necesita su editor de texto favorito. Sin embargo, es lo suficientemente flexible para permitirle repartir la configuracin de su host virtual en mltiples archivos
para no sobrecargar un nico archivo h t t p d . c o n f con toda la gestin
de las mltiples configuraciones de servidores virtuales.
Soporte para CGl (Common Gateway Interface): Apache soporta CGl
utilizando los mdulos m o d _ c g i y m o d _ c g i d . Es compatible con CGl y
aporta caractersticas extendidas como personalizacin de las variables de
entorno y soporte de reparacin de errores o debugging, que son difciles
de encontrar en otros servidores Web. Ver captulo 12 para obtener ms
detalles.
Soporte de FastCGI: no todo el mundo escribe sus CGl en Perl, cmo
pueden hacer sus aplicaciones CGl ms rpidas? Apache tambin tiene
una solucin para esto. Utilice el mdulo mod_f c g i para implementar un
entorno FastCGI dentro de Apache y haga que sus aplicaciones FastCGI
arranquen rpidamente. Ver el captulo 14 para obtener los detalles.
Soporte de host virtuales: Apache es adems uno de los primeros servidores Web en soportar tanto host basados en IP como host virtuales. Ver el
captulo 6 para obtener los detalles.
Soporte de autentificacin HTTP: Apache soporta autentificacin bsica basada en la Web. Est tambin preparado para autentificacin basada
en la digestin de mensajes, que es algo que los navegadores Web populares ya han implementado. Apache puede implementar autentificacin bsica utilizando tanto archivos estndar de contrasea como los DBM, llamadas
a SQL o llamadas a programas externos de autentificacin. Ver el captulo
7 para obtener los detalles.
Perl integrado: Perl se ha convertido en el estndar para la programacin
de scripts CG1. Apache es seguramente uno de los factores que hacen de
Perl un lenguaje de programacin CGI tan popular. Apache se encuentra
ms cerca de Perl que nunca. Puede bajar un script CGI basado en Perl a la
memoria utilizando su mdulomod_perl, y reutilizarlo tantas veces como
necesite. Este proceso elimina las desventajas del arranque que se encuentran asociadas a menudo con los lenguajes de interpretacin como Perl.
Ver el captulo 16 para obtener los detalles.
Soporte de scripts PHP: este lenguaje de script ha comenzado a ser muy
utilizado y Apache ofrece un amplio soporte de PHP utilizando el mdulo
m o d p h p . Ver el captulo 15 para obtener los detalles.
Soporte de servlets de Java: los servlets de Java y las Java Server Pages
(JSP) se estn convirtiendo en algo muy comn en los sitios Web dinmicos. Puede ejecutar servlets de Java utilizando el premiado entorno Tomcat
con Apache. Ver el captulo 17 para obtener los detalles.
Servidor proxy integrado: puede convertir Apache en un servidor proxy
cach. Sin embargo, la implementacin actual del mdulo opcional de proxy
no soporta HTTP proxy o el ltimo protocolo HTTP 1.1. Se est planeando actualizar este mdulo muy pronto. Ver el captulo 10.
Estado del servidor y adaptacin de registros: Apache le da una gran
cantidad de flexibilidad en el registro y la monitorizacin del estado del
servidor. El estado del servidor puede monitorizarse mediante un navegador
Web. Adems, puede adaptar sus archivos de registro a su gusto. Ver el
captulo 8 para obtener los detalles.
Soporte de Server Side Includes (SSI): Apache ofrece un conjunto de
Server Side Includes que aaden una gran cantidad de flexibilidad para el
desarrollador del sitio Web. Ver el captulo 13 para obtener los detalles.
Soporte de Secured Sockect Layer (SSL): puede crear fcilmente un
sitio Web SSL utilizando OpenSSL y el mdulo m o d _ s s l de Apache.
Ver el captulo 19 para obtener los detalles.
wm
Mdulos multiproceso
El primer cambio principal en Apache 2.0 es la introduccin de los mdulos
multiproceso (MPM). Para entender por qu se han creado los mdulos MPM,
necesita entender cmo trabajaba antes Apache. La versin 1.3 de Apache y las
anteriores utilizaban una arquitectura sin bifurcaciones. En este tipo de arquitecturas, un proceso padre de Apache se bifurca como un conjunto de procesos hijos,
los cuales son los que en realidad sirven las solicitudes. El proceso padre simplemente monitoriza los hijos y produce o elimina procesos hijos basndose en la
cantidad de solicitudes recibidas. Desgraciadamente, este modelo no trabajaba
bien bajo plataformas que no estaban centradas en proceso como en el caso de
Windows. De modo que el grupo Apache propuso una solucin basada en los
MPM.
Cada MPM es responsable de iniciar los procesos del servidor y de servir las
solicitudes va procesos hijos o hilos dependiendo de la implementacin MPM.
Hay disponibles muchas MPM. Se discutirn en las siguientes secciones.
El MPM prefork
Este MPM sin bifurcaciones mimetiza al Apache 1.3 o a otras arquitecturas
anteriores, creando un grupo de procesos hijos para servir las solicitudes. Cada
proceso hijo tiene un solo hilo. Por ejemplo, si Apache inicia 30 procesos hijo,
puede servir 30 solicitudes simultneamente. Si algo va mal y el proceso hijo
muere, nicamente se pierde una solicitud. El nmero de procesos hijo est controlado fijando un mnimo y un mximo. Cuando aumenta el nmero de solicitudes, un nuevo proceso hijo se aade hasta que se alcanza el mximo. Del mismo
modo, cuando falla una solicitud, cualquier proceso hijo extra es eliminado.
El MPM threaded
Este MPM permite soporte de hilos en Apache 2.0. Es como el MPM prefork,
pero en vez de que cada proceso hijo tenga un solo hilo, cada proceso hijo puede
tener un nmero determinado de hilos. Cada hilo dentro de un proceso hijo puede
servir una solicitud distinta. Si Apache inicia 30 procesos hijo en los que cada
hijo puede tener un mximo de 10 hilos, entonces Apache podr servir 30 x 10 =
300 solicitudes simultneamente.
Si algo va mal con un hilo, por ejemplo, un mdulo experimental hace que el
hilo muera, entonces el proceso entero muere. Esto significa que se perdern
todas las solicitudes que han servido los hilos dentro del proceso hijo. Sin embargo, como las solicitudes estn distribuidas en procesos hijo separados, la muerte
de un proceso hijo afecta como mximo a 1/n del total de las conexiones, donde n
representa el nmero de conexiones simultneas.
Los procesos se aaden o se eliminan monitorizando su conteo de hilos de
repuesto. Por ejemplo, si un proceso tiene menos de un nmero mnimo de hilos de
repuesto, se aade un nuevo proceso. Del mismo modo, cuando un proceso tiene
un mximo de nmero de hilos parados, se elimina.
Todos los procesos funcionan con el mismo usuario e ID de grupo asignados
por el servidor Apache.
Dado que los hilos son ms eficaces en cuanto a recursos que los procesos,
este MPM es muy escalable.
El MPM perchild
Esto tambin es nuevo en Apache 2.0. En este modelo MPM, un nmero de
procesos hijo se inicia con un nmero determinado de hilos. Segn aumenta la
carga de solicitudes, el proceso va aadiendo nuevos hilos a medida que los necesita. Cuando el conteo de solicitudes se reduce, los procesos disminuyen sus conteos
de hilos utilizando un conteo mnimo y mximo fijos.
La diferencia clave entre este mdulo y el MPM threaded es que el proceso de
conteo es esttico y adems cada proceso puede ejecutarse utilizando un usuario y
un ID de grupo distintos. Esto facilita le ejecucin de distintos sitios Web virtuales
bajo distintos usuarios e ID de grupos. Ver el captulo 6 para obtener los detalles.
El MPM winnt
Este es el MPM para la plataforma Windows, incluido Windows 2000, Windows
NT y Windows 9x. Se trata de un mdulo multihilo. Utilizando este mdulo,
Apache crear un proceso padre y un proceso hijo. El proceso hijo crea todos los
hilos que sirve la solicitud. Adems, este mdulo saca partido de algunas llamadas a funciones de Windows, que le permiten funcionar mejor en la plataforma
Windows que las versiones anteriores del servidor Apache.
Filtrado l/O
Ahora Apache 2.0 proporciona arquitectura para I/O jerarquizada. Esto significa que un output de un mdulo puede convertirse en un input de otro mdulo. El
efecto de este filtrado es muy interesante. Por ejemplo, el output producido por
scripts de CGI, que es procesado por el mdulo m o d c g , puede ahora pasarse al
mdulo m o d _ i n c l u d e responsable de las SSI. En otras palabras, los scripts de
CGI pueden producir un output en forma de etiquetas SSI, que se pueden procesar
antes de que el output final se enve al navegador Web. Estarn disponibles en el
futuro muchas otras aplicaciones de filtrado O/I.
Ka
Navegador Web ^_
Proceso hijo
de Apache
Proceso hijo
de Apache
Proceso
demonio CGI
J<
Proceso hijo
de Apache
yr
myscript.pl
Figura 1.1. Cmo trabaja el demonio CGI con un proceso hijo de Apache
All rights
Ka
*
*
*
*
*
* Portions of this software are based upon public domain software
* originally written at the National Center for Supercomputing
Applications,
* University of Illinois, Urbana-Champaign.
*/
Listado 1.2. Licencia traducida del software Apache
wm
WM Obtener
e instalar
Apache
En este captulo
1. Encontramos la ltima fuente de Apache.
2. Analizamos las necesidades del sistema para Apache.
3. Bajamos el software.
4. Compilamos la fuente.
5. Instalamos binarios en su sistema.
6. Mantenemos al da el desarrollo de Apache.
Aunque compilar los propios binarios de Apache puede parecer mucho trabajo, merece la pena el esfuerzo. A medida que nos familiarizamos con Apache,
aprendemos que es el nico servidor Web que ofrece prcticamente todas (si no
ms) las funcionalidades de un servidor comercial a gran escala, al tiempo que le
permite ver cmo estn implementadas estas funcionalidades en la fuente. Encuentro este aspecto de Apache fascinante.
Para las personas que no son programadoras de C pero que siguen necesitando
un servidor Web poderoso y gratuito, sin embargo, juguetear con esa cantidad de
El
Mac OS X; SunOS; Solaris; IRIX; HPUX; Digital Unix; UnixWare; AIX; SCO;
ReliantUNIX; DGUX; OpenStep/Mach; DYNIX/ptx; BeOS y Windows.
Necesidad
Requisitos
Espacio en el disco
Obligatorio
Se necesitan aproximadamente
12MB de espacio en el disco para
compilar e instalar Apache desde la
distribucin de la fuente. Sin embargo, si aade muchos mdulos que no
formen parte de la distribucin estndar de la fuente, entonces aumenta
la necesidad de espacio. Una vez que
est instalado Apache, nicamente
necesita unos 5 MB de espacio en el
disco. Le recomiendo que mantenga
el cdigo fuente en su disco duro hasta que termine de leer este libro.
Compilador ANS C
Obligatorio
Recurso
Necesidad
Requisitos
Intrprete de Perl 5
Recomendado No necesita Perl para compilar Apache, pero parte de los scripts de soporte, como apxs, split-logfile, log_
serverstatus y dbmmanage, que se
encuentran en el directorio de soporte de su distribucin de fuente, son
scripts de Perl. nicamente necesita
Perl si pretende utilizar estos scripts.
Realmente le recomiendo que instale Perl en su sistema. La versin
5.003 o una versin superior funcionarn perfectamente.
Soporte de Dynamic
Shared Object (DSO)
Opcional
Nmero de pginas Web de tamao medio que puede servir (asumiendo que Apache no tiene cuellos de botella e ignorando totalmente el
ancho de banda utilizado por las solicitudes entrantes): por ejemplo,
imagine que tiene una conexin RDSI (128Kbits/sec) de Internet y su tamao de archivo medio es 16K. Como 128 kilobits por segundo = 128/8
kilobytes por segundo = 16 kilobytes por segundo, puede enviar un archivo
de tamao medio por segundo. Si aumenta el nmero de solicitudes, con
ese ancho de banda, probablemente no pueda servir una solicitud por minuto. En este caso, la sobrecarga de red se convierte en un cuello de botella
si quiere permitir que N (donde N> 1) usuarios simultneos se conecten con
su sitio Web. Por ejemplo, si tiene una conexin RDSI y quiere servir 12
usuarios al mismo tiempo por segundo cuando el tamao medio es 16 K,
necesita 12 x RDSI (128K.) conexiones, que es en realidad una conexin T1 (1.53 Mbps).
Bajar el software
Antes de bajar el software de Apache por primera vez, debe tener en cuenta
una serie de cosas. Se pueden encontrar dos versiones disponibles de Apache: una
es una versin oficial y la otra es la versin beta que tiene el ultimo cdigo fuente
y las ltimas caractersticas. Si encuentra la versin 2.0.2 de Apache y una versin llamada 2.3b3, entonces la primera versin es la oficial y la segunda es la
versin beta. La tercera versin beta 2.3b3 (las versiones 2.3b 1 y 2.3b2 salieron
antes) probablemente ser una versin estable, pero no es recomendable utilizar
una versin beta para produccin en un servidor Web. Para bajar la versin que
quiera, dirjase a h t t p : //www . a p a c h e . o r g / d i s t / h t t p d / .
WZM
Este es el directorio de distribucin del software de Apache. Aqu, puede encontrar tanto la versin oficial como la beta del software en varios paquetes
comprimidos. Por ejemplo:
httpd_2.0.4.tar.Z
httpd_2.0.4.tar.gz
httpd_2.0.4.zip
httpd_2.3b3.tar.gz
httpd_2.3b3_win32.exe
Estos son ejemplos de distintos tipos de formatos de compresin que se utilizan para distribuir cdigo fuente. Tiene que elegir el formato de compresin que
su sistema puede manejar (en otras palabras, asegrese de que tiene la utilidad de
descompresin de cdigo). Normalmente con Linux, necesita tener las utilidades
t a r , g n u z i p o g z i p para descomprimir los archivos. Por ejemplo, para
descomprimir el archivo h t t p d _ v e r s i o n . t a r . gz (en el que versin es cualquier versin que haya bajado como por ejemplo la 2.0.4) en un sistema Linux,
utiliza el comando t a r x v z f h t t p d _ v e r s i o n . t a r . gz. Podra utilizar
tambin el comando g z i p -d h t t p d _ v e r s i o n . t a r . gz; t a r xvf
h t t p d _ v e r s i o n . t a r , que descomprimir y extraer todos los archivos en un
subdirectorio mientras que mantiene intacta la ruta relativa para cada archivo.
Windows crea la auto extraccin de archivos comprimidos para la versin de
Apache. Cualquier archivo se puede extraer simplemente ejecutando el archivo
que hemos bajado. Para la instalacin especfica en Windows y para saber los
detalles de configuracin, debe saltarse el resto del captulo y dirigirse al captulo
20.
Los binarios se guardan normalmente en un directorio distinto en el que cada
sistema operativo tiene su propio subdirectorio. Tenga en cuenta que si su sistema
operativo no aparece en el directorio de binarios, eso no significa necesariamente
que no soporte ese sistema operativo. Lo nico que significa es que no hay nadie
del grupo de desarrollo de Apache o de los grupos colaboradores que tenga compilado un archivo binario para su sistema hasta ahora. Probablemente encontrar
binarios para los sistemas Linux, FreeBSD, Solaris, NetBSD, OS2, AIX, Ultrix,
HPUX y IRIX.
Si el mdulo CGI est configurado como un mdulo dinmico compartido, entonces puede inutilizarlo fcilmente; sin embargo, si el soporte est construido de
forma esttica en el binario, entonces tendr que dejarlo como est. Si compila un
servidor Apache desde la fuente de distribucin obtendr los componentes que
necesite sin gasto de procesos o de espacio en el disco.
NOTA: Baje la distribucin de la fuente del sitio Apache oficial o del sitio
mirror adecuado.
--prefix=apache_installation_dir
La opcin - - p r e f ix le dice a Apache que instale los binarios, otras configuraciones necesarias y los archivos de soporte en a p a c h e _ i n s t a l l a t i o n _
d i r . Por ejemplo:
./configure
--prefix=/usr/local/apache
Aqu la fuente Apache se configurar de modo que todos los binarios y archivos de soporte se instalarn en el directorio / u s r / l o c a l / a p a c h e .
Hay muchas opciones que puede utilizar con el script c o n f i g u r e . La tabla
2.2 muestra todas las opciones de configuracin disponibles.
Tabla 2.2. Las opciones del script de configuracin
Opcin
Significado
--cache-file=file
--help
--no-creace
--quiet or -silent
versin
--prefix=prefix
M^M
Opcin
Significado
--exec-prefix=eprefix
--bindir=dir
Ejecutables de usuario en d i r
[EPREFIX/
bin] .
- -sbindi r=di r
--libexecdir=dir
Ejecutables de programas en d i r [ e p r e f i x
/1ibexec].
--datadir=dir
--sysconfdir=dir
--sharedstatedir=dir
--localstatedir=dir
--1ibdir = di r
--includedir=dir
Archivos de cabecera C en d i r [ p r e f i x /
include].
--oldincludedir=dir
[/
--infodir=dir
Documentacin de informacin en d i r [
prefix/info].
--mandir=dir
--srcdir=dir
Encuentra fuentes en d i r [ c o n f i g u r e d i r
or . . . ] .
gramas.
--program-transformname=program
--build=build
--host=host
--target=target
M&W
Opcin
Significado
--disable-feature
--without-package
x-includes=dir
--x-libraries=dir
--with-optim=flag
--with-port=port
--enable-debug
--enable-maintainermode
--enable-layout=layout
--enable-modules=
module-list
--enable-mods-shared=
module-list
--disable-access
--disable-auth
--enable-auth-anon
enable-auth-dbm
--enable-auth-db
--enable-auth-digest
--enable-file-cache
--enable-dav-fs
--enable-dav
--enable-echo
Opcin
Significado
--enable-charset-lite
--enable-cache
--enable-disk-cache
--enable-ext-filter
--enable-case-filter
--enable-generic-hook
-export
--enable-generic-hook
-import
--enable-optional-fn
-import
--enable-optional-fn
-export
--disable-include
--disable-http
--disable-mime
--disable-log-config
--enable-vhost-alias
--disable-negotiation
--disable-dir
--disable-imap
--disable-actions
--enable-speling
--disable-userdir
--disable-alias
--enable-rewrite
--disable-so
--enable-so
--disable-env
--enable-mime-magic
WM
Opcin
Significado
--enable-cern-meta
--enable-expires
--enable-headers
--enable-usertrack
enable-unique-id
disable-setenvif
enable-tls
--with-ssl
--with-mpm^MPM
- - el i s a b 1 e - s t a t u s
disable-autoindex
--disable-asis
--enable-info
enable-suexec
--disable-cgid
--enable-cgid
--disable-cgi
--enable-cgid
--enable-shared[=pkgs]
--enable-static[=pkgs]
--enable-fast-install
[=pkgs]
--with-gnu-ld
--disable-libtool-lock
--with-program-name
--with-suexec-caller
Opcin
Significado
with-suexec-userdir
--with-suexec-docroot
Directorio raz S u E x e c .
--with-suexec-uidmin
--with-suexec-gidmin
--with-suexec-logf i l e
--with-suexec-safepath
Asigna el safepath.
--with-suexec-umask
La mayora de estas opciones no son necesarias para la gran parte de los sitios.
Normalmente, lo nico que necesita es especificar la opcin - - p r e f ix y cualquier otra opcin necesaria para permitir o no uno u otro mdulo. Por ejemplo,
imagine que no quiere instalar el mdulo CGI en su sistema. Puede ejecutar el
script c o n f i g u r e utilizando las opciones - - d i s a b l e - c g i - - d i s a b l e c g i d para inutilizar el soporte CGI. Del mismo modo, para inutilizar el soporte
Server-Side Include (SSI) puede utilizar la o p c i n - - d i s a b l e - i n c l u d e .
Una vez que ha configurado el Apache con el script c o n f i g u r e , puede
utilizar el script c o n f i g . s t a t u s en lugar del script c o n f i g u r e para las
configuraciones siguientes. Utilizando el script conf i g . s t a t u s , puede reutilizar
su configuracin previa y aadir o quitar opciones. Por ejemplo, imagine que
configur Apache con la siguiente lnea de comando:
. /configure
cgid
-prefix=/usr/local/apache
--disable-cgi
--disable-
y unos das ms tarde decide inutilizar las SSI. Puede utilizar ahora:
./config.status
--disable-include
MAM
Valor por
defecto
Threaded
HARD_SERVER_
LIMIT para el modo
threaded
Threaded
HARD_THREAD_
LIMIT para el modo
threaded
Prefork
HARD_SERVER_
LIMIT
Perchild
Perchild
Anotaciones
256
Opciones limite
Valor por
defecto
Winnt
Winnt
Anotaciones
E9
inc lude
lib
bin
con f
h r. d o c s
t--manua 1
+ - -developer
+--howto
-images
+--mise
t - -mod
+--platform
+--programs
+--search
+--vhoses
1
1
1
1
1
i
s rri a i 1
I
+
t
logs
cgi-bin
La siguiente lista le ofrece una breve descripcin de cada uno de los directorios de la estructura de directorios:
lili
H t d o c s : este es el directorio raz de documentos para el servidor principal de Apache. El archivo h t t p d . c o n f asigna la directiva
DocumentRoot a este directorio. Aprender cmo asignar su propio
directorio raz de documentos en el captulo 3. Por defecto, el directorio
htdocs tambin tiene el manual de instalacin de Apache en un subdirectorio.
I c o n s : se utiliza para almacenar varios iconos de Apache necesarios
para desplegar de forma dinmica la lista construida de directorios.
Logs: se utiliza para almacenar los registros del servidor de Apache, el
demonio CGI basado en sockect ( c g i s o c k ) y el archivo P1D
( h t t p d , p i d ) . Aprender a cambiar la ruta de registro en el captulo 3.
C g i - b i n : el directorio de script CGI por defecto, que se asigna utilizando la directiva S c r i p t A l i a s en h t t p d . c o n f . Por defecto. Apache
tiene dos scripts CGI sencillos p r i n t e n v y t e s t - c g i . Cada uno de
estos scripts imprime variables de entorno CGI cuando realiza solicitudes
mediante h t t p : / / s e r v e r n a m e / c g i - b i n / s c r i p t _ n a m e URL.
Estos scripts son necesarios para determinar si est funcionando la configuracin CGI.
ADVERTENCIA: Se recomienda eliminar los scripts p r i n t e n v y t e s t c g i una vez que se encuentre funcionando la configuracin CGI. No es
una buena idea tener un script que muestra informacin sobre su sistema a
cualquiera. Cuanto menos sepa el resto del mundo sobre el modo de funcionar de su sistema, ms seguro ser ste.
La tabla 2.4 proporciona una lista de programas que puede encontrar en el
directorio b i n .
Tabla 2.4. Programas Apache en el directorio b i n
Programas Apache
Definicin
Ab
Apachectl
apxs
WSM
Programas Apache
Definicin
che utilizando el mdulo mod_so. Para ms informacin sobre este programa, ver http://your_server
_name/manual/programs/apxs.htm.
htdigest
htpasswd
httpd
logresolve
Rotatelogs
Definicin
httpd.conf
httpd-std.conf
highperformance.conf
Este es un archivo de prueba de configuracin que muestra algunos consejos para configurar Apache para alto rendimiento.
highperformance-std.conf
Magic
Archivo de configuracin
Definicin
mime.types
ApacheToday: este es el mejor sitio Web en el mundo de noticias de Apache. Puede obtener todas las noticias de Apache que quiera en
j c l Preparar
y ejecutar
Apache
En este captulo
1. Comprobamos los aspectos bsicos del servidor Apache.
2. Iniciamos, paramos y reiniciamos el servidor Apache.
3. Probamos un servidor Apache en funcionamiento.
En el ltimo captulo, aprendi a compilar y a instalar el servidor Web Apache
en su sistema Unix. Ahora esta listo para prepararlo y ejecutarlo. Este captulo
cubre los detalles bsicos de configuracin.
Configurar Apache
Por defecto, Apache lee un solo archivo de configuracin llamado
h t t p d . conf. Cada distribucin de cdigo fuente de Apache viene con un conjunto de archivos de configuracin de ejemplo. En la distribucin estndar de
cdigo fuente de Apache, puede encontrar un directorio llamado conf, que contiene archivos de configuracin de ejemplo con la extensin d i s t .
El
Antes de modificar este archivo es necesario que cree una copia backup del
original.
El archivo h t t p d . c o n f contiene dos tipos de informacin: comentarios y
directivas de servidores. Las lneas que comienzan con un carcter # son tratadas
como lneas de comentario; estos comentarios no tienen significado para el software del servidor, sino que son documentacin para el administrador del servidor.
Puede aadir tantos comentarios como desee; el servidor simplemente ignora todos los comentarios cuando analiza el archivo. Exceptuando los comentarios y las
lneas en blanco, el servidor trata el resto de las lneas bien como directivas
completas o bien como directivas parciales. Una es como un comando para el
servidor. Le dice al servidor que realice una tarea determinada de un modo en
concreto. Mientras editamos el archivo h t t p d . conf, ha de tomar ciertas decisiones relacionadas con cmo quiere que se comporte el servidor. En las siguientes secciones, aprender qu significan estas decisiones y cmo puede utilizarlas
para personalizar su servidor.
Puede encontrar una explicacin en profundidad sobre todas las directivas
principales ms adelante en este libro.
El listado 3.1 muestra el h t t p d . c o n f creado por defecto en el directorio
c o n f de su instalacin de Apache. La mayor parte de los comentarios se han
eliminado y el cdigo se ha editado resumido por cuestiones de brevedad.
Listado 3.1. httpd.conf creado por defecto desde h t t p d . c o n f - d i s t
### S e c c i n 1 : E n t o r n o g l o b a l
ServerRoot
"/usr/local/apache"
PidFile
logs/httpd.pid
<IfModule
!perchild.c>
ScoreBoardFile logs/apache_runtime_status
</IfModule>
T i m e o u t 300
K e e p A l i v e On
MaxKeepAliveRequests
K e e p A l i v e T i m e o u t 15
100
<IfModule p r e f o r k . c >
StartServers
5
MinSpareServers
5
MaxSpareServers
10
MaxClients
20
MaxRequestsPerChil d 0
</IfModule>
<IfModule t h r e a d e d . c >
StartServers
MaxClients
El
3
8
MinSpareThreads
5
MaxSpareThreads
10
ThreadsPerChild
25
MaxRequestsPerChild O
</IfModule>
<IfModule perchild.O
NumServers
5
StartThreads
5
MinSpareThreads
5
MaxSpareThreads
10
MaxThreadsPerChild 20
MaxRequestsPerChild 0
</IfModule>
### Seccin 2: Configuracin principal del servidor
Port 80
User nobody
Group #-1
ServerAdmin you@your.address
# Aadido
ServerName www.domain.com
DocumentRoot
"/usr/local/apache/htdocs"
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "/usr/local/apache/htdocs">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
UserDir public_html
Directorylndex index.html
AccessFileName .htaccess
<Files ~ " A \.ht">
Order allow,deny
Deny from all
</Files>
UseCanonicalName On
TypesConfig conf/mime.types
DefaultType text/plain
<IfModule
MIMEMagicFile conf/magic
</IfModule>
HostnameLookups Off
ErrorLog logs/error_log
LogLevel warn
LogFormat "7,h 7,1 7u t \"i,r\" %>s %b \" % {Ref erer} i \" \"%{UserAgent}i\"" combined
LogFormat "%h 7,1 7->u %t \"%r\" %>s %b" common
LogFormat "7 (Ref erer} i -> --U" referer
LogFormat " 7. { User-agent ( i " agent
CustomLog logs/access_log common
ServerSignature On
Alias /icons/ "/usr/local/apache/icons/"
<Directory "/usr/local/apache/icons">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ScriptAlias
/cgi-bin/
"/usr/local/apache/cgi-bin/"
<Directory "/usr/local/apache/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
IndexOptions Fancylndexing VersionSort
AddIconByEncoding (CMP,/icons/compressed.gif)
x-compress
/icons/unknown.gif
README
HEADER
.11* *~ *# HEADER* README* RCS CVS *,v *,t
x-compress Z
x-gzip gz tgz
AddLanguage da . dk
AddLanguage ni .ni
wm
x-gzip
AddLanguage en .en
# Hay muchas ms directivas AddLanguage s en el
# httpd.conf por defecto pero se han borrado para
# simplificar.
LanguagePriority en da ni et fr de el it ja kr no pl pt pt-br
ltz ca es sv tw
AddDefaultCharset
ISO-8859-1
AddCharset ISO-8859-1
.iso8859-l
.latinl
AddCharset ISO-8859-2
.iso8859-2
.latin2 .cen
# Hay muchas ms directivas AddCharset en
# httpd.conf por defecto pero se han borrado para
# s implificar.
AddType application/x-tar . tgz
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 forceresponse-1 . 3
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
### Seccin 3: Hosts Virtuales
# No hay servidores virtuales definidos en este capitulo.
wm
k a b i r @ d o m a i n . com, entonces una referencia a %ServerAdmin% significar "kabir@domain.com". Por lo tanto, si le pido que cambie
%ServerAdmin%, le estoy pidiendo que cambie la direccin de la cuenta
de correo.
Directivas de configuracin
del servidor principal
Directivas de configuracin
del servidor principal
Directivas de configuracin
de los host virtuales
Directivas de configuracin
de los host virtuales
directorio /etc/vhost
Directivas de configuracin
de los host virtuales
Include/etc/vhost
Host virtual #1
Archivo de directivas de configuracin
Directivas de configuracin
de los host virtuales
Host virtual #2
Archivo de directivas de configuracin
Host virtual #N
Archivo de directivas de configuracin
Directory}
bin
con f
htdocs
htdocs/
I
I
|
I
I
I
+--manual
I
developer
howto
I
images
|
mise
|
mod
|
plat f orm
I
programs
I
search
+
vhosts
icons
I
+
+--small
1ogs
cgi-bin
i nelude
/ u s r / l o c a l / a p a c h e es el directorio padre para todos los archivos relacionados con el servidor. El valor por defecto para S e r v e r R o o t es fijo para
cualquiera de las opciones elegidas en - - p r e f ix durante la configuracin del
cdigo fuente utilizando el script c o n f i g u r e . Por defecto, al hacer que se ejecute el comando i n s t a l l durante la instalacin del servidor se copian todos los
binarios del servidor en % S e r v e r R o o t % / b i n , los archivos de configuracin
en % S e r v e r R o o t % / c o n f , y as sucesivamente.
NOTA: Debe cambiar nicamente el valor de esta directiva si ha movido
manualmente el directorio completo desde el lugar de instalacin a otra
localizacin. Por ejemplo, si simplemente ejecuta c p - r / u s r / l o c a l /
a p a c h e / h o m e / a p a c h e y quiere configurar el servidor Apache para
que trabaje desde la nueva localizacin, ha de cambiar esta directiva a
S e r v e r R o o t / h o m e / a p a c h e . Tenga en cuenta que en ese caso debe
cambiar tambin otras referencias a la directiva de / u s r / l o c a l / a p a che a /home/apache.
Adems tenga en cuenta que cada vez que vea un nombre de directorio relacionado, Apache le aadir el prefijo %ServerRoot% a la ruta para construir la
verdadera ruta. Ver un ejemplo en la siguiente seccin.
PidFile
La directiva P i d F i l e fija la ruta del archivo PID (proceso ID). Por defecto,
esta fijada e n l o g s / h t t p d . p i d , que se traduce e n % S e r v e r R o o t % / l o g s /
h t t p d . p i d ( e s decir, / u s r / l o c a l / a p a c h e / l o g s / h t t p d . p i d ) . Cuando
wm
quiera encontrar el PID del proceso principal de Apache que ejecuta como r o o t
y produce procesos hijo, puede ejecutar el comando c a t % s e r v e r r o o t / l o g s /
h t t p d . p i d . No olvide reemplazar %ServerRoot% con el valor apropiado.
ADVERTENCIA: Si cambia el valor %PidFile% para dirijirse a una
localizados diferente, asegrese de que el directorio en el que se encuentra
el archivo^. hipd.,p id no es sobreescribible por nadie excepto por el
usuario r o o t , por razones de seguridad.
ScoreBoardFile
S c o r e B o a r d F i l e se encuentra encapsulado dentro de una condicin if
utilizando el contenedor < I f Module . . . >, tal y como se muestra a continuacin:
clfModule !perchild.c>
ScoreBoardFile logs/apache__runtime_status
</IfModule>
E9
<IfModule threaded.c>
StartServers
3
MaxClients
8
MinSpareThreads
5
MaxSpareThreads
10
ThreadsPerChild
25
MaxRequestsPerChild 0
</IfModule>
StartServers
S t a r t S e r v e r s le dice a Apache que inicie tres servidores Apache al arrancar. Puede iniciar ms servidores si quiere, pero Apache es muy bueno aumentando el nmero de procesos hijo segn sus necesidades basadas en la carga. Por
tanto, no es necesario cambiar esta directiva.
MaxClients
En el modo MPM threaded por defecto, el nmero total de solicitudes que
Apache puede procesar es %MaxClients% x % T h r e a d s P e r C h i l d % . Por lo
que, dado que el nmero por defecto para M a x C l i e n t s es 8 y el nmero por
EDI
MaxRequestPerChild
La ltima directiva para el entorno global es M a x R e q u e s t P e r C h i l d , la
cual fija el nmero de solicitudes que un proceso hijo puede servir antes de ser
asesinado. El valor por defecto de cero hace que el proceso hijo sirva solicitudes
siempre. No me gusta este valor por defecto, porque permite que los procesos
Apache consuman poco a poco gran cantidad de memoria cuando un script
m o d _ p e r l defectuoso, o incluso un mdulo defectuoso de Apache, filtra memoria. Por eso, prefiero asignar el valor 30.
TRUCO: Si no tiene pensado ejecutar ningn otro mdulo Apache o scripts
m o d j p e r l , puede dejar los valores por defecto o asignar cualquier nmero razonable. Una asignacin de 30 asegura que ese proceso hijo es asesinado despus de procesar 30 solicitudes. Por supuesto, se crea un nuevo proceso
hijo cuando es necesario.
Puerto
La primera directiva en esta seccin es la directiva P o r t , que asigna el puerto
TCP que Apache escucha para conectarse. El puerto HTTP estndar tiene un
valor de 80 por defecto. Si cambia este valor por otro nmero, como el 8080,
nicamente puede acceder al servidor utilizando una URL del tipo h t t p : //
h o s t ame : 8 08 0 / . Debe especificar el nmero de puerto en la URL si el servidor no se ejecuta en un puerto estndar.
Existen muchas razones para ejecutar Apache en puertos que no son estndar,
pero la mejor que puedo dar es que no tiene permiso para ejecutar Apache en el
puerto estndar HTTP. Como usuario no-raz puede ejecutar Apache nicamente
en puertos superiores a 1024.
Una vez que ha decidido ejecutar Apache utilizando un puerto, necesita decirle
a Apache qu nombres de usuario y de grupos hay.
Mi\M
legios que i r o n s he i k. Del mismo modo, cualquier ID de grupo que tenga ser
tambin el ID de grupo para el proceso hijo.
NOTA: Si pretende utilizar t formato numrico para el ID de usuario y/o
de grupo, necesita introducir un smbolo # antes del valor numrico, que
puede encontrar en los archivos / e t c / p a s s w d y / e t c / g r o u p .
ServerAdmin
ServerAdmin define la direccin de correo electrnico que se muestra cuando
el servidor genera un error en la pgina. Asgnelo a su direccin de correo electrnico.
A continuacin tiene que asignar el nombre del host al servidor utilizando la
directiva servername. Esta directiva se comenta por defecto porque la instalacin
de Apache no puede adivinar qu nombre de host utilizar en su sistema. Por lo
tanto, si el host se llama www . domain . com, fije la directiva S e r v e r N a m e de
forma correspondiente.
NOTA: Asegrese, sin embargo, de que ese nombre de host que est introduciendo tiene registrados los nombres de dominio de servidor adecuados
para que lo dirija hacia la mquina en la que se encuentra su servidor.
DocumentRoot
Al igual que ocurre con otros servidores Web, Apache necesita conocer la ruta
del directorio de mximo nivel en el que se guardarn las pginas Web. Este
directorio se denomina normalmente directorio raz de documentos. Apache proporciona una directiva llamada D o c u m e n t R o o t , que se puede utilizar para
especificar la ruta de este directorio.
Esta directiva instruye al servidor para que maneje el directorio suministrado
como el directorio raz para todos los documentos. Ha de tomar una decisin muy
importante. Por ejemplo, si la directiva se fija en:
DocumentRoot
entonces cada archivo del sistema se vuelve accesible para el servidor Web.
Por supuesto, puede proteger archivos proporcionando asignacin adecuada de
permisos a archivos, pero asignar la raz del documento al directorio raz fsico de
su sistema es definitivamente un riesgo de seguridad mayor. En vez de esto, podra dirigir la raz de documentos a un subdirectorio especfico en su sistema de
archivos. Si ha utilizado la opcin - - p r e f i x = / u s r / l o c a l / a p a c h e en la
configuracin de la fuente de Apache, esta directiva ser:
DocumentRoot
"/usr/local/apache/htdoes"
Una opcin potencialmente mejor, sin embargo, podra ser crear una estructura de directorios Web para su organizacin. La figura 3.2 nos muestra la estructura de directorios Web que aconsejo para un sistema multiusuario y multidominio.
/WWW
www.mycompany.com
public
htdocs
I
cgi-bin
stage
htdocs
'
I
development
'
www.client.com
cgi-bin
htdocs
cgi-bin
public
htdocs
cgi-bin
stage
Tal y como muestra la figura, he elegido crear una particin llamada /www, y
bajo ella hay directorios para cada sitio Web alojado en mi sistema, /www/
w w w . m y c o m p a n y . c o m / tiene tres subdirectorios: p u b l i c , s t a g e y
d e v e l o p m e n t cada uno de estos subdirectorios tiene, a su vez, dos subdirectorios:
h t d o c s y c g i - b i n . El subdirectorio h t d o c s es el directorio raz del documento, y el subdirectorio c g i - b i n se utiliza para scripts CGI. Por lo tanto, el
D o c u m e n t R o o t asignado para el sitio Web www . mycompany . com es:
DocumentRoot
"/www/www.mycompany.com/public/htdocs"
La ventaja de esta estructura de directorios es que mantiene todos los documentos Web y todas las aplicaciones bajo una particin (/www). Esto permite
backups sencillos, y la particin se puede montar en distintos sistemas mediante
el Network File System (NFS), en caso de que se le asigne la tarea de proporcionar pginas Web a otra mquina en la red. Discutiremos el diseo de estructuras
de directorios Web en mayor profundidad ms adelante en este libro.
Tenga en cuenta que el que su raz de documentos est en un directorio determinado, no significa que el servidor Web no pueda acceder a directorios fuera del
mm
El directorio y todos sus subdirectorios pueden tomar parte en negociaciones de contenido. La opcin M u l t i V i e w s para la directiva O p t i o n s
determina esta posibilidad. No soy muy partidario de esta opcin pero no
me desagrada hasta el punto de llegar a eliminarla. Por ejemplo, cuando la
directiva O p t i o n s est permitida dentro del directorio %DocumentRoot%
como se muestra arriba, se puede responder a una solicitud h t t p : //
w w w . d o m a i n . c o m / r a t e c a r d . h t m l con un archivo llamado
r a t e c a r d . h t m l . b a k , r a t e c a r d . b a k o r a t e c a r d . o d , y lo
mismo ocurre si r a t e c a r d . h t m l est ausente. Esto puede ser deseable
o puede no serlo.
Ninguna de las opciones especificadas pueden ser ignoradas por un archivo de control de acceso local (especificado por la directiva A c c e s s F i leName en h t t p d . conf; el valor por defecto es . h t a c c e s s ) . Esto se
especifica utilizando la directiva A l l o w O v e r r i d e .
wm
UserDir
La directiva U s e r D i r le dice a Apache que considere %UserDir% como
una raz de documentos ( ~ u s e r n a m e / % U s e r D i r % ) de cada usuario del sitio
Web. Esto slo tiene sentido si dispone de varios usuarios en el sistema y quiere
permitir que cada uno de ellos tenga su propio directorio Web. La asignacin por
defecto es:
UserDir
public^html
~joe/
-jenny/
Tenga en cuenta que en los sistemas Unix, ~ (tilde) se aplica tambin al directorio local del usuario. El directorio especificado por la directivaUserDir reside en el directorio local de cada usuario, y Apache ha de leer y ejecutar permisos
para leer archivos y directorios dentro del directorio p u b l i c _ h t m l . Esto se
puede realizar utilizando el siguiente comando en un sistema Unix:
chown -R <user>.<Apache server's group name>
~<user>/<directory assigned in UserDir>
chmod -R 770 ~<user>/<directory assigned in UserDir>
Directory Index
A continuacin, necesita configurar la directiva D i r e c t o r y l n d e x , que tiene la siguiente sintaxis:
Directorylndex [filenamel, filename2, filename3, ... ]
"/www/www.yourcompany.com/public/htdocs"
1CM
Bit--
Edicin
er
Favoritos
OMrs - .J - V) ^
Herramientas
Bsqueda
Ayuda
Favonios
j f Multimedia
&
la
Direccin | , g ) http://207.183.233.20/dir
Index of /dirl
Last
rnodified
Parent
Directory
30-Har -2001 13 13
apache
pb.gif
30-Har -2001 13 13
Sise
2k
roeet m g 3 d o c
30-Har -2001 13 14
lk
30-Har -2001 13 16
1K
rneet n g s p d f
30-Har -2001 13 16
lk
roeetings
30-Har -2001 13 14
lk
Pl
D&5cription
zl
1# Internet
index.html
index.htm welcome.htm
NOTA: Hacer una lista d tantos archivos como tenga el ndice puede crear
dos problemas. Primero, el Servidor tendr que verificar la existencia de
muchos archivos para las solicitudes del directorio; esto podra hacerlo
ms lento de lo habitual. Segundo, tener varios archivos como ndices,
podra hacer su sitio difcil de manejar desde el punto de vista de la organizacin. Si los desabolladores del contenido de su sitio Web utilizan varios
sistemas para crear archivos, podra ser una solucin prctica guardar ambos archivos, i n d e x . html e i n d e x . htm, como archivos de ndice. Por
ejemplo, una mquina antigua de Windows es incapaz de crear nombres de
archivos con extensiones mayores de tres caracteres, por lo que un usuario
trabajando en esa mquina necesitar actualizar manualmente todos los
archivos i n d e x . htm de usuario en el servidor Web. Utilizar los nombres
de archivo recomendados elimina este problema.
AccessFileName
La directiva A c c e s s F i l e N a m e define el nombre del archivo de configuracin de control de acceso a cada directorio. El nombre por defecto . h t a c c e s s
tiene un perodo destacado para ocultar el archivo de la lista de directorios normal
bajo los sistemas Unix. La nica razn para cambiar el nombre es aumentar la
seguridad por medio de la ocultacin. Si cambia el nombre de archivo, asegrese
de que cambia la expresin " A \ . h t " a ,,/N \ . w h a t e v e r " donde . w h a t e v e r
es el primer carcter visible de lo que asigna a A c c e s s F i l e N a m e .
Contenedor de archivos
El siguiente contenedor < F i l e s . . . > le dice a Apache que no permita el
acceso a ningn archivo que comience con u n h t (es decir, a el . h t a c c e s s o al
. h t p a s s w d . ) Esto corresponde a %AccessFileName%.
<Files
"A\.ht">
Order allow,deny
Deny from all
</Files>
UseCanonicalName
La siguiente directiva es U s e C a n o n i c a l N a m e , que est fijada en On. Le
dice a Apache que cree todas las URL de auto referencia utilizando el formato
%ServerName% : %Port%. Dejarlo as es una buena idea.
TypesConfig
La directiva T y p e s C o n f i g pertenece al archivo de configuracin mime
mime . t y p e s que reside en el directorio por defecto conf. No necesita cambiarlo aunque tenga este archivo en una localizacin distinta.
DefaultType
La directiva D e f a u l t T y p e asigna la cabecera Content-Type a cualquier
archivo cuya MIME no pueda determinarse desde la extensin del archivo. Por
ejemplo, si tiene un archivo %DocumentRoot%/myf i l e , entonces Apache
utiliza el %Def a u l t T y p e , que est fijado en t e x t / p l a i n , como el tipo de
contenido para el archivo. Esto significa que cuando el navegador Web solicita y
recibe ese archivo como respuesta, desplegar el contenido en el mismo sentido
que muestra un archivo todo texto. Si piensa que la mayora del contenido de los
archivos desconocidos debera tratarse como HTML, entonces utilice t e x t /
h t m l en lugar de t e x t / p l a i n .
Contenedor IfModule
El siguiente contenedor < l f Module . . . > le dice a Apache que permita
el mdulo mgico MIME (mod mime m a g i c ) si ste existe, y que utilice el
%MIMEMagicFile% como la informacin mgica (patrones de bytes) necesaria para identificar archivos de tipo MIME.
Debera dejar el valor por defecto como est, a no ser que quiera cambiar la
ruta del archivo mgico.
<IfModule mod_mime_magic.c>
MIMEMagicFile conf/magic
</IfModule>
HostnameLookups
La directiva H o s t n a m e L o o k u p s le dice a Apache que permita la bsqueda
de DNS para cada solicitud si sta se ha fijado en On. Sin embargo, el valor por
defecto es Of f y por lo tanto no tiene lugar la bsqueda de DNS para procesar la
solicitud, lo que alargara el tiempo de respuesta. Realizar una bsqueda de DNS
para resolver una direccin IP para el nombre del host, es un paso que consume
tiempo en un servidor ocupado y slo debera realizarse utilizando la utilidad
l o g r e s o l v e tal y como se discute en el captulo 8. Deje el valor por defecto
como est.
ErrorLog
La directiva E r r o r L o g es muy importante. Seala el archivo de registro
dedicado al registro de errores del servidor. El valor por defecto de registros/
errores traduce a % S e r v e r R o o t % / l o g s / e r r o r _ l o g , que trabajar para
usted, a no ser que quiera escribir un registro en un sitio distinto. Generalmente,
es una buena idea crear una particin de registro para guardar sus registros.
Adems, es preferible que su particin de registros est en uno o ms discos
dedicados de registro. Si tiene ese tipo de configuracin de hardware, querr
cambiar la directiva para determinar una nueva ruta de registro.
LogLeve I
La directiva L o g L e v e l asigna el nivel de registro que llevaremos a cabo. El
valor por defecto warn es suficiente para empezar.
Las directivas L o g F o r m a t dictan lo que est registrado y en qu formato
est registrado. En la mayor parte de los casos, ser capaz de trabajar con los
valores por defecto. Por lo tanto no deberamos hacer ningn cambio hasta que
leamos el captulo 8.
CustomLog
La directiva CustomLog asigna la ruta para el registro de acceso que almacena los eventos de su servidor. Por defecto utiliza el formato de registro comn
(CFL), que se ha definido en la directiva L o g F o r m a t . Considere el siguiente
consejo y guarde los registros en su propio disco y particin, y realice los cambios
en la ruta si es necesario.
ServerSignature
La siguiente directiva es S e r v e r S i g n a t u r e , que despliega el nombre del
servidor y el nmero de versin y es una pgina generada por el servidor como las
pginas dinmicas de ndices de directorios, las pginas de error, as como este
tipo de pginas. Si se siente incmodo con la posibilidad de desplegar informacin sobre su servidor, fije el valor en Of f. Yo lo hago.
Alias
La directiva A l i a s define un nuevo directorio de alias llamado / i c o n s /
que se encuentra en / u s r / 1 o c a 1 / ap a c h e / i c o n s / (es decir,
% S e r v e r R o o t % / i c o n s / ) . Las imgenes de iconos, almacenadas en este directorio, se utilizan para desplegar listas dinmicas de directorios cuando no se
encuentran archivos especificados por % D i r e c t o r y I n d e x % en ese directorio.
Debe dejar el alias como est a no ser que cambie la ruta del directorio de iconos.
El contenedor del directorio que sigue la definicin de alias asigna el permiso
para este directorio de iconos. No me gusta la idea de que est permitida la navegacin por los directorios (es decir, indexado dinmico de directorios) fijando
O p t i o n s en I n d e x e s . Debe cambiar O p t i o n s I n d e x e s a O p t i o n s I n d e x e s y no preocuparse por la opcin M u l t i V i e w s .
ScriptAlias
La directiva S c r i p t A l i a s se utiliza para asignar un directorio de alias de
scripts CGI muy utilizado, el directorio / c g i - b i n / que se encuentra en /
u s r / l o c a l / a p a c h e / c g i - b i n / (es decir, % S e r v e r R o o t % / c g i - b i n / ) .
Si tiene pensado utilizar scripts CGI en el servidor principal, mantenga esta directiva; en caso contrario, elimnela. Por otro lado, si quiere cambiar el directorio de
scripts a otra localizacin, cambie la ruta fsica dada en la directiva para que
coincida con la suya.
ADVERTENCIA: Nunca asigne la ruta CGI a un directorio dentro de su
raz de documentos, es decir, %DocumentRoot%/somepath,, porque
mantener scripts CGI en su directorio de la raz de documentos le enfrenta
El resto de directivas
El resto de las directivas: IndexOptions; AddlconByEncoding; AddlconByType;
Addlcon; Defaultlcon; ReadmeName; HeaderName; Indexlgnore; AddEncoding;
AddLanguage; AddCharset; BrowserMatch; y AddType, no son importantes para
la preparacin y la ejecucin, por lo que las ignoraremos por ahora. Podr ver
estas directivas en el captulo 4.
Sin embargo, hay dos directivas que puede tener la necesidad de cambiar:
LanguagePriority y AddDefaultCharset.
LanguagePriority
La directiva L a n g u a g e P r i o r i t y est fijada con el valor en (ingls), que
ser el idioma por defecto, lo que no tiene por qu servirle a todo el mundo. Por lo
tanto, puede cambiarlo a su idioma materno, si ste se soporta.
AddDefaultCharset
A d d D e f a u l t C h a r s e t asignar el conjunto de caracteres que mejor se ajuste
a sus necesidades locales. Si no sabe qu conjunto de caracteres fijar, puede dejar
el valor por defecto, determinar qu conjunto de caracteres debera utilizar, y
cambiar el valor por defecto ms tarde.
mm
Iniciar Apache
Ejecute el comando / u s r / l o c a l / a p a c h e / b i n / a p a c h e c t l s t a r t
para iniciar el servidor Web Apache. Si a p a c h e c t l tiene quejas sobre errores
de sintaxis, deber corregir los errores en el archivo h t t p d . c o n f y reintentarlo.
Adems ha de comprobar si hay algn mensaje de error en el archivo de registro %ErrorLog% (es decir, / u s r / l o c a l / a p a c h e / l o g s / e r r o r _ l o g ) .
Si observa errores en el archivo de registro, tendr que corregirlos antes. Los
errores ms comunes son:
Erratas de configuracin. Cada vez que cambie el archivo de configuracin, ejecute / u s r / l o c a l / a p a c h e / a p a c h e c t l c o n f i g t e s t para
comprobar que no tiene un error de sintaxis en el archivo de configuracin.
TRUCO: La forma ms rpida de comprobar si el servidor est funcionando es con el siguiente comando:
ps auxw | grep h t t p d
Este comando utiliza la utilidad ps para realizar una lista de todos los procesos que se encuentran en la cola de procesos, y entonces conduce esta salida hacia
el programa g r e p . g r e p busca la salida en lneas que coincidan con la palabra
clave h t t p d , y entonces muestra cada lnea con coincidencias. Si observa una
lnea con la palabra r o o t , ese es su proceso principal del servidor Apache.
Tenga en cuenta que cuando se inicia el servidor, crea un nmero de procesos hijo
para manejar las solicitudes. Si inicia Apache como el usuario raz, el proceso
padre continua ejecutando como r o o t , mientras que los hijos cambian al usuario
siguiendo las instrucciones del archivo h t t p d . conf. Si est ejecutando Apache en Linux, puede crear el script que se muestra en el listado 3.2 y guardarlo en
M:]M
#
#
#
#
#
#
#
#
#
httpd
Este shell script inicia y para el servidor Apache
Toma un argumento 'start' o 'stop' para iniciar o parar
el proceso del servidor.
Notas: Tendria que cambiar la informacin de la ruta
utilizada en el script para reflejar la configuracin de
su sistema
APACHECTL=/usr/local/apache/bin/apachecti
[ -f $APACHECTL ] I I exit 0
# Ver cmo se llamaba el script
case "$1" in
start)
# Iniciar demonios .
echo -n "Starting httpd: "
$APACHECTL start
touch /var/lock/subsys/httpd
echo
stop)
# Stop daemons.
echo -n "Shutting down httpd: "
$APACHECTL stop
echo "done"
rm -f /var/lock/subsys/httpd
TRUCO: Para iniciar Apache de forma automtica cuando arranca su sistema, simplemente ejecute este comando una vez:
ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc3.d/S99httpd
r e . d/ i n i t . d / h t t p d . Cuando su sistema arranca, este seript ser ejecutado con el argumento s t a r t y Apache se iniciar automticamente.
Reiniciar Apache
Para reiniciar el servidor Apache ejecute el comando / u s r / l o c a l / a p a che/bin/apachectl
restart.
Tambin puede utilizar el comando k i l l del siguiente modo:
kill
-HUP
"cat
/usr/local/apache/logs/httpd.pid'
Parar Apache
Puede parar Apache de forma automtica cuando se reinicia el sistema, o de
forma manual en cualquier momento. Estos dos mtodos de parar Apache se
discuten en las siguientes secciones.
Este comando asegura que el seript h t t p d se est ejecutando con el argumento s t o p cuando el sistema se apaga.
wm
-TERM
'cat
/usr/local/apache/logs/httpd.pid'
Comprobar Apache
Una vez que ha iniciado el servidor Apache, puede acceder a l mediante un
navegador Web utilizando el nombre de host adecuado. Por ejemplo, si est ejecutando el navegador Web desde el servidor, entonces utilice h t t p : / / l o c a l h o s t /
para acceder. Sin embargo, si quiere acceder al servidor desde un host remoto,
utilice el nombre del host completo para el servidor. Por ejemplo, para acceder a
u n servidor llamado a p a c h e . p c n l t d . c o m , utilice h t t p : / /
a p a c h e . p c n l t d . c o m . Si asigna la directiva P o r t a un puerto no estndar
(es decir, distinto de 80), entonces recuerde incluir el p o r t en la URL. Por
ejemplo, h t t p : / / l o c a l h o s t : 8080 acceder al servidor Apache en el Puerto
8080. Si no ha realizado ningn cambio en el directorio por defecto h t d o c s ,
ver una pgina como la que se muestra en la figura 3.4. Esta pgina est construida con la distribucin Apache y tiene que reemplazarla con su propio contenido. Para terminar, ha de asegurar los archivos de registro y actualizarlos
adecuadamente. Para comprobar sus archivos de registro, introduzca el directorio
l o g y ejecute el siguiente comando:
tail
-f
path_to_access_log
La parte t a i l del comando es una utilidad Unix que permite ver un archivo
en crecimiento (cuando se especifica la opcin - f ) . Asegrese de que cambia
p a t h _ t o _ a c c e s s _ l o g a un nombre de ruta completo adecuado para el registro de acceso. Ahora, utilice un navegador Web para acceder al sitio; si ya est en
el sitio, simplemente actualice la pgina que tiene en el navegador. Debera ver
una entrada aadida a la lista en la pantalla. Presione el botn de actualizar unas
cuantas veces ms para asegurar que el archivo de acceso est actualizado. Si ve
los registros adecuados, su archivo de registro est funcionando. Presione Ctrl+C
para salir de la sesin del comando t a i 1. Si no ve ningn registro en el archivo,
debe verificar las asignaciones de permisos para los archivos de registro y el
directorio en el que estn guardados.
E9
gdran
sr
Favoritos
QAtrs ' .J ^ 1 . ! ,
MM2
Herramientas
Bsqueda
Ayuda
Favoritos *T Multimedia
('
IIH'
Dired6n \ http://207.183.233.20/
If you can see this, t means that the nstallaon of the Apache web server software on this
system was successful You may now add content to this directory and replace this page
Af=y=vc:
i-i
-f
path_to_error_log
para ver las entradas de registro de errores tal y como entran. La simple peticin de recursos inexistentes (como un archivo que no usted tiene) para ver en su
navegador Web, har que se vean las entradas que se han aadido. Si observa
entradas que se han aadido, entonces el archivo de registro de errores est bien
configurado.
Si todas estas pruebas han tenido xito, entonces ha configurado con xito su
servidor Apache. Felicidades!
MtVU
Q Configurar
Apache
con directivas
MPM Winnt
En este captulo
1. Entendemos los contextos de las directivas Apache.
2. Nos familiarizamos con las directivas bsicas.
3. Configuramos Apache con las directivas MPM threaded.
4. Configuramos Apache con las directivas MPM prefork.
5. Configuramos Apache con las directivas MPM perchild.
Una directiva es simplemente un comando al que obedece Apache. Apache lee
directivas de los archivos de configuracin que hemos discutido en el captulo 3.
Utilizando directivas, un administrador de Apache puede controlar el comportamiento del servidor Web. Apache tiene muchas directivas disponibles, que le
convierten en un servidor Web enormemente configurable. Las directivas que
forman parte de la instalacin bsica de Apache se llaman directivas bsicas.
stas estn siempre disponibles. Los mdulos estndar tienen disponibles muchas
otras directivas desde que forman parte de la distribucin estndar de Apache.
Esas directivas estndar basadas en mdulos, se discuten a lo largo de este libro.
im
Este captulo discute los contextos estndar en los que se aplican las directivas, proporcionando una informacin completa sobre las directivas bsicas, y
tambin sobre las directivas disponibles en distintos mdulos multiproceso (o
MPM) que se han introducido en Apache 2.0. En lugar de realizar una lista por
orden alfabtico de todas las directivas bsicas posibles, las he agrupado de acuerdo
con su uso; las categoras incluyen configuracin general; configuracin de rendimiento y de recursos; contenedores estndar; host virtuales especficos; registro;
y autentificacin y seguridad. En cada descripcin de una directiva se proporciona la siguiente informacin:
Sintaxis: muestra el nombre de la directiva y todos sus argumentos posibles o valores que toma.
Predefinido: esta lnea muestra el valor por defecto para una directiva.
Slo se muestra cuando se puede aplicar.
Contexto: especifica el contexto (o alcance) en el que se aplica la directiva.
Invalidar: valor necesario para permitir la directiva en el archivo de las
directivas de configuracin de acceso en el mbito de directorio
(. h t a c c e s s por defecto). Slo se muestra donde se puede aplicar.
Lo primero que vamos a ver en este captulo son los contextos en los que puede
utilizar estas directivas.
NOTA: Algunas directivas aparecen en varias listas; tan slo una de estas
listas contiene la discusin completa de estas directivas, y se puede encontrar en cualquier parte del captulo. Esto ocurre porque algunas directivas
no se ajustan a una sola categora, y quiero que vea estas directivas desde
sus distintas perspectivas.
MbVM
Contexto de contenedor
Para limitar el alcance de las directivas, puede utilizar contenedores, que son
como las etiquetas HTML. Un par de etiquetas encierra un conjunto de directivas,
restringiendo el alcance de las mismas. Apache ofrece los siguientes contenedores
estndar:
< V i r t u a l H o s t . . . > . . . < / V i r t u a l H o s t > s e utiliza para aplicar una o ms directivas al host virtual que se especifica en la etiqueta
abierta del contenedor.
< D i r e c t o r y M a t c h r e g e x > . . . < D i r e c t o r y M a t c h > es exactamente el mismo que el contenedor < D i r e c t o r y > ; sin embargo, toma
una expresin regular ( r e g e x ) como argumento, en lugar del nombre de
un directorio. Por ejemplo, < D i r e c t o r y M a t c h " A / w w w / m y d i r [ 1-
Iftkl
< L o c a t i o n M a t c h r e g e x > . . . < / L o c a t i o n M a t c h > es exactamente igual que el contenedor < L o c a t i o n > ; sin embargo, toma una
expresin regular ( r e g e x ) como argumento en lugar de una URI.
< L i m i t . . . > . . . < / L i m i t > se utiliza para aplicar una o ms
directivas al control de acceso a determinadas reas de un sitio Web o a un
mtodo de solicitud HTTP determinado. Este contenedor tiene el menor
alcance de todos los contenedores. A continuacin tenemos un ejemplo del
alcance de un contenedor: un segmento de un archivo h t t p d . c o n f :
<VirtualHost 206.171.50.50>
ServerName www.nitec.com
DocumentRoot "/www/nitec/public/htdocs"
Directory Index welcome.html
'Locat ion /secured/>
DirectoryIndex login.html
</Locat i on>
</VirtualHost>
En este ejemplo, un host virtual llamado www . n i t e c . com se define utilizando el contenedor < V i r t u a l H o s t > . Las tres directivas S e r v e r N a m e ,
Un contenedor < V i r t u a l H o s t > no se puede anidar dentro de otro contenedor sea del tipo que sea.
KIEl
AccessFileName
Las directivas A c c e s s F i l e N a m e determinan el nombre del archivo de control de acceso en el mbito de directorio. La asignacin por defecto (. h t a c c e s s )
hace que Apache busque el archivo . h t a c c e s s cada vez que un sistema cliente
realiza una solicitud de acceso.
Sintaxis: A c c e s s F i l e N a m e
archivo . . . ]
nombre
Predefinido: A c c e s s F i l e N a m e
de
a r c h i v o [nombre
de
.htaccess
/.htaccess
/www/, htaccess
/www/mycompany/. htaccess
/www/mycompany/public/.htaccess
/www/mycompany/public/htdocs/.htaccess
Ml\M
<Directory />
AllowOverride None
</Directory>
AddDefaultCharset
Las directivas A d d D e f a u l t C h a r s e t asignan el carcter por defecto a la
cabecera Content-Type enviada por Apache al navegador.
Sintaxis: A d d D e f a u l t C h a r s e t On
racteres
Predefinido: A d d D e f a u l t C h a r s e t
Off
Off
j u e g o de c a -
Contexto: todos
Cuando estas directivas se activan (utilizando la opcin On), Apache enva
i s o - 8 8 5 9 - 1 ( W e s t e r n E u r o p e a n ) como el carcter por defecto a no ser
que especifiquemos un carcter como la segunda opcin para esta directiva. Por
ejemplo, A d d D e f a u l t C h a r s e t On u t f - 8 enviar UTF-8 como carcter
por defecto asignado. Las asignaciones de caracteres ms comunes son:
NOTA: Si sus documentos HTML asignan el carcter utilizando la etiqueta <META h t t p - e q u i v - " C o n t e n t - T y p e " c o n t e n t = " c o n t e n t _ t y p e ; c h a r s e t = c h a r a c t e r _ s e t _ n a m e n > , las directivas
A d d D e f a u l t C h a r s e t le permiten invalidarlas. :.-:
ContentDigest
Cuando se fijan las directivas C o n t e n t D i g e s t , se genera una cabecera de
la digestin de mensajes con un algoritmo MD5 para todo el contenido del cuerpo,
KI'VJ
Of f
Predefinido: C o n t e n t D i g e s t Of f
Contexto: todos
Def aultType
Las directivas Def a u l t T y p e se utilizan para establecer un tipo de contenido por defecto, de modo que cuando Apache recibe una solicitud de un documento
cuyo tipo de archivo es desconocido (en otras palabras, no se puede determinar
desde la asociacin de tipos MIME disponibles para el servidor), utiliza el tipo
MIME predeterminado.
Sintaxis: D e f a u l t T y p e
mime-type
Predefinido: D e f a u l t T y p e
text/html
Contexto: todos
Invalidar: F i l e l n f o
Por ejemplo, si tiene un directorio en el que guarda muchos archivos de texto
sin extensiones, puede utilizar las directivas D e f a u l t T y p e dentro de un conten e d o r < D i r e c t o r y > que se encuentre en este contenedor. En este caso, la asignacin de D e f a u l t T y p e en text/plain le permite al servidor decirle a la otra
parte (el navegador Web) que esos son archivos todo texto. A continuacin tenemos un ejemplo:
<Directory /www/mycompany/public/htdocs/plaindata>
DefaultType plain/text
</Directory>
DocumentRoot
El directorio DocumentRoot especificado por esta directiva se convierte en
el directorio de mximo nivel para todos los documentos servidos por Apache.
IF'M
Sintaxis: D o c u m e n t R o o t
"ruta
Predefinido: DocumentRoot
del
directorio"
" /usr/local/apache/htdocs"
"/www/mycompany/public/htdocs"
ErrorDocument
Cuando el servidor encuentra un problema, genera un mensaje de error estndar
con el cdigo de error en l. Su utilizacin no es demasiado intuitiva para la
mayora de las personas, por el contrario, sera ms deseable una versin de
mensajes de error ms personalizada o, posiblemente, una solucin nueva. Si
necesita tal personalizacin, utilice las directivas E r r o r D o c u m e n t para invalidar los mensajes de error estndares.
Sintaxis: E r r o r D o c u m e n t e r r o r _ c o d e
I m e n s a j e de e r r o r | URL]
[nombre d e a r c h i v o
Predefinido: ninguno
Contexto: todos
Invalidar: F i l e l n f o
na
/errors/404.html
Cada vez que tenga lugar un error por prdida de un archivo, se devolver al
cliente (el navegador Web) el archivo 4 0 4. h t m l que encontramos en el directorio de errores bajo el directorio D o c u m e n t R o o t .
^CJw^lPpiyiili^iiliW rfTT j)a llevar a cabo algn* accif ttmecflea. Es tal caso, reemplace ei nombre del archivo coa una llamada a su
erintCOI:
ErrorDocument 404 /cgl-lin/n\isfling-ji-l.cyi
Esta Haca HttM a un aeript CGl llamado m i s s i n g u r 1 . c g i cada ve
que toe hqpr ua error 404. Adems puede redirigir al cliente a otro sitio
utilizando ana URL en lugar del nombre de archivo:
xof(tt>*niMAt
*04 ftt<rp://wwv.newsite.&oiii/w.ati<wed.htl
y-
BU
<lfDefine>
La directiva del contenedor I f D e f i n e le permite crear una configuracin
condicional. Se especifica la opcin s p e c i a l c o m r a a n d _ l i n e _ p a r a m utilizando la opcin -D con el programa h t t p d .
Sintaxis: < I f D e f i n e [ ! ] s p e c i a l _ c o m m a n d l i n e _ p a r a m > . . .
</IfDefine>
Predefinido: ninguno
Contexto: todos
Por ejemplo, si ejecuta el servidor Apache desde el directorio b i n como ./
h t t p d -D s o m e t h i n g , entonces puede utilizar:
<IfDefine something>
# #directivas que deberan ejecutarse slo cuando
# -D something est especificado
</IfDefine>
<lfModule>
Utilice las directivas del contenedor I f Module si tiene directivas que estn
disponibles desde un mdulo personalizado que no est siempre presente en su
instalacin Apache.
Sintaxis: < I f Module [ ! ] module_name> . . . < / I f M o d u l e >
Predefinido: ninguno
Contexto: todos
Por ejemplo, si quiere utilizar determinadas directivas nicamente si un mdulo est disponible, entonces puede utilizar la siguiente construccin condicional:
<IfModule module_name>
# Asigna las a siguientes directivas sus valores correspondientes
# si el mdulo forma parte de Apache.
Include
Las directivas I n c l u d e le permiten incluir un archivo externo como un archivo de configuracin.
Sintaxis: I n c l u d e nombre d e a r c h i v o
Predefinido: ninguno
Contexto: configuracin del servidor
Por ejemplo, si quiere bajar todas las configuraciones de su host virtual utilizando archivos externos, puede tener la siguiente configuracin e n h t t p d . conf:
NameVirtualHost IP_Address
Include virtual_host_l.conf
Include virtual_host_2.conf
Include virtual_host_3.conf
Include
Options
Las directivas O p t i o n s controlan qu caractersticas del servidor estn disponibles en un directorio determinado.
Sintaxis: O p t i o n s
[+|-] opcin
[+|-] opcin
...
Predefinido: ninguno
Contexto: todos
Invalidar: Option (ver tabla 4.1)
NOTA: Cuando esta directiva se fija en None, no estn disponibles ninguna de las caractersticas extra para el contexto en el que se utilizan las
directivas.
La tabla 4.1 muestra todas las asignaciones posibles para estas directivas.
Tabla 4.1. Asignaciones en las directivas Options
Asignacin
Significado
None
No hay opciones.
All
ExecCGI
FollowSymLinks
El servidor sigue los enlaces simblicos en el directorio. Sin embargo, el servidor no cambia el nombre de ruta utilizado para enfrentarse a las secciones
<Directory>.
Includes
IncludesNOEXEC
Se puede embeber un conjunto restringido de comandos SSI en pginas SSI. Los comandos SSI
que no estn disponibles son #exec y # i n c l u d e .
Indexes
SymLinksIfOwnerMatch
Asignacin
Significado
MultiViews
access.conf:
<Directory /www/myclient/public/htdocs
Options Indexes MultiViews
</Directory>
<Directory
>
/www/myclient/public/htdocs>
Options Includes
</Directory>
las opciones M u l t i V i e w s e I n c l u d e s se asignan al directorio especificado. Cuando aplique varias opciones O p t i o n s , tenga cuidado y recuerde que el
menor contexto prevalece sobre el mayor. Por ejemplo:
ServerName www.domain.com
Options ExecCGI Includes
<VirtualHost 11.22.3311.22.33.1>
ServerName www.myclient.com
Options -ExecCGI -Includes
<Directory /www/myclient/public/htdocs/ssi >
Options Includes
</Directory>
</VirtualHost>
al directorio / w w w / m y c l i e n t / p u b l i c / h t d o c s / s s i .
Port
Las directivas P o r t asignan a un host un nmero de puerto en el rango a de 0
a 65535. En ausencia de cualquier directiva L i s t e n o B i n d A d d r e s s que
especifique un nmero de puerto, la directiva P o r t asigna el puerto de red al
servidor que va a escuchar. Si alguna directiva L i s t e n o B i n d A d d r e s s especifica un nmero de puerto, entonces la directiva P o r t no tiene efecto sobre la
eleccin de la direccin a la que escucha el servidor. La directiva P o r t asigna la
variable de entorno SERVERPORT (para CGI y Server-Side Include (SSI)), y se
utiliza cuando el servidor debe generar una URL que se refiera a l mismo.
Sintaxis: P o r t nmero
Predefinido: P o r t 8 0
Contexto: configuracin del servidor
Aunque puede especificar un nmero de puerto entre 0 y 65535, hay una restriccin que debera recordar. Todos los puertos por debajo de 1024 estn reservados para servicios estndares como TELNET, SMTP, POP3, HTTP y FTP.
Puede localizar todas las asignaciones a servicios estndar en el archivo / e t c /
s e r v i c e s . O si quiere estar seguro, utilizar cualquier nmero de puerto distinto
de 80 para su servidor Apache (utilice una direccin alta, como 8000, por ejemplo).
NOTA: Si na es un usuario raz y quiere ejecutar Apache para practicar o
por alguna otra causa, necesita utilizar puertos superiores a 1024, poique
nicamente un usuario raz puede ejecutar servicios como Apache ^n esos
puertos restringidos.
TRUCO: El contenedor <Vi r t u a IHu s t > se puedeutftt^taftbtfei p a n
determinar qu puerto se utiliza en ua host virtual. . ; , ? . '
ServerAdmin
La directiva S e r v e r A d m i n asigna una direccin de correo electrnico que
aparece junto con muchos mensajes de error en el servidor. Si aloja una gran
Hll
cantidad de sitios Web virtuales, es posible que quiera utilizar distintas direcciones de correo electrnico para cada host virtual y as, de ese modo, poder determinar inmediatamente de qu servidor est hablando el informe de problemas.
Sintaxis:
ServerAdmn e - m a i l
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual
Para darle un aspecto profesional a sus sitios virtuales y para que este aspecto
sea merecido, no utilice una direccin de correo electrnico que no incluya el sitio
virtual como la parte host de la direccin.
Por ejemplo, si su compaa es un proveedor de servicios de Internet (ISP)
llamado m y c o m p a n y . n e t , y tiene un sitio cliente llamado www.
m y c l i e n t . c o m , entonces asigne w w w . m y c l i e n t . c o m S e r v e r A d m i n a
la direccin u s e r @ r a y c l i e n t . c o m como w e b m a s t e r @ m y c l i e n t . c o m ,
en lugar de webmaster@mycompany . n e t . De este modo, cuando el servidor
muestre un mensaje de error a algn visitante de www . m y c l i e n t . com, el visitante ver una direccin de correo electrnico que pertenece a m y c l i e n t . com.
esto se considera mucho ms profesional.
ServerName
La directiva S e r v e r N a m e asigna el nombre del host del servidor. Cuando no
se utiliza esta directiva, Apache intenta determinar el nombre del host haciendo
que un servidor de nombres de dominio (DNS) lo solicite en la puesta en marcha.
Dependiendo de su sistema DNS, sin embargo, puede que esto no sea deseable,
porque la bsqueda realizada por Apache puede elegir un nombre para su servidor indeseable, por ejemplo, en el caso de que tenga un registro cannico de
nombres (CNAME) para su servidor.
Por lo tanto, lo mejor es simplemente asignarlo al nombre de host que prefiera.
Sintaxis: S e r v e r N a m e
f u l l y _ q u a l i f i e d domain_name
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual
KEU
wormhole.mycompany.com
ServerRoot
La directiva S e r v e r R o o t asigna el directorio en el que residen los archivos
del servidor. No lo confunda con la directiva DocumentRoot, la cual se utiliza
para dirigir al servidor a sus contenidos Web. La directiva S e r v e r R o o t se
utiliza para localizar todos los archivos de configuracin del servidor y los archivos de registro. La distribucin estndar incluye los directorios conf, b i n ,
h t d o c s , i c o n s , c g i - b i n y l o g s bajo el directorio S e r v e r R o o t . Si no
especifica la directiva S e r v e r R o o t , puede utilizar la opcin -d commandl i n e para decirle a Apache cul es su directorio S e r v e r R o o t .
Sintaxis: S e r v e r R o o t
directorio
Predefinido: S e r v e r R o o t
/usr/local/apache
ServerSignature
Utilizando la directiva S e r v e r S i g n a t u r e puede crear un solo pie de pgina para que Apache genere pginas como los mensajes de error y las listas de
directorios. No se recomienda esta directiva a no ser que utilice Apache como
servidor proxy. Por otro lado, cuando un usuario recibe un mensaje de error,
normalmente es difcil determinar qu servidor proxy est causando el error si
hay una cadena de proxies en la ruta de red del usuario. Este pie de pgina acta
como un identificador en este tipo de casos. Puede incluir una direccin de correo
electrnico que aparecer en el pie de pgina para que se pongan en contacto con
usted via correo electrnico si hubiese algn problema.
Sintaxis: S e r v e r S i g n a t u r e On
Of f
ServerTokens
Apache puede enviar una cabecera que incluya un identificador que le diga al
cliente qu servidor est ejecutando, en respuesta a una solicitud. La directiva
S e r v e r T o k e n s le permite controlar esa seal identificadora. Cuando se utiliza
la opcin M i n i m a l , Apache enva " A p a c h e / v e r s i n " ; cuando se utiliza la
opcin P r o d u c t O n l y , slo se enva la cadena "Apache"; cuando se utilizaos
se enva " A p a c h e / v e r s i n (OS Type )"; cuando se utiliza F u l l , Apache
enva " A p a c h e / v e r s i n (OS_Type) A v a i l a b l e _ M o d u l e _ I n f o".
Sintaxis: S e r v e r T o k e n s M i n i m a l
Full
ProductOnly
OS
KZ7M
Predefinido: S e r v e r T o k e n s
Full
SetlnputFilter
La directiva S e t l n p u t F i l t e r asigna los filtros que utilizaremos para procesar una solicitud enviada al servidor. Estos filtros se aplican en el orden en el
que aparecen en esta directiva.
Sintaxis: S e t l n p u t F i l t e r
filtro
[filtro
...]
Predefinido: ninguno
Contexto: directorio
SetOutputFilter
La directiva S e t O u t p u t F i l t e r asigna los filtros que utilizaremos para
procesar una respuesta antes de que se enve al cliente Web. Estos filtros se
aplican en el orden en el que aparecen en esta directiva.
Sintaxis: S e t O u t p u t F i l t e r
filtro
[filtro]
. . .
Predefinido: ninguno
Contexto: directorio
En el siguiente ejemplo, todos los archivos en el directorio / w w w / m y s i t e /
h t d o c s / p a r s e d se procesarn utilizando el filtro de salida INCLUDES, que
es el filtro SSI:
<Directory "/www/mysite/htdocs/parsed">
Options tlncludes
SetOutputFilter INCLUDES
</Directory>
HH
Tenga en cuenta que la mayor parte de estas directivas necesitan que comprenda
realmente el modo en el que trabaja su sistema en trminos de sistema operativo,
hardware, y similares; por tanto, debera consultar el manual de su sistema operativo para aprender la forma en la que limita a los procesos los recursos del sistema, cmo controla la conexin TCP/IP, y este tipo de eventos. Las directivas en
esta seccin estn divididas en subfunciones.
Ms adelante en este libro, obtendremos ms informacin sobre cmo aumentar la velocidad de Apache.
Por supuesto, ms procesos tambin pueden significar ms solicitudes servidas y, por lo tanto, ms xitos para su sitio Web. Por este motivo, la asignacin
de estas directivas debe basarse en una combinacin de experimentacin, requisitos y recursos disponibles.
ListenBacklog
Ver la directiva L i s t e n B a c k l o g en la seccin "Directivas especficas de
MPM threaded".
MaxClients
Ver la directivaMaxClients en la seccin "Directivas especficas de MPM
threaded".
MaxRequestsPerChild
Ver la d i r e c t i v a M a x R e q u e s t s P e r C h i l d en la seccin "Directivas especficas de MPM threaded".
MaxSpareServers
Ver la directiva M a x S p a r e S e r v e r s en la seccin "Directivas especficas
de MPM prefork".
mu
MinSpareServers
Ver la directiva M i n S p a r e S e r v e r s en la seccin "Directivas especficas
de MPM prefork".
SendBufferSize
Ver la directiva S e n d B u f f e r S i z e en la seccin "Directivas especficas de
MPM threaded".
StartServers
Ver la directiva S t a r t S e r v e r s en la seccin "Directivas especficas de
MPM threaded".
TimeOut
El servidor Apache responde a las solicitudes. Las solicitudes y las respuestas
se transmiten mediante paquetes de datos. Apache debe saber el tiempo que ha de
esperar un paquete determinado. La directiva TimeOut le permite configurar el
tiempo en segundos. El tiempo que se especifica aqu es el tiempo mximo que
Apache esperar antes de romper la conexin. La asignacin por defecto permite
que Apache espere 300 segundos antes de desconectarse del cliente. Si se encuentra en una red lenta, sin embargo, es posible que prefiera aumentar ese valor para
disminuir el nmero de desconexiones.
Sintaxis: TimeOut number
Predefinido: TimeOut 300
Contexto: configuracin del servidor
Esta asignacin TimeOut se aplica a:
El tiempo total que tarda en recibir una solicitud GET.
El tiempo entre la recepcin de paquetes TCP en una solicitud POST o en
una solicitud PUT.
KMil
solicitud, abre otra conexin TCP para responder y, finalmente, cierra la conexin una vez que ha completado el servicio. Este mtodo disminuye el rendimiento. Reutilizar una sola conexin para varias transacciones reduce la carga
necesaria para establecer y cerrar una conexin TCP de forma repetida, y por lo
tanto aumenta el rendimiento.
Para establecer una conexin permanente, sin embargo, tanto el servidor como
el cliente necesitan tener la posibilidad de una conexin permanente. La mayor
parte de los navegadores populares, como Netscape Navigator y Microsoft Internet
Explorer, tienen las caractersticas K e e p A l i v e incorporadas.
No todas las transacciones pueden sacar partido a las conexiones permanentes. Un requisito para una conexin permanente es que los recursos que se trasmiten tengan un tamao conocido. Como muchos scripts CGI, comandos SSI, y
otros contenidos generados dinmicamente no tienen un tamao conocido antes de
la trasmisin, no son capaces de sacar partido de esta caracterstica.
KeepAlive
La directiva K e e p A l i v e le permite activar / desactivar la utilizacin persistente de conexiones TCP en Apache.
Sintaxis: K e e p A l i v e On | Of f
Predefinido: K e e p A l i v e On
Contexto: configuracin del servidor
NOTA: Los antiguos servidores Apache (versiones anteriores a la versin
1.2) necesitaban un valor numrico en lugar deOn/Of f cuando utilizaban
KeepAl i ve. Este valor corresponde al nmero mximo de solicitudes que
quiere que Apache tome en consideracin por solicitud. Se impone un lmite
para prevenir que el cliente acapare todos los recursos del servidor. Para
invalidar K e e p A l i v e en las versiones antiguas de Apache, utilice el 0
(cero) como valor.
KeepAliveTimeout
Si tiene la directiva K e e p A l i v e asignada con el valor on, puede utilizar la
directiva K e e p A l i v e T i m e o u t para limitar el nmero de segundos que Apache debe esperar una solicitud posterior antes de cerrar la conexin. Una vez que
se recibe la solicitud, se aplica el tiempo de espera especificado en la directiva
Timeout.
Sintaxis: K e e p A l i v e T i m e o u t
segundos
Predefinido: K e e p A l i v e T i m e o u t
15
MVIM
MaxKeepAliveRequests
LadirectivaMaxKeepAliveRequests limita el nmero de solicitudes permitidas por conexin cuando K e e p A l i v e tiene asignado el valor on. Si tiene
asignado el valor 0 (cero), se permitirn ilimitadas solicitudes. Recomiendo que
se asigne un valor alto para conseguir un mximo rendimiento del servidor.
Sintaxis: M a x K e e p A l i v e R e q u e s t s
nmero
Predefinido: M a x K e e p A l i v e R e q u e s t s
100
RLimitCPU
La directiva RLimitCPU le permite controlar la utilizacin que hace la CPU
de los procesos hijo producidos por Apache como son los scripts CGI. El lmite
no se aplica a los procesos hijo de Apache ni a ningn proceso creado por servidor
padre de Apache.
Sintaxis: RLimitCPU
n |
'max'
[ n |
'max' ]
Predefinido: no asignado; utiliza los valores por defecto del sistema operativo
Contexto: configuracin del servidor, host virtual
La directiva RLimitCPU toma los dos parmetros siguientes: el primer
parmetro asigna un lmite de recursos bajo para todos los procesos y el segundo
parmetro, que es opcional, asigna el lmite mximo de recursos. Tenga en cuenta
que esa elevacin del lmite mximo de recursos requiere que se ejecute el servidor como raz o en la fase inicial del arranque. Para cada uno de estos parmetros
hay dos valores posibles:
n es el nmero de segundos por proceso.
RLimitMEM
La directiva RLimitMEM limita la utilizacin de memoria (RAM) de los procesos hijo producidos por Apache como los scripts CGI. El lmite no se aplica a
los hijos Apache ni a ningn proceso creado por el servidor padre Apache.
Sintaxis: RLimitMEM
n |
'max'
[ n |
'max' ]
Predefinido: no asignado; utiliza los valores por defecto del sistema operativo
Contexto: configuracin del servidor, host virtual
La directiva RLimitMEM toma dos parmetros. El primer parmetro asigna
un lmite bajo para todos los procesos y el segundo parmetro, que es opcional,
asigna el lmite mximo de recursos.
Tenga en cuenta que ese aumento en el lmite de recursos requiere que el
usuario raz arranque el servidor arranque. Hay dos valores posibles para cada
uno de estos parmetros:
RLimitNPROC
LadirectivaRLimitNPROC asigna el mximo nmero de procesos hijo generados por Apache por ID de usuario.
Sintaxis: RLimitNPROC
n |
'max'
[ n |
'max' ]
Predefinido: no asignado; utiliza los valores por defecto del sistema operativo
Contexto: configuracin del servidor, host virtual
La directiva RLimitNPROC toma dos parmetros. El primer parmetro asigna un lmite bajo para todos los procesos y el segundo parmetro, que es opcional,
asigna el lmite mximo de recursos. La elevacin del lmite mximo de recursos
requiere que se ejecute el servidor como raz o en la fase inicial del arranque. Hay
dos valores posibles para cada uno de estos parmetros:
KTE1
UseCanonicalName
La directiva UseCanonicalName determina el modo en el que Apache construye las URL referidas a s mismas. Cuando se le asigna el valor on, Apache
utiliza las asignaciones de las directivas S e r v e r N a m e y P o r t para crear la
URL referida a s misma. Si U s e C a n o n i c a l N a m e tiene of f como valor asignado, entonces Apache utiliza el nombre de host suministrado por el cliente y el
nmero de puerto de la informacin de cabecera para construir la URL. Por ltimo, si U s e C a n o n i c a l N a m e tiene asignado el valor d n s , Apache llevar a
cabo una bsqueda DNS inversa en la direccin IP del servidor para determinar el
nombre del host para la URL. No se recomienda esta opcin porque la bsqueda
DNS inversa ralentizar el proceso de solicitudes.
Sintaxis: U s e C a n o n i c a l N a m e On
Of f
dns
Predefinido: U s e C a n o n i c a l N a m e On
Contexto: configuracin del servidor, host virtual, directorio
Invalidar: opciones
AddModule
La directiva A d d M o d u l e se puede utilizar para permitir un mdulo
precompilado que actualmente no est activo. El servidor puede tener mdulos
compilados que no se estn utilizando en este momento. Esta directiva se puede
utilizar para permitir estos mdulos. El servidor contiene una lista precargada de
mdulos activos; esta lista puede borrarse con la directiva C l e a r M o d u l e L i s t .
Entonces se pueden aadir mdulos utilizando la directiva AddModule.
Sintaxis: AddModule m d u l o m d u l o . . .
Predefinido: ninguno
Contexto: configuracin del servidor
EU9
ClearModuleList
Puede utilizar la directiva C l e a r M o d u l e L i s t para borrar la lista de mdulos activos y permitir la caracterstica de carga de mdulos dinmicos. Entonces
utilice la directiva AddModule para aadir los mdulos que quiera activar.
Sintaxis: C l e a r M o d u l e L i s t
Predefinido: Ninguno
Contexto: configuracin del servidor
<Directory>
Las etiquetas de los contenedores < D i r e c t o r y > y < / D i r e c t o r y > se utilizan para encerrar un grupo de directivas que se aplican nicamente al directorio
KEE1
. . .
</Directory>
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual
En el siguiente ejemplo se utiliza el directorio / w w w / m y c o m p a n y / p u b l i c /
h t d o c s / d o w n l o a d como un fully qualifed pathname. Este ejemplo permite
realizar un ndice de directorios en este directorio.
<Directory /www/mycompany/public/htdocs/download>
Options +Indexes
</Directory>
""/www/.*/">
FEE1
<Directory /www>
AllowOverride None
</Directory>
<Directory - "/www/mycompany/public/htdocs/*">
AllowOverride Filelnfo
</Directory>
<DirectoryMatch>
El contenedor D i r e c t o r y M a t c h es prcticamente igual que el contenedor
< D i r e c t o r y > excepto en que toma una expresin regular como argumento y
no necesita el carcter ~. < D i r e c t o r y M a t c h > y < / D i r e c t o r y M a t c h > se
utilizan para encerrar un grupo de directivas que se aplican nicamente al directorio nombrado y a sus subdirectorios.
Sintaxis: < D i r e c t o r y M a t c h r e g e x >
...
</DirectoryMatch>
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual
En el siguiente ejemplo, encontrar correspondencias con todos los
subdirectorios de / w w w / m y c o m p a n y / p u b l i c / h t d o c s que tengan exactamente ocho letras maysculas en el nombre; por lo tanto, /www/mycompany/
p u b l i c / h t d o c s / A A A A B B B B / se corresponder con la expresin regular anterior.
<DirectoryMatch
"A/www/raycompany/pubic/htdocs/[A~Z]{8}/*">
<Files>
Para controlar el acceso mediante el nombre de archivo, tiene que utilizar el
contenedor F i l e s . Las secciones < F i l e s > se procesan en el orden en el que
aparecen en el archivo de configuracin, despus de que se lean las secciones
< D i r e c t o r y > y los archivos . h t a c c e s s , pero antes de que se lean las secciones < L o c a t i o n > .
Sintaxis: <Files nombre de archivo> . . . </Files>
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual, nivel de directorios
KfcVJ
" \ . ( z i p | t a r | t g z | a r j zoo)$">
corresponderaacualquierarchivoconlaextension.zip, . t a r , . t g z , . a r j
o . z o o a diferencia de las secciones < D i r e c t o r y > y < L o c a t i o n > , las secciones < F i l e s > se pueden utilizar dentro de los archivos . h t a c c e s s . Cuando
utilizamos estas secciones dentro de un archivo . h t a c c e s s , no necesita adjuntar el nombre de la ruta, porque un archivo . h t a c c e s s slo se aplica al directorio en el se ha encontrado.
<FilesMatch>
El contenedor F i l e s M a t c h es exactamente el mismo que el contenedor
< F i l e s > , excepto en que toma una expresin regular como argumento.
Sintaxis: < F i l e s M a t c h
regex>
. . .
</Files>
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual, nivel de directorios
Por ejemplo, el siguiente ejemplo coincidir con cualquier archivo con la extensin . z i p , . t a r , . t g z , . a r j y . z o o . Tenga en cuenta que no necesita el
carcter ~ en este contenedor para utilizar una expresin regular:
<FilesMatch
"\.(
zip|tar|tgz|arj|zoo)$">
<Location>
El contenedor < L o c a t i o n > proporciona control de acceso mediante URL.
Los contenedores < L o c a t i o n > se procesan en el orden en el que aparecen en el
archivo de configuracin, despus de leer los contenedores < D i r e c t o r y > y los
archivos . h t a c c e s s .
Sintaxis: < L o c a t i o n URL>
. . .
</Location>
Predefinido: ninguno
Contexto: servidor, host virtual
El argumento URL no necesita el h t t p : / / s e r v e r n a m e . Puede utilizar
caracteres comodn como una ? (que empareja cualquier carcter) o * (que empareja cualquier secuencia de caracteres excepto para el carcter /). Tambin puede
utilizar una expresin extendida utilizando el carcter ~ antes de la expresin.
Por ejemplo, < L o c a t i o n - "/ (my | y o u r ) / f i l e " > corresponder a URLs
como/my/file
oyour/file.
MV\M
<LocationMatch>
El contenedor L o c a t i o n M a t c h es idntico al contenedor < L o c a t i o n > ,
excepto en que su argumento (URL) es una expresin regular y en que no necesita
un ~ antes de la expresin. Por ejemplo, < L o c a t i o n M a t c h " / (my I y o u r ) /
f i l e " > emparejar URLs como /my/f i le o y o u r / f i l e .
Sintaxis: < L o c a t i o n M a t c h r e g e x >
. . .
</LocationMatch>
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual
NameVirtualHost
Si est pensando en utilizar host virtuales basados en nombres, necesita utilizar la directiva N a m e V i r t u a l H o s t . Aunque a d d r puede ser el nombre del
host, le recomiendo que utilice siempre una direccin IP.
Sintaxis: N a m e V i r t u a l H o s t
addr [ :port]
Predefinido: ninguno
Contexto: configuracin del servidor
Por ejemplo, para un host virtual llamado www . mycompany . com que utiliza la direccin IP 192.168.1.200, la directiva y la definicin del host virtual
sern:
NameVirtualHost
192.168.1.200
<VirtualHost 192.168.1.200>
ServerName www.mycompany.com
# Aqu van otras directivas
</VirtualHost>
WM
192.168.1.200
#
# Primer host virtual que corresponde a la directiva anterior
#
<VirtualHost 192.168.1.200>
ServerName www.mycompany.com
# Aqui van otras directivas
</VirtualHost>
NameVirtualHost
192.168.1.100>
#
# Primer host virtual que corresponde a 192.168.1.100
#
<VirtualHost 192.168.1.100>
ServerName www.myclient.com
# Aqui van otras directivas
</VirtualHost>
#
# Segundo host virtual que corresponde a 192.168.1.100
#
<VirtualHost 192.168.1.100>
ServerName www.herclient.com
# Aqui van otras directivas
</VirtualHost>
192.168.1.100:8080
ServerAlias
Esta directiva le permite definir un alias para su nombre de host en su servidor
principal. Cuando tiene un host virtual basado en nombre con varios nombres IP
BMil
(registros CNAME en la base de datos DNS), puede utilizar una sola definicin
de host virtual para servirlos a todos.
Sintaxis: S e r v e r A l i a s h o s t l
[host2
. . . ]
Predefinido: Ninguno
Contexto: Host virtual
En el siguiente ejemplo, w w w . s a c - s t a t e . e d u y w w w . c s u .
s a c r a m e n t o . edu son alias del host virtual www . c s u s . edu.
NameVirtualHost
192.168.1.100
<VirtualHost 192.168.1.100>
ServerName www.csus.edu
ServerAlias www.sac-state.edu
</VirtualHost>
www.hornet.edu
TRUCO: Tamt>ij|,ps$iJ
cin de los alias.
ServerPath
La directiva ServerPath asigna los nombres de rutas de URL heredadas de un
host, para utilizarlo con los host virtuales basados en nombre. Normalmente, se
utiliza para soportar navegadores que no son compatibles con HTTP 1.1.
Sintaxis: S e r v e r P a t h nombre
ruta
Predefinido: ninguno
Contexto: host virtual
<VirtualHost>
La directiva del contenedor V i r t u a l H o s t especifica una configuracin para
el host virtual. Todas las directivas encontradas en < V i r t u a l H o s t > y en </
V i r t u a l H o s t > se aplican nicamente a dicho host virtual. Se puede utilizar
cualquier directiva que est permitida en el contexto de un host virtual. Cuando
un servidor recibe la solicitud de un documento en un host virtual determinado,
utiliza las directivas de configuracin encerradas en <VirtualHost>.
Sintaxis: < V i r t u a l H o s t
addr [ :port]
VirtualHost>
Predefinido: ninguno
Contexto: configuracin del servidor
...>
...
</
<VirtualHost 192.168.1.100>
# l a s d i r e c t i v a s van aqui
</VirtualHost>
<VirtualHost 192.168.1.100:8080>
# la directiva va aqui
</VirtualHost>
<VirtualHost 192.168.1.100:8000
# l a s d i r e c t i v a s van aqui
</VirtualHost>
192 . 168.1.105:10000>
Se puede utilizar el nombre especial _ d e f a u l t _ si este host virtual correspondiese a cualquier direccin IP que no se encuentre explcitamente en una lista
en otro host virtual. En ausencia de cualquier host virtual _ d e f a u l t , se
utiliza la configuracin del servidor principal, que consiste en todas las definiciones que se encuentran fuera de la seccin V i r t u a l H o s t , cuando no hay ninguna coincidencia.
Si no se especifica un puerto, entonces el nmero de puerto por defecto es el
mismo puerto que se encuentra en la directiva P o r t del servidor principal. Tambin puede especificar que * empareje todos los puertos en estas direcciones.
Directivas de registro
Las transacciones de registro en los servidores son un deber en cualquier sistema que est ejecutando Apache. Los registros en los servidores proporcionan
informacin de gran valor, como quin accede a su sitio(s) Web, a qu pginas
acceden y qu errores genera el servidor.
LogLevel
La directiva L o g L e v e l asigna el mensaje de registro almacenado en el archivo de registro de errores. Cuando especifica un nivel de registro, todos los mensajes de nivel superior se escriben en un registro. Por lo que, si especifica un nivel
c r i t , entonces nicamente estn registrados los errores emerg, a l e r t y c r i t .
Sintaxis: L o g L e v e l
nivel
Predefinido: L o g L e v e l
error
Emerg
Alert
Crit
Errores crticos.
Error
Condiciones de error.
Warn
Mensajes de alerta.
Notice
Info
Mensajes de informacin.
Debug
archivo
logs/error_log
/dev/null
-U.H < #tg&&i*&= &
JMU. el disector
el SVUTO Apafiie
PidFile
Utilizando la directiva P i d F i l e , puede pedirle a Apache que escriba el proceso ID (o PID) en el servidor principal ID (es decir, el proceso demonio) en un
archivo. Si el nombre de archivo no comienza con una barra (/), entonces asume
que se refiere al S e r v e r R o o t . La directiva P i d F i l e se utiliza nicamente en
solitario.
Sintaxis: P i d F i l e
nombre
Predefinido: P i d F i l e
archivo
l o g s / h t t p d . pid
-HUP
'cat
/usr/local/httpd/logs/httpd.pid'
ScoreBoardFile
La directiva S c o r e B o a r d F i l e asigna la ruta al archivo utilizado para almacenar datos de procesos internos. Si el nombre de archivo no comienza con una
barra (/), entonces se asume que se refiere a S e r v e r R o o t .
El proceso principal del servidor utiliza este archivo para comunicarse con los
procesos hijo.
1H1
Sintaxis: S c o r e B o a r d F i l e
nombre
Predefinido: S c o r e B o a r d F i l e
archivo
logs/apache_status
AllowOverride
La directiva A l l o w O v e r r i d e le dice al servidor qu directivas, de las que
estn declaradas en un archivo . h t a c c e s s (como las especificadas por
A c c e s s F i l e N a m e ) , pueden invalidar directivas encontradas en los archivos de
configuracin.
Cuando Ove r r i d e se fija en None, el servidor no lee el archivo especificado
por F i l e N a m e ( . h t a c c e s s por defecto). Esto puede acelerar el tiempo de
respuesta del servidor, porque el servidor no tiene que buscar un archivo
F i l e N a m e especfico para cada solicitud (ver la seccin A c c e s s F i l e N a m e
para obtener los detalles).
IH
Sintaxis: A l l o w O v e r r i d e o p c i o n l o p c i o n 2
. . .
Predefinido: A l l o w O v e r r i d e A l l
Contexto: directorio
Si quiere permitir el control de acceso basado en A c c e s s F i l e N a m e , puede
especificar una o ms de estas opciones. Las opciones para invalidar son:
O p t i o n s : permite la utilizacin de directivas que controlan las caractersticas especficas de directorios ( O p t i o n s y XBitHack).
AuthName
La directiva AuthName asigna el nombre del campo para un recurso (como
un directorio) que necesita autentificacin. El navegador Web normalmente muestra
este campo en una ventana de dilogo pop-up cuando teclea un nombre de usuario
y una contrasea para acceder al recurso solicitado (controlado). No hay un nombre de campo por defecto.
La funcin principal de esta etiqueta es informar al usuario del lado del cliente
sobre los recursos a los que est intentando acceder.
Sintaxis: AuthName
"authentication_realm_name
Predefinido: ninguno
Contexto: directorio, configuracin en el mbito de directorios
Invalidar: AuthConf ig
Por ejemplo, "AuthName S e c u r e d Game Zone" le dice a los usuarios
que estn solicitando entrar en el rea Secured Game Zone (Zona segura de juegos) de un sitio. Tenga en cuenta que para que esta directiva funcione, debe ir
Ek\M
AuthType
La directiva A u t h T y p e selecciona el tipo de autentificacin de usuario para
un directorio. Actualmente, en Apache slo estn implementados los tipos de
autentificacin HTTP B a s i c o la autentifcacin D i g e s t . La autentificacin
B a s i c no se debe utilizar para necesidades serias; la contrasea y el nombre de
usuario se trasmiten en texto.
La contrasea y el nombre de usuario se retransmiten para cada solicitud
siguiente que integre en el mismo directorio restringido o en sus mismos
subdirectorios. La autentifcacin D i g e s t es ms segura que la B a s i c pero no
est disponible en todos los navegadores Web. Ver el captulo 7 para obtener ms
detalles.
La directiva A u t h T y p e debe ir acompaada de AuthName y necesita otras
directivas como A u t h U s e r F i l e y A u t h G r o u p F i l e , para funcionar.
Sintaxis: A u t h T y p e B a s i c
Digest
Predefinido: ninguno
Contexto: directorio, configuracin en el mbito de directorios
Invalidar: AuthConf ig
HostNameLookups
La directiva HostNameLookups instruye a Apache para activar o desactivar
una bsqueda DNS para cada solicitud. Cuando est activada, Apache almacena
el nombre del host del cliente en la variable de entorno REMOTE_HOST de cada
proceso CGI y SSI que se ejecuta.
Sintaxis: HostNameLookups on
Predefinido: HostNameLookups
of f
double
of f
MET
NOTA: No tiene que preocuparle el valor que asigne a esta directiva, cuando se utiliza m o d _ a c c e s s para controlar el acceso por nombre al host,
tiene lugar una bsqueda doble inversa, que no es rpida pero es necesaria
para garantizar la seguridad.
Le recomiendo que mantenga el valor por defecto en esta directiva. Esta decisin eliminar gran cantidad de trfico DNS innecesario desde la red. Si quiere
activarlo para que sus archivos de registro contengan nombres IP en lugar de
direcciones IP, debera considerar otra opcin, como ejecutar la utilidad
l o g r e s o l v e para resolver la direccin IP y los nombres IP.
IdentityCheck
La directiva I d e n t i t y C h e c k le dice a Apache que registre los nombres de
usuario remotos interactuando con el proceso i d e n t d (identificacin demonio)
del usuario remoto, o con un servidor compatible con RFC 1413. Pocas veces se
trata de una directiva til porque no funciona en todos los sistemas. La mayor
parte de los sistemas no ejecutan procesos i d e n t d para proporcionar identificaciones remotas de usuarios a servidores remotos.
Sintaxis: I d e n t i t y C h e c k On
Of f
Predefinido: I d e n t i t y C h e c k Of f
Contexto: configuracin del servidor, host virtual, directorio, configuracin en el mbito de directorio
ADVERTENCIA: Si decide utilizar esta directiva en su configuracin,
procure que la informacin que registre no sea revelada en ningn sentido
excepto para el seguimiento. Esta directiva puede aumentar los problemas
de rendimiento porque el servidor tiene que realizar una verificacin por
cada solicitud. Adems, cuando un usuario remoto no est proporcionando
un servicio i d e n t d o est tras un firewall o un proxy, el proceso de
verificacin tiene que agotar el tiempo de espera.
<Limit>
La directiva del contenedor < L i m i t > se utiliza para encerrar un grupo de
directivas de control de acceso, que se aplicarn nicamente a los mtodos HTTP
especificados. Los nombres de los mtodos pueden ser uno o ms de los siguientes: GET, POST, PUT, DELETE, CONNECT y OPTIONS. Si se utiliza GET,
restringir tambin las solicitudes HEAD. Si quiere limitar todos los mtodos, no
1H:1
incluya ningn mtodo en la directiva < L i m i t > . Tenga en cuenta que este contenedor no se puede anidar, ni tampoco puede aparecer un contenedor
< D i r e c t o r y > dentro de l. Los nombres de los mtodos cambian al utilizar
maysculas o minsculas.
Sintaxis: < L i m i t m e t h o d m e t h o d
...
>
...
</Limit>
Predefinido: ninguno
Contexto: todos
<LmitExcept>
La directiva del contenedor < L i m i t E x c e p t > se utiliza de forma opuesta a
la directiva <Limit>, < l i m i t > limita los mtodos nombrados (por ejemplo,
a r g u m e n t s ) y < L i m i t E x c e p t > limita todo lo que no sean argumentos. Todos los mtodos que no estn en la lista de argumentos estn limitados.
Sintaxis: < L i m i t E x c e p t
LimitExcept>
mtodo
mtodo
...
>
...
</
Predefinido: ninguno
Contexto: todos
En el siguiente ejemplo, se aplica el lmite a todos los mtodos HTTP excepto
a GET.
<LimitExcept GET>
# directivas
</LimitExcept>
LimitRequestBody
La directiva L i m i t Re q u e s t B o d y le permite asignar un lmite en el tamao
de la solicitud HTTP que Apache servir. El lmite por defecto es 0, que significa
ilimitado. Puede asignar este lmite de 0 a 2147483647 (2GB).
Sintaxis: L i m i t R e q u e s t B o d y
bytes
Predefinido: L i m i t R e q u e s t B o d y 0
Contexto: configuracin del servidor, host virtual, directorio, configuracin en el mbito de directorio
Se recomienda asignar un lmite, slo si tiene experiencia en evitar ataques
basados en la denegacin de servicios HTTP, en los que intentan sobrecargar el
servidor con grandes solicitudes HTTP. Se trata de una directiva til a la hora de
mejorar la seguridad en el servidor.
C9
LimitRequestFields
La directiva L i m i t R e q u e s t F i e l d s le permite limitar el nmero de campos de cabeceras de solicitudes permitidos en una sola solicitud HTTP. Este
lmite se puede encontrar entre 0 y 32767 (32K). Esta directiva le puede ayudar a
implementar las medidas de seguridad contra ataques basados en la denegacin de
servicios con grandes solicitudes.
Sintaxis: L i m i t R e q u e s t F i e l d s
nmero
Predefinido: L i m i t R e q u e s t F i e l d s
100
LimitRequestFieldsize
La directiva L i m i t R e q u e s t F i e l d s i z e le permite limitar el tamao (en
bytes) de un campo de cabecera de solicitud. El tamao por defecto es 8190 (8K)
que es ms que suficiente para la mayor parte de las situaciones. Sin embargo, si
tiene lugar un ataque basado en la denegacin de servicios HTTP, puede cambiarlo a un nmero ms pequeo para denegar las solicitudes que excedan el lmite. El
valor 0 asigna el lmite en ilimitado.
Sintaxis: L i m i t R e q u e s t F i e l d s i z e
Predefinido: L i m i t R e q u e s t F i e l d s i z e
bytes
8190
LimitRequestLine
La directiva L i m i t R e q u e s t L i n e asigna el lmite de tamao de la lnea de
solicitudes. En realidad limita el tamao de la URL que se puede enviar al servidor. El lmite por defecto debera ser suficiente para la mayora de las situaciones.
Si tiene lugar un ataque basado en la denegacin de servicios que utilice una URL
muy larga para agotar los recursos en su servidor, puede reducir el lmite para
rechazar este tipo de solicitudes.
Sintaxis: L i m i t R e q u e s t L i n e
bytes
Predefinido: L i m i t R e q u e s t L i n e
8190
Require
Apache determina qu usuarios o grupos pueden acceder a un directorio restringido utilizando la directiva R e q u i r e . Hay tres tipos de nombres de entidad
mi
nombre-entidad
nombre-entidad...
Predefinido: ninguno
Contexto: directorio, configuracin en el mbito de directorio
Invalidar: AuthConf ig
A continuacin tenemos un ejemplo en el que slo los usuarios de los grupos
nombrados pueden acceder al directorio, se trata de un ejemplo con un requisito
de acceso basado en grupo:
Require group my-group your-group his-group her-group
Con la siguiente lnea, todos los usuarios vlidos pueden acceder al directorio.
require
valid-user
Si la directiva r e q u i r e aparece en una seccin < L i m i t > , entonces restringe el acceso a los mtodos nombrados; en caso contrario, restringe el acceso para
todos los mtodos. Por ejemplo:
AuthType Basic
AuthName "Game Zone Drop Box"
AuthUserFile
/www/netgames/.users
AuthGroupFile /www/ntgames/.groups
<Limit GET>
require group coders
</Limit>
Satisfy
Si ha creado una configuracin bsica de autentifcacin HTTP en la que se
utilizan las directivas A l l o w y R e q u i r e , puede utilizar la directiva S a t i s f y
para decirle a Apache que los requisitos de autentifcacin son suficientes.
cu
Sintaxis: S a t i s f y Any
Predefinido: S a t i s f y
All
all
ScriptlnterpreterSource
La directiva S c r i p t l n t e r p r e t e r S o u r c e le permite especificar el modo
en que Windows encuentra el intrprete para un script. Normalmente, el intrprete de script se detecta utilizando la lnea #! encontrada en un script. Sin embargo,
asignando esta directiva para que registre, fuerza a Windows a realizar una bsqueda en el registro de las extensiones de los script para encontrar el programa
solicitado (es decir, el intrprete).
Sintaxis: S c r i p t l n t e r p r e t e r S o u r c e R e g i s t r y
Predefinido: S c r i p t l n t e r p r e t e r S o u r c e
Script
script
Contexto: directorio, . h t a c c e s s
UIVM
>'Ibij!.'^'^^j*^.f4^^^:^
'J'.J'.V-.'
CoreDumpDirectory
La directiva CoreDumpDi r e c t o r y asigna el directorio que Apache intenta
cambiar antes de que se estropee el archivo general. La localizacin por defecto
es el directorio especificado por la directiva S e r v e r R o o t .
Sintaxis: C o r e D u m p D i r e c t o r y
ruta-directorio
Group
La directiva Group debera utilizarse en unin con la directiva U s e r . Group
determina el grupo bajo el cual el servidor responde a las solicitudes. Para utilizar
esta directiva, el servidor debe ejecutarse inicialmente como raz. La directiva
Group puede tener un nmero de grupo como valor asignado. Group busca
nombres de grupo y sus correspondientes valores numricos en su archivo / e t c /
group.
Sintaxis: Group U n i x - g r o u p
Predefinido: Group # - 1
Contexto: Configuracin del servidor, host virtual
Listen
Por defecto, Apache responde a las solicitudes en todas las direcciones IP
adjuntas al servidor, pero slo por la direccin del puerto especificado por la
directiva P o r t . La directiva L i s t e n se puede utilizar para hacer esta situacin
ms configurable. Puede utilizar la directiva L i s t e n para pedirle a Apache que
[IP
address:]
numero-puerto
Predefinido: ninguno
Contexto: configuracin del servidor
A pesar de que se puede utilizar L i s t e n en lugar de B i n d A d d r e s s y
P o r t , podra tener que utilizar la directiva P o r t si su servidor Apache genera
URLs que se dirigen a l mismo.
Se pueden utilizar varias directivas L i s t e n para especificar el nmero de
direcciones y puertos a los que escuchar. El servidor responder a las solicitudes
desde cualquiera de las direcciones y puertos de la lista. Por ejemplo, para conseguir que el servidor acepte conexiones del puerto 80 y del puerto 8080, utilice:
L i s t e n 80
L i s t e n 8080
El siguiente ejemplo, consigue que Apache acepte conexiones en dos direcciones IP y en dos nmeros de puerto:
Listen
Listen
192.168.1.100:80
192.168.1.101:8080
ListenBacklog
La directiva L i s t e n B a c k l o g le permite tomar medidas de defensa contra
un ataque a la seguridad llamado Denegacin de Servicios (DOS), permitindole
que asigne la longitud mxima de la cola de conexiones pendientes. Aumntelo en
caso de que detecte que se encuentra ante un ataque TCP SYN flood (DOS); en
caso contrario, djelo como est.
Sintaxis: L i s t e n B a c k l o g
pendientes
Predefinido: L i s t e n B a c k l o g
511
LockFile
Si compila Apache con la opcin USE_FCNTL_SERIALIZED_ACCEPT o
la opcin USE_FLOCK_SERIALIZED_ACCEPT, se utiliza un archivo de bloqueo. Puede utilizar la directiva L o c k F i l e para asignar la ruta al nombre de
archivo del archivo de bloqueo.
Asegrese de que nicamente el servidor Apache tiene acceso para lectura y
escritura en el archivo.
BEE1
Sintaxis: L o c k F i l e
nombre
Predefinido: L o c k F i l e
archivo
l o g s / a c c e p t . lock
MaxClients
La directiva M a x C l i e n t s limita el nmero de solicitudes simultaneas que
Apache puede servir. Como Apache utiliza un servidor hijo para cada solicitud,
ste es tambin el lmite efectivo para el nmero de servidores hijo que pueden
existir al mismo tiempo.
Sintaxis: M a x C l i e n t s
numero
Predefinido: M a x C l i e n t s
256
MaxRequestsPerChild
Apache lanza un proceso hijo para servir una solicitud; sin embargo, un servidor hijo puede procesar varias solicitudes. El nmero de solicitudes que puede
procesar un servidor hijo est limitado por la directivaMaxReques t s P e r C h i Id.
EEE1
Sintaxis: M a x R e q u e s t s P e r C h i l d
numero
Predefinido: M a x R e q u e s t s P e r C h i l d 0
Contexto: configuracin del servidor
Tras servir el mximo nmero de solicitudes, el proceso hijo termina. Si
M a x R e q u e s t s P e r C h i l d es 0, entonces el proceso nunca termina. Si sospecha que hay bibliotecas en su sistema operativo (por ejemplo, Solaris) que tienen
cdigo de filtrado de memoria, debera asignarle a esta directiva un valor distinto
de cero. Esto le permite definir un ciclo vital para un proceso hijo, reduciendo las
posibilidades de que un proceso consuma memoria filtrada y de que poco a poco
gaste la memoria disponible. Adems le proporciona una pequea carga media
para su sistema, porque la carga relacionada con Apache se reduce a medida que
su servidor Web est menos ocupado.
MaxSpareThreads
La directiva M a x S p a r e T h r e a d s fija el nmero mximo de hilos parados.
El MP1V1 t h r e a d e d trata con los hilos parados en la base de un servidor, que
significa que si hay demasiados hilos parados en el servidor, comienza a destruir
procesos hijo hasta que el nmero de hilos parados es menor que el nmero que se
especifica aqu.
Sintaxis: M a x S p a r e T h r e a d s
nmero
MinSpareThreads
La directiva M i n S p a r e T h r e a d s determina el mnimo nmero de hilos parados. El MPM t h r e a d e d negocia con los hilos parados en la base de un
servidor, lo que significa que cuando hay menos hilos parados que el nmero
especificado aqu, Apache crea nuevos procesos hijo para alcanzar este nmero.
Sintaxis: M i n S p a r e S e r v e r s
nmero
E3
SendBufferSize
La directiva S e n d B u f f e r S i z e fija el tamao de buffer TCP enviado en el
nmero de bytes especificado. En una red de gran rendimiento, asignar a esta
directiva un valor ms alto que el valor por defecto del sistema operativo aumentar el rendimiento del servidor.
Sintaxis: S e n d B u f f e r S i z e
bytes
Predefinido: ninguno
Contexto: configuracin del servidor
StartServers
La directiva S t a r t S e r v e r s fija el nmero de procesos hijo del servidor
Apache que se crean en la puesta en marcha. El nmero de procesos hijo Apache
necesarios para un determinado perodo de tiempo se controla de forma dinmica.
El servidor principal de Apache (el proceso demonio) lanza un proceso hijo nuevo
a medida que encuentra mayor carga de solicitudes.
Las d i r e c t i v a s M i n S p a r e S e r v e r s , M a x S p a r e S e r v e r s y M a x C l i e n t s
controlan el nmero real de procesos hijo. Por lo tanto, tiene poco que ganar
ajustando este parmetro.
Sintaxis: S t a r t S e r v e r s
nmero
Predefinido: S t a r t S e r v e r s 5
Contexto: configuracin del servidor
NOTA: La directiva S t a r t S e r v e r s es til nicamente cuando el servidor Apache se ejecuta como un servidor autnomo. En otras palabras, necesita tener fijado S e r v e T y p e autnomo para que esta directiya sea
efectiva.
Kd
ThreadsPerChild
La versin Windows de Apache es un servidor multihilo. La directiva
T h r e a d s P e r C h i l d le dice al servidor cuntos hilos debera utilizar. Tambin
determina el nmero mximo de conexiones que puede manejar el servidor en un
momento dado. Por lo tanto, este valor debera asignarse en un valor razonablemente elevado para permitir el nmero mximo de xitos.
Sintaxis: T h r e a d s P e r C h i l d
numero
Predefinido: T h r e a d s P e r C h i l d 50
Contexto: configuracin del servidor (Windows)
User
La directiva U s e r asigna el ID de usuario que utilizan los hijos Apache que
sirven solicitudes HTTP. Una vez que se inicia el servidor Apache, lanza procesos hijo para responder a las solicitudes. Sin embargo, estos procesos hijo se
ejecutan como raz. El proceso padre de Apache (a menudo llamado demonio)
cambia el ID del usuario del proceso hijo a cualquiera de los asignados en la
directiva U s e r , siempre que se trate de un ID de usuario vlido.
Sintaxis: U s e r
unix-userid
Predefinido: U s e r # - 1
Contexto: configuracin del servidor, host virtual
Si no inicia el servidor como usuario raz, no podr cambiar el ID de usuario
especificado por la directiva U s e r , y en lugar de eso, continuar ejecutndose
como el usuario original. Si comienza el servidor como raz, entonces es normal
que el proceso padre de Apache se quede ejecutndose como raz; sin embargo,
ejecuta el proceso hijo como el usuario especificado por la directiva U s e r .
i f i w . P ! ii JP f m M J W i i ' T i i i i i
* * r li jp i n . i n
' ^ ^ ^ ^ ^ ^ W P ^ ^ ^ ^ ^ ^ ^ -W''
Tambin puede utilizar los nmeros ID de los usuarios, que puede encontrar
normalmente en el archivo / e t c / p a s s w o r d . Si piensa utilizar un valor numrico en lugar del nombre de usuario real, el nmero debe ir precedido del signo
#. Muchos administradores de Apache utilizan el usuario por defecto n o b o d y
para sus sitios Web. Este usuario no est disponible en todos los sistemas Unix, y
adems no siempre es deseable. Recomiendo encarecidamente que emplee un solo
KEE1
AssignUserID
La directiva A s s i g n U s e r I D asigna un nombre de usuario y un nombre de
grupo a un host virtual.
Sintaxis: AssignUserID nombreusuario nombregrupo
Predefinido: ninguno
Contexto: host virtual
Por ejemplo, a continuacin podemos ver cmo un host virtual llamado
www. af a c t c a t . com es asignado a un usuario m r b e r t y a un grupo llamado
w h e e l . Debe utilizar C h i l d P e r U s e r I D para especificar el nmero de procesos hijo que puede servir este host virtual.
<VirtualHost 192.168.1.100>
ServerName www.afatcat.com
AssignUserID mrbert wheel
#
NOTAr-uri;smygre$tt^^
po, en un sisfemt Wato u ^ r s m ^ y gsoa|Jxiaffie dclJeH star e los
archivos /etc/j&asBwd.y /^c/j^tf^f^^crtivaBoeirte.
ChildPerUserID
La directiva C h i l d P e r U s e r I D asigna un nmero de procesos hijo para un
nombre de usuario y un nombre de grupo dados para un host virtual.
Sintaxis: ChildPerUserID nmerodehi j os nombreusuario
nombregrupo
Predefinido: ninguno
Contexto: host virtual
En el siguiente ejemplo, el host virtual www . af a t c a t . com ser servido por
los procesos hijo de Apache que se ejecutan bajo el nombre de usuario m r b e r t
y el nombre de grupo w h e e l :
ChildPerUserID 10 mrbert wheel
<VirtualHost 192. 168.1.100>
ServerNarae www.afatcat.com
AssignUserID mrbert wheel
#
# Aqu van otras directivas
#
</VirtualHost>
NOTA*
^^r^0Y^^^9^4i^.vgkfia ea $u sistema para que
|^iW4^!4p|^^
jeipto en q sistema Linux
r
iaerft*^ ^S$|^^
arc^vo7etc/passwd
ConnectionStatus
La directiva C o n n e c t i o n S t a t u s determina si la informacin del estado se
almacena internamente o no. Cuando se le asigna el valor on, los mdulos que
utilizan la informacin del estado funcionarn adecuadamente.
MUM
Sintaxis: C o n n e c t i o n S t a t u s On
| Of f
Predefinido: C o n n e c t i o n S t a t u s On
Contexto: configuracin del servidor
CoreDumpDirectory
Ver la directiva C o r e D u m p D i r e c t o r y en la seccin "Directivas especficas de MPM threaded".
Group
Ver la directiva Group en la seccin "Directivas especficas de MPM threaded".
Listen
Ver la directiva L i s t e n en la seccin "Directivas especficas de MPM
threaded".
ListenBacklog
Ver la directiva L i s t e n B a c k l o g en la seccin "Directivas especficas de
MPM threaded".
LockFile
Ver la directiva L o c k F i l e en la seccin "Directivas especficas de MPM
threaded".
MaxRequestsPerChild
Ver l a d i r e c t i v a M a x R e q u e s t s P e r C h i l d en la seccin "Directivas especficas de MPM threaded".
MaxSpareThreads
Ver la directiva M a x S p a r e T h r e a d s en la seccin "Directivas especficas
de MPM threaded".
MaxThreadsPerChild
La d i r e c t i v a M a x T h r e a d s P e r C h i l d determina el nmero mximo de hilos
por hijo. El nmero por defecto es el lmite de harware. Si desea cambiarlo tiene
BH1
que modificar el archivo de cabecera apropiado. Ver la tabla 2.3 del captulo 2
para obtener los detalles.
Sintaxis: M a x T h r e a d s P e r C h i l d
number
Predefinido: M a x T h r e a d s P e r C h i l d 64
Contexto: configuracin del servidor
MinSpareThreads
Ver la directiva M i n S p a r e T h r e a d s en la seccin "Directivas especficas
de MPM threaded".
NumServers
La directiva N u m S e r v e r s determina el nmero de procesos hijo simultneos
que crea Apache.
Sintaxis: N u m S e r v e r s
number
Predefinido: N u m S e r v e r s 2
Contexto: configuracin del servidor
El MPM per-child utiliza el valor asignado por esta directiva para determinar
el nmero de hijos simultneos. El valor por defecto 2 no es el apropiado en todos
los sistemas.
Puede cambiarlo a un valor ms alto como 15 o 20. Cuanto mayor es el nmero, ms procesos Apache se producen, lo que significa que se pueden manejar ms
conexiones simultaneas.
PidFile
Ver la directiva P i d F i l e en la seccin "Directivas especficas de MPM
threaded".
ScoreBoardFile
Ver la directiva S c o r e B o a r d F i l e en la seccin "Directivas especficas de
MPM threaded".
SendBufferSize
Ver la directiva S e n d B u f f e r S i z e en la seccin "Directivas especficas de
MPM threaded".
StartThreads
La directiva S t a r t T h r e a d s determina el conteo inicial de hilos por hijo.
Como los conteos de hijos se controlan dinmicamente, asignar un nmero superior que el asignado por defecto no suele ser necesario.
Sintaxis: S t a r t T h r e a d s
nmero
Predefinido: S t a r t T h r e a d s 5
Contexto: configuracin del servidor
User
Ver la directiva U s e r en la seccin "Directivas especficas de MPM threaded".
CoreDumpDirectory
Ver la directiva C o r e D u m p D i r e c t o r y en la seccin "Directivas especficas de MPM threaded".
Listen
Ver la directiva L i s t e n en la seccin "Directivas especficas de MPM
threaded".
ListenBacklog
Ver la directiva L i s t e n B a c k l o g en la seccin "Directivas especficas de
MPM threaded".
MaxRequestsPerChild
Ver la d i r e c t i v a M a x R e q u e s t s P e r C h i l d en la seccin "Directivas especficas de MPM threaded".
KMcl
PidFile
Ver la directiva P i d F i l e en la seccin "Directivas especficas de MPM
threaded".
SendBufferSize
Ver la directiva S e n d B u f f e r S i z e en la seccin "Directivas especficas de
MPM threaded".
ThreadsPerChild
Ver la directiva T h r e a d s P e r C h i l d en la seccin "Directivas especficas
de MPM threaded".
CoreDumpDirectory
Ver la directiva C o r e D u m p D i r e c t o r y en la seccin "Directivas especficas de MPM threaded".
Group
Ver la directiva Group en la seccin "Directivas especficas de MPM threaded".
Listen
Ver la directiva L i s t e n en la seccin "Directivas especficas de MPM threaded".
ListenBacklog
Ver la directiva L i s t e n B a c k l o g en la seccin "Directivas especficas de
MPM threaded".
1I1
LockFile
Ver la directiva L o c k F i l e en la seccin "Directivas especficas de MPM
threaded".
MaxClients
Ver la directivaMaxClients en la seccin "Directivas especficas de MPM
threaded".
MaxRequestsPerChild
Ver la d i r e c t i v a M a x R e q u e s t s P e r C h i l d en la seccin "Directivas especficas de MPM threaded".
MaxSpareServers
Esta directiva le permite determinar el nmero de procesos hijo de Apache
inactivos en su servidor.
Sintaxis: M a x S p a r e S e r v e r s
nmero
Predefinido: M a x S p a r e S e r v e r s
10
MinSpareServers
La directiva M i n S p a r e S e r v e r s determina el nmero que deseamos tener
de procesos hijo inactivos en el servidor. Un proceso inactivo es aquel que no est
manejando ninguna solicitud. Si hay menos procesos Apache inactivos que el
nmero especificado en la directiva M i n S p a r e S e r v e r s , entonces el proceso
padre crea un nuevo hijo a una velocidad mxima de 1 por segundo. Slo es
necesario ajustar este parmetro en el caso de sitios realmente visitados. A no ser
que sepa lo que hace, no cambie el valor por defecto.
Sintaxis: M i n S p a r e S e r v e r s
nmero
Predefinido: M i n S p a r e S e r v e r s 5
Contexto: configuracin del servidor
KEE1
PidFile
Ver la directiva P i d F i l e en la seccin "Directivas especficas de MPM
threaded".
ScoreBoardFile
Ver la directiva S c o r e B o a r d F i l e en la seccin "Directivas especficas de
MPM threaded".
SendBufferSize
Ver la directiva S e n d B u f f e r S i z e en la seccin "Directivas especficas de
MPM threaded".
StartServers
Ver la directiva S t a r t S e r v e r s en la seccin "Directivas especficas de
MPM threaded".
User
Ver la directiva U s e r en la seccin "Directivas especficas de MPM threaded".
EUM
Mdulos
Apache
En este captulo
1. Aprendemos a utilizar los mdulos de entorno.
2. Aprendemos a utilizar los mdulos de control de acceso y autentificacin.
3. Aprendemos a utilizar los mdulos de generacin de contenido dinmico.
4. Aprendemos a utilizar los mdulos de listado de directorios.
5. Aprendemos a utilizar los mdulos de tipo de contenido.
6. Aprendemos a utilizar los mdulos de generacin de contenido dinmico.
7. Aprendemos a utilizar los mdulos de cabecera de respuesta.
8. Aprendemos a utilizar los mdulos de informacin y registro de servidores.
9. Aprendemos a utilizar los mdulos de integracin de URL.
10. Aprendemos a utilizar otros mdulos.
Anteriormente, hemos discutido las directivas del mdulo general y de los
mdulos multiproceso (MPM). Apache ofrece muchas ms directivas, las cuales
KIA1
estn disponibles en los mdulos distribuidos en la fuente estndar. Estos mdulos aportan una gran cantidad de funcionalidad mediante la utilizacin de directivas. Este captulo discute estos mdulos y sus directivas.
Control de autentificacin y de acceso: estas directivas le permiten autentificar y autorizar el acceso a usuarios, para restringir partes de su sitio
Web.
ldtl
Funcin
mod env
mod s e t e n v i f
Asigna variables de entorno condicionales utilizando informacin del lado del cliente.
mod_unique_id
mod_env
mod e n v est compilado por defecto. Le permite pasar variables de entorno
a programas externos como los scripts CGI, SSI, scripts m o d _ p e r l , scripts
PHP, y similares, m o d - e n v tiene las siguientes directivas.
PassEnv
La directiva P a s s E n v le dice al mdulo que pase una o ms variables de
entorno desde el propio entorno del servidor a los scripts CGI y SSI.
Sintaxis: PassEnv variable [...]
Contexto: configuracin del servidor, host virtual
Por ejemplo, la siguiente directiva pasa las variables de entorno HOSTTYPE
y PATH a programas.
SetEnv
La directiva S e t E n v asigna un valor determinado a una variable de entorno,
que se pasa a scripts CGI/SSI.
nicamente puede definir un par de variable y el valor por cada directiva
SetEnv.
Sintaxis: S e t E n v v a r i a b l e
valor
UnsetEnv
La directiva U n s e t E n v elimina una o ms variables de entorno de las que se
han pasado a los scripst CGI/SSI. Se puede utilizar para asegurar que ciertas
variables de entorno que estn disponibles para el servidor Apache, no lo estn en
sus scripts CGI.
Sintaxis: U n s e t E n v v a r i a b l e [ . . . ]
Contexto: configuracin del servidor, host virtual
Por ejemplo, la siguiente directiva U n s e t E n v elimina la variable
CURRENT STATE de la lista de variables de entorno:
UnsetEnv
CURRENT_STATE
mod_setenvif
El mdulo m o d s e t e n v i f est compilado en Apache por defecto. Le permite crear variables de entorno personalizadas utilizando informacin de una
solicitud HTTP. Puede utilizar esta informacin en la reescritura de las URL o
redirigir a los usuarios a pginas distintas.
BrowserMatch
La directiva B r o w s e r M a t c h asigna y borra la asignacin de variables de
entorno personalizadas cuando una expresin regular coincide con un patrn encontrado en la cabecera de una solicitud HTTP U s e r - A g e n t . Los clientes Web
envan la cabecera U s e r - A g e n t como si fueran navegadores Web, robots Web
y similares.
Sintaxis: B r o w s e r M a t c h
regex
v a r i a b l e [=value]
[...]
Ijavascript
Kf;VJ
BrowserMatchNoCase
La directiva B r o w s e r M a t c h N o C a s e es la misma que la directiva
B r o w s e r M a t c h , excepto en que proporciona coincidencia sin distinguir entre
maysculas y minsculas en expresiones regulares.
Sintaxis: B r o w s e r M a t c h N o C a s e
[ . ]
regex
v a r i a b l e [=value ]
~MSIE vbscript=yes
SetEnvIf
Al igual que las directivas B r o w s e r M a t c h y B r o w s e r M a t c h N o C a s e , la
directiva S e t E n v I f le permite asignar y borrar variables de entorno
personalizadas. En realidad, B r o w s e r M a t c h y B r o w s e r M a t c h N o C a s e son
dos versiones especiales de S e t E n v I f. Estas dos directivas nicamente pueden
funcionar en la expresin regular del campo de la cabecera de la solicitud HTTP
U s e r - A g e n t , mientras que S e t E n v I f se puede utilizar para todos los campos de las cabeceras de la solicitud, al igual que otros tipos de informacin relacionada con la solicitud, como el nombre del host remoto ( R e m o t e H o s t ) , la
direccin IP remota (Remote_Addr), el mtodo de la solicitud ( R e q u e s t ^
Method), el URI solicitado ( R e q u e s t _ U R I ) , y el referer o la direccin desde
la cual un internauta llega a su pgina ( R e f e r e r ) .
Sintaxis: S e t E n v I f a t t r i b u t e r e g e x e n v a r [ = v a l u e ]
[...]
SetEnvIfNoCase
La directiva S e t E n v I f N o C a s e es la misma que S e t E n v I f , excepto en
que proporciona coincidencia sin distinguir entre maysculas y minsculas en
expresiones regulares.
W&l
Sintaxis: SetEnvIfNoCase a t t r i b u t e
[=value]
[...]
Contexto: configuracin del servidor
regex
variable
mod_unique_id
El mdulo m o d _ u n i q u e _ i d proporciona un toque mgico para cada solicitud que tenga garantizado ser la nica a lo largo de "todas" las solicitudes bajo
condiciones muy especficas. El identifcador es el nico a lo largo de varias
mquinas en un grupo de configuracin de mquinas adecuado. La variable de
entorno UNIQUE_ID est asignada al identifcador para cada solicitud. No hay
directivas para este mdulo.
Mdulo
Funcin
mod auth
mod auth db
mod auth_digest
iri
Mdulo
Funcin
mod access
Este mdulo le permite autorizar el acceso utilizando el nombre del host o la direccin IP.
mod_auth_anon
El mdulomod_auth_anon permite el acceso annimo a reas autentificadas.
Si est familiarizado con los servidores FTP annimos, se trata de un sistema
muy parecido. Todos los usuarios pueden utilizar un ID de usuario denominado
"annimo" y su direccin de correo electrnico como contrasea para entrar. La
direccin de correo electrnico introducida se almacena en los archivos de registro y se puede utilizar para seguir la pista de usuarios o para crear listas de correo
electrnico de futuros clientes. Tiene que permitir este mdulo utilizando la opcin - - e n a b l e - a u t h - a n o n en el script de configuracin de la distribucin
de la fuente, y compilando e instalando Apache.
Anonymous
Utilizando la directiva Anonymous puede especificar uno o ms nombres de
usuario que se pueden utilizar para acceder al rea. Es una buena idea mantener el
nombre de usuario "annimo" en la lista elegida, porque est fuertemente asociado con el acceso annimo. Si el nombre de usuario que ha elegido tiene algn
espacio, asegrese de que el nombre de usuario est rodeado por comillas.
Sintaxis: Anonymous u s e r u s e r
. . .
AnonymousAuthoritative
Cuando se asigna el valor on, la autentificacin annima se convierte en el
esquema de autentificacin completo para un directorio. En otras palabras, si
WlM
tiene varios requisitos de autentifcacin para un directorio y adems tiene asignada esta directiva, entonces se ignorarn el resto de los mtodos.
Sintaxis: A n o n y m o u s _ A u t h o r i t a t i v e On
Predefinido: A n o n y m o u s _ A u t h o r i t a t i v e
Of f
Of f
AnonymousLogEmail
Cuando asignamos el valor on a la directiva A n o n y m o u s L o g E m a i l ,
cualquiera que sea la entrada en el campo de la contrasea de la ventana de
autentifcacin del navegador, se registrar en el archivo de registro de accesos de
Apache.
Sintaxis: Anonymous_LogEmail On
| Of f
Predefinido: Anonymous_LogEmail On
Contexto: directorio, archivo de control de acceso en el mbito de directorios ( . h t a c c e s s )
Invalidar: AuthConf ig
AnonymousMustGiveEmail
Cuando asignamos el valorOn, la directiva Anonymous M u s t G i v e E m a i l
permite que el mdulo rechace solicitudes de acceso que no proporcionan las
contraseas en la forma de una direccin de correo electrnico.
Sintaxis: A n o n y m o u s _ M u s t G i v e E m a i l On
Of f
ADVERTENCIA: No debe confiaren tas direcciones de correo electrnico que i n t r < > o ^ l a ^
porque esa n*A l a V | ^ ^ ^ t ^ ^ ^ ^ ^ ^ ' ^ ^ ^ c ^ q {
correo
electrnico.'
""'',- '"".!':Anonymous_NollserlD
Si quiere que los usuarios dejen el campo del nombre de usuario de la ventana
pop-up vaco, asigne el valor On a la directiva Anonymous NoUserID; en
Anonymous_VerifyEmail
Cuando la directiva A n o n y m o u s V e r i f y E m a i l est fijada con el valor
on, necesita que la contrasea sea una direccin vlida de correo electrnico. Sin
embargo, la verificacin de validez es limitada. El mdulo nicamente comprueba
el smbolo @ y el punto (.) en el campo de la contrasea. Si la contrasea
introducida tiene ambos smbolos, es aceptada.
Sintaxis: A n o n y m o u s _ V e r i f y E m a i l On
Predefinido: A n o n y m o u s _ V e r i f y E m a i l
Of f
Of f
mod_auth_dbm
La autentificacin basada en texto sencillo (utilizando m o d _ a u t h ) es ineficaz en procesos de alta velocidad y podra afectar negativamente al rendimiento
de servidor Web cuando necesitan acceso autenticado una gran cantidad de usuarios (ms de 2000) a secciones Web restringidas. El mdulomod_auth_dbm es
la mejor eleccin en este tipo de casos. El mdulo mod_auth_dbm utiliza archivos DBM en lugar de archivos de texto para almacenar datos. Un archivo DBM
es un tipo especial de archivo de datos que permite un acceso aleatorio a los datos
almacenados ms rpido.
KIsVJ
NOTA: En realidad ai tiene p a n cantidad de usuarios, considere la autentificacin basada en mod_auh;jTvysql ei'Apache:: AuthDBl que
se discute en prximos captulos. La autentificacin basada en DBM se
recomienda nicamente si no puede utilizar una base de datos.
Un archivo DBM almacena registros de datos en un par clave=valor y mantiene una tabla de ndices computada para las claves en el archivo. Utilizando la
tabla de ndices en un archivo DBM, es posible recuperar los registros asociados
con la clave de en menos tiempo que el necesario para analizar un archivo de texto
importante con miles de registros. Hay muchos DBM disponibles, siendo los ms
comunes GDBM, NDBM, SDBM, y Berkeley DB (BSD-DB). La tabla 5.3 muestra una lista de caractersticas para estos DBM.
Tabla 5.3. Caractersticas de DBM
Caractersticas
NDBM
SDBM
GDBM
BSD-DB
Restricciones de licencia
Desconocido
No
No
No
No
No
4K
1K
Ninguno
Ninguno
No
Velocidad
Desconocida
Baja
Media
Rpida
Tamao de la base
de datos
Desconocido
Pequeo
Grande
Medio
Tamao de cdigo
Desconocido
Pequeo
Grande
Grande
La fuente se encuentra
junto con Perl
No
No
No
@AnyDBM_File::ISA = qw(GDBM_file,
DB_File,
NDBM__File)
Esto le muestra una lnea de sintaxis con todas las opciones posibles.
1F1
El script le pedir que introduzca (una reentrada) una contrasea para el usuario r e a d e r . Una vez que lo ha hecho, aadir el nombre de usuario y encriptar
la contrasea para el archivo DBM myuserdbm. No utilice la opcin add para
aadir un usuario, porque no encripta la contrasea. Para ver una lista de usuarios en un archivo DBM, utilice el script siguiente:
./dbmmanage
/path/to/your/dbmfile view
Una vez que tiene recompilado Apache con soporte DBM, puede utilizar el
mdulo mod_auth_dbm para proporcionar autentifcacin HTTP B a s i c basada en DBM. Observe que para Berkeley DB tiene que utilizar m o d _ a u t h _ d b
en lugar de mod_auth_dbm.
El mdulomod_auth_dbm proporciona las directivas AuthDBMUserFile,
AuthDBMGroupFile y A u t h D B M A u t h o r i t a t i v e . Vamos a ver cada una
de estas directivas y algunos ejemplos en los que se utiliza el mdulo
mod_auth_dbm.
AuthDBMUserFile
La directiva A u t h D B M U s e r F i l e asigna el fully qualified pathname (nombre completo de la ruta de una mquina incluido, su dominio) de un archivo DBM
para utilizarlo como el archivo de usuario para la autentifcacin DBM. El archivo contiene un par clave=valor para cada registro, en el que el nombre de usuario
es la clave y la contrasea encriptada c r y p t () es el valor. Observe que cada
campo en el registro est separado por dos puntos, y se puede adjuntar un dato
arbitrario despus del nombre de usuario inicial y los campos de contraseas.
Sintaxis: A u t h D B M U s e r F i l e
nombre
archivo
AOT
?"". V-
WMM
nombre
archivo
AuthDBMAuthoritative
Cuando utilizamos varios esquemas de autentifcacin como mod_dbm y el
estndar m o d _ a u t h en el mismo directorio, puede utilizar la directiva
A u t h D b m G r o u p F i l e para determinar si mod_auth_dbm es el esquema de
autentifcacin completo.
Sintaxis: A u t h D B M A u t h o r i t a t i v e
On | Of f
Predefinido: A u t h D B M A u t h o r i t a t i v e On
Contexto: directorio, archivo de control de acceso en el mbito de directorios ( . h t a c c e s s )
Invalidar: AuthConf ig
El valor por defecto de la directiva, permite que mod_auth_dbm se convierta en la autentifcacin completa para el directorio.
Por eso, si la autentifcacin basada en DBM falla para un usuario determinado, las credenciales del mismo no se pasan al esquema de autentifcacin de menor nivel.
Cuando asignamos el valor off, las credenciales de una autentifcacin fallida se pasan al siguiente nivel de autentifcacin.
TRUCO: Un uso habitual de este mdulo es en unin con tino de los mdulos bsicos a u t h , comoeImod_auth. c. Mientras que este mdulo DBM
sustituye el conjunto de verificaciones de credenciales de usuario, unos
cuantos (administrador) accesos relacionados caen directamente a un nivel
inferior con el archivo . h t p a s s w d bien protegido.
A continuacin, vamos a ver un ejemplo de cmo puede utilizar un nombre de
usuario y una contrasea basados en DBM. Suponiendo que tiene creado el archivo DBM de usuario, est capacitado para restringir el acceso a cualquier directorio Web. En el siguiente ejemplo, supongo que el archivo DBM de usuarios es /
w w w / s e c r e t s / m y u s e r d b m . Puede aadir el esquema de autentificacin al
servidor global o virtual utilizando un contenedor < Di r e c t o r y >, o puede utilizar el archivo . h t a c c e s s , n o hay diferencia. El ejemplo de configuracin es el
siguiente:
AuthName "Apache Server Bible Readers Only"
AuthType Basic
AuthUserDBMFile /www/secrets/myuserdbm
require valid-user
mod_auth_db
Si su sistema no es capaz de utilizar DBM, pero est disponible el soporte de
Berkeley DB, puede utilizar m o d _ a u t h _ d b para utilizar archivos DB en lugar
de los mdulos DBM de Apache. Este mdulo no est compilado en la distribucin estndar de Apache.
Antes de configurar Apache con el mdulo de autentificacin basado en archivos DB, asegrese de que sabe dnde estn almacenados los archivos DB en su
sistema. Por ejemplo, en un sistema Linux, los archivos se encuentran en el directorio estndar / u s r / l i b . Si su sistema no tiene las bibliotecas DB, tendr que
obtener el cdigo fuente y compilar primero el soporte DB. Puede encontrar informacin sobre las bibliotecas DB en www . s l e e p y c a t . com.
Una vez que se ha asegurado que su sistema tiene bibliotecas DB, puede proceder a la reconfguracin y la recompilacin de Apache. Utilice la opcin -e n a b l e - d b con el script c o n f i g u r e para configurar la fuente Apache para
AuthDBUserFile
La directiva A u t h D B U s e r F i l e asigna el fully qualified pathname (nombre
completo de la ruta de una mquina incluido su dominio) del usuario del archivo
DB que contiene la lista de usuarios y las contraseas encriptadas.
Sintaxis: A u t h D B U s e r F i l e
nombre
archivo
chivo*.
^ > -
' '
*-\--*:
'"-'*
AuthDBGroupFile
La directiva A u t h D B G r o u p F i l e asigna el fully qualified pathname (nombre completo de la ruta de una mquina incluido su dominio) del archivo de grupo
DB, que contiene la lista de grupos de usuarios para la autentifcacin de usuarios. Al igual que su DBM equivalente, el archivo de grupo utiliza el nombre de
usuario como llave y la lista de grupos separados por comas como valor. No debe
haber espacios entre el valor, y nunca puede contener los dos puntos.
Sintaxis: A u t h D B G r o u p F i l e
nombre
archivo
AuthDBAuthoritative
Cuando utiliza varios esquemas de autentificacin c o m o m o d d b , mod_dbm
y el estndar m o d _ a u t h en el mismo directorio, puede utilizar la directiva
A u t h D B A u t h o r i t a t i v e para determinar si m o d _ a u t h _ d b es el esquema
de autentificacin completo.
El valor por defecto de la directiva permite que m o d _ a u t h _ d b se convierta
en la autentificacin completa para el directorio. Por eso, si la autentificacin
basada en DB falla para un usuario determinado, las credenciales de este usuario
no se pasan al esquema de autentificacin de nivel inferior. Cuando se asigna el
valor Of f, las credenciales de una autentificacin fallida se pasan al siguiente
nivel de autentificacin.
Sintaxis: A u t h D B A u t h o r i t a t i v e On
Of f
Predefinido: A u t h D B A u t h o r i t a t i v e On
Contexto: directorio, archivo de control de acceso en el mbito de directorios ( . h t a c c e s s )
Invalidar: AuthConf ig
Funcin
mod
cgi
mod
include
Filtro SSI.
mod
actions
mod
ext
filter
mod actions
El mdulo mod a c t i o n s est compilado por defecto, mod a c t i o n s le
permite ejecutar un script de Perl basado en el tipo MIME o en el mtodo de la
solicitud HTTP. Ofrece las directivas siguientes.
Action
La directiva A c t i o n le permite asociar una accin a un tipo MIME determinado. La accin es normalmente un script CGI que procesa el archivo que se ha
solicitado. Esto le permite ejecutar un script CGI para un tipo MIME dado.
Sintaxis: A c t i o n MIME_type
cgi_script
Invalidar: F i l e l n f o
Por ejemplo, la siguiente directiva hace que Apache ejecute el script especfico
cada vez que se solicita un archivo HTML:
Action
text/html
/cgi-bin/somescript.pl
El script recibe la URL y la ruta del archivo del documento solicitado mediante el CGI PATH_INFO estndar y las variables de entorno PATH_TRANSLATED.
Esto puede ser til en el desarrollo de los scripts de filtro. Esta seccin discute
uno de estos scripts de filtro. Cuando se solicita un archivo de texto ( . t x t )
mediante la Web, aparece en el navegador Web en un formato muy poco deseable,
porque la mayora de los navegadores no pueden traducir los saltos de lnea.
Normalmente, la mayor parte de los archivos de texto aparecen como grandes
prrafos. Utilizando la directiva A c t i o n , puede encontrar una solucin mucho
mejor. Para tener un ejemplo ms interesante, vamos a imaginar que quiere desarrollar una solucin que no slo muestre mejor el archivo de texto en el navegador
Web sino que, adems, inserte un mensaje copyright al final de cada archivo de
texto. Para llevar esto a cabo, necesita hacer dos cosas. Primero, aadir la siguiente directiva en el archivo h t t p d . conf:
Action plain/text
/cgi-bin/textfilter .pl
#
# Funcin: Este script de filtro convierte archivos de texto
#
en un documento HTML pero mantiene la composicin del
#
texto.
#
# Copyright (c) 2001 by Mohammed J. Kabir
#
# Licencia: GPL
#
# El archivo del mensaje copyright se almacena siempre en
# el directorio raiz de documentos del servidor
# y se llama copyright.html.
#
my $copyright_file = $ENV{DOCUMENT^ROOT} . "/copyright.html";
# Obtiene la ruta del documento solicitado
my $path_translated = $ENV( PATH_TRANSLATED} ;
# Otras variables necesarias para almacenar datos
my $line;
my @text;
my @html;
# Almacena la informacin de la ruta y el nombre del archivo del
# documento solicitado en un array
@filename = split(l\lI, $path_translated) ;
# Como se utilizan etiquetas HTML para mostrar el archivo de
texto,
# vamos a imprimir la cabecera de contenido text/html.
print "Content-type: text/html\n\n";
# Lee el documento solicitado y almacena los datos
# en la variable array @text
@text = SreadFile($path_translated) ;
# Ahora imprime las siguientes etiquetas de documento HTML.
# Estas etiquetas se enviarn antes que el contenido del
# verdadero documento
#
print <<HEAD;
<HTML>
<HEAD> <TITLE>$filename[-1] </TITLE> </HEAD>
<BODY BGCOLOR="white">
<BLOCKQUOTE>
<PRE>
HEAD
# Ahora imprime cada linea almacenada en el array @text
# (es decir, el contenido del documento solicitado)
#
foreach Sline (@text) { print $line; }
# Ahora lee el archivo copyright y almacena el contenido
BZ1
IB1
itoMMii&w'" tyyilte-^
;
1 AtNT- Effcfo
]**
- .
-,
f!
; ir
so- &- *
dB
n
n
n
n
nnnn
H A C K E R
' . . - . I -
Mamtf
Como puede ver, el nombre del archivo solicitado, aparece como el ttulo. El
documento se encuentra entre comillas, y se imprime un mensaje de texto personalizado. El archivo del mensaje copyright se almacena en el directorio raz de
documentos. El archivo utilizado en este ejemplo es:
</PRE>
<BLOCKQUOTE>
<CENTER>
<HR>
C o p y r i g h t 2001 Mohammed J.
</CENTER>
</BODY>
</HTML>
Kabir
(kabir@mobidac.com})
Script
La directiva S c r i p t es como la directiva A c t i o n , pero en lugar de asociar
una accin con el tipo MIME, lo asocia con una solicitud HTTP como GET,
POST, PUT o DELETE. El script CGI recibe la URL y la ruta del archivo del
documento solicitado utilizando las variables de entorno estndar CGI PATHINFO
y PATH_TRANSLATED.
Sintaxis: S c r i p t
method
cgi-script
POST
/cgi-bin/deafult_post.pl
IUI
como es habitual, a no ser que tengamos que utilizar la accin por defecto especificada por la directiva.
<FORM METHOD="POST">
Enter ame: <INPT TYPE=TEXT NAME="name" SIZE=25>
<INPUT TYPE=SUBMIT VALUE="Click Here">
</FORM>
ACTION="/cgi-bin/form_processor.pl"
METHOD="POST">
mod_ext_filter
El mdulo m o d _ e x t _ f i l t e r permite a Apache utilizar un programa externo como filtro de entradas y salidas (input y output). Se puede utilizar cualquier
programa que pueda leer una entrada de STDIN y cualquiera que pueda escribir
una salida en STDOUT. Por supuesto, ejecutar un programa externo para procesar una entrada o una salida para cada solicitud es una tarea que consume tiempo
y debe evitarse en un entorno de produccin. Los filtros se desarrollan mejor
utilizando el API (interfaz de aplicacin de programas) de Apache y ejecutando
dentro del proceso del servidor Apache.
ExtFilterDefine
La directiva E x t F i l t e r D e f i n e le permite definir un filtro que el nombre
del filtro especificado en esta directiva puede utilizar ms tarde.
Sintaxis: E x t F i l t e r D e f i n e f i l t e r _ n a m e [ m o d e = i n p u t |
output]
[intype=MIME-type]
[outtype=MIME-type]
[PreservesContentLength]
Contexto: configuracin del servidor
KW1
cmd=/usr/bin/gzip
" /www/mysite/htdocs/mytxts">
SetOutputFilter my_test_filter
AddType text/html
</Directory>
ExtFilterOptions
La d i r e c t i v a E x t F i l t e r O p t i o n s determina opciones de depuracin de errores para el mdulo. Cuando se necesita asignar una depuracin de errores, utiliza
la opcin D e b u g L e v e l .
Fijar esta opcin en 0, que es el valor por defecto, desactiva la depuracin de
errores. Fijar esta opcin en 1 permite las entradas de registro de depuracin de
errores que muestran las opciones. Fijar esta opcin en 9 permite todos y cada
uno de los detalles del proceso de filtrado.
in
Sintaxis: E x t F i l t e r O p t i o n s
NoLogStderr
DebugLevel=n
LogStderr
Contexto: servidor
Mdulo
Funcin
mod mime
mod_mime_magic
Permite a Apache determinar el tipo MIME utilizando los nmeros mgicos (patrones de bytes).
mod__negotiation
Permite a Apache realizar negociacin de contenido enviando el mejor tipo de contenido que el cliente
puede aceptar.
mod_mime
El mdulo mod_mime est compilado por defecto en Apache. Proporciona
clientes con meta informacin sobre documentos. Tambin le permite definir un
manejador para un documento para determinar el modo en el que Apache procesa
el documento.
AddCharset
La directiva A d d C h a r s e t integra una o ms extensiones de archivos a un
carcter MIME fijo. Esto le permite asociar un carcter fijo a una o ms extensiones de archivo.
Sintaxis: A d d C h a r s e t
[ f i l e _ e x t e n s i o n . . .]
charset
f i 1 e_e x t e n s i o n
Contexto: configuracin del servidor, host virtual, directorio, configuracin en el mbito de directorios ( . h t a c c e s s )
Invalidar: F i l e l n f o
KHI
.utf8
AddEncoding
La directiva A d d E n c o d i n g integra una o ms extensiones a un esquema de
codificacin MIME.
En otras palabras, esta directiva asocia un esquema de codificacin a una o
ms extensiones de archivo.
Sintaxis: A d d E n c o d i n g MIME f i l e _ e x t e n s i o n
sion...]
[file_exten-
Contexto: configuracin del servidor, host virtual, directorio, configuracin en el mbito de directorios ( . h t a c c e s s )
Invalidar: F i l e l n f o
Por ejemplo, las siguientes directivas dan lugar a que un archivo llamado
b a c k u p . g z se integre como un archivo x-gzip-encoded, y a que un archivo
llamado t a r b a l l . t a r se integre como un archivo x - t a r - e n c o d e d .
AddEncoding x-gzip gz
AddEncoding x-tar tar
AddHandler
La directiva A d d H a n d l e r define un manejador para una o ms extensiones
de archivo. Cada vez que Apache encuentra un archivo con un manejador definido, permite que el manejador procese el archivo.
Sintaxis: AddHandler h a n d l e r - n a m e f i l e - e x t e n s i o n
e x t e n s i o n ...]
[file-
cgi-script
.cgi
AddLanguage
La directiva AddLanguage integra una lista de extensiones de archivo a un
idioma MIME. Cuando Apache encuentra un archivo con esa extensin sabe qu
idioma soporta el archivo.
Sintaxis: A d d L a n g u a g e M I M E _ l a n g u a g e
[file extensin]
[...]
file_extension
en
.en
.english
AddType
La directiva AddType integra una lista de extensiones de archivo al tipo
MIME de modo que cuando Apache encuentra archivos con esas extensiones sabe
qu tipo MIME utilizar.
Sintaxis: AddType MIME f i l e _ e x t e n s i o n
[ file_extension
DefaultLanguage
La directiva D e f a u l t L a n g u a g e asigna el idioma por defecto.
Sintaxis: D e f a u l t L a n g u a g e
MIME_language
na
<Directory /www/mysite/japanese>
DefaultLanguage . jp
</Directory>
ForceType
La directiva F o r c e T y p e fuerza un tipo determinado de MIME para todos
los archivos en un directorio.
El directorio se puede especificar con un contenedor < D i r e c t o r y > o un
contenedor < L o c a t i o n > .
Sintaxis: F o r c e T y p e MIME_type
Contexto: directorio, archivo de control de acceso en el mbito de directorios ( . h t a c c e s s )
Por ejemplo, la siguiente directiva fuerza el tipo MIME t e x t / h t m l para
todos los archivos en el directorio especificado, independientemente de sus extensiones:
<Directory
/www/nitec/public/htdoes/files/with/no/extensions>
ForceType text/html
</Directory>
SetHandler
La directiva S e t H a n d l e r define un manejador para un directorio o una
localizacin URL. El manejador se utiliza para procesar todos los archivos en el
directorio.
Sintaxis: S e t H a n d l e r
handler_name
RemoveHandler
La directiva R e m o v e H a n d l e r deshace un manejador para un directorio o
para una localizacin URL. Es til para limitar S e t H a n d l e r , que normalmente
se aplica a todos los archivos en el directorio.
Utilizando R e m o v e H a n d l e r puede eliminar manejadores para algunos archivos o, incluso, un subdirectorio.
IkEl
Sintaxis: R e m o v e H a n d l e r
h a n d l e r ame
.mjk
<Directory /www/mysite/htdocs/special>
RemoveHandler .mjk
</Location>
TypesConfig
La directiva T y p e s C o n f i g determina el archivo de configuracin MIME
por defecto. El valor por defecto debera ser adecuado para la mayora de las
instalaciones Apache. Si quiere aadir sus propios tipos MIME, utilice la directiva AddType en lugar de modificar este archivo.
Sintaxis: T y p e s C o n f i g
nombre
Predefinido: T y p e s C o n f i g
archivo
c o n f /mime . t y p e s
mod_m i me_mag ic
El mdulo mod_mime_magic le permite a Apache determinar el tipo de un
archivo MIME comparando unos cuantos bytes del archivo con un valor mgico
almacenado en un archivo. Este mdulo slo se necesita cuando mod_mime no
puede adivinar el tipo MIME de un archivo. En la mayora de los casos, no
necesita este mdulo. Este mdulo tiene una directiva HamadaMimeMagicFile.
Esta directiva permite el mdulo mod_mime_magic y seala el archivo mgico
necesario para este mdulo. La distribucin Apache contiene un archivo mgico
en el subdirectorio conf, por lo que si quiere utilizar este mdulo, fije esta
directiva en c o n f / m a g i c .
KM.-1
Sintaxis: M i m e M a g i c F i l e
magic_f i l e _ f ilename
mod_negotiation
El mdulo m o d _ n e g o t i a t i o n est compilado por defecto. Proporciona
soporte para negociaciones de contenido. En un escenario tpico de negociacin
de contenido, el cliente proporciona informacin sobre el tipo de contenido que
puede manejar, y el servidor intenta proporcionar el contenido ms apropiado. El
servidor lleva esto a cabo con la ayuda de integracin de tipos y e l M u l t i V i e w s .
Un tipomap proporciona una descripcin de documentos. Cada descripcin de
documentos contiene una o ms cabeceras. Puede contener tambin lneas de comentarios que comienzan con un carcter almohadilla (#). Las descripciones de
documentos estn separadas por lneas en blanco. Las cabeceras de descripcin
de documentos son:
Content-Encoding: especifica el tipo de codificacin del archivo. nicamente estn permitidas la codificacin x - c o m p r e s s y x - g z i p .
CacheNegotiatedDocs
La directiva C a c h e N e g o t i a t e d D o c s permite que se almacenen en el cach
los documentos de contenido negociado en servidor proxy. Tenga en cuenta que la
nueva especificacin HTTP 1.1 proporciona mucho ms control para cachear los
documentos negociados, y C a c h e N e g o t i a t e d D o c s no tiene efecto sobre las
respuestas a las solicitudes HTTP 1.1. Esta directiva ha desaparecido prcticamente desde la aparicin de HTTP 1.1. No se recomienda la utilizacin de
CacheNegotiatedDocs.
MhlM
Sintaxis: C a c h e N e g o t i a t e d D o c s
Contexto: configuracin del servidor
LanguagePriority
La directiva L a n g u a g e P r i o r i t y determina el idioma que el servidor va a
preferir en un escenario de bsquedaMultiViews, cuando el cliente no proporciona ninguna informacin sobre sus preferencias de idioma.
Sintaxis: L a n g u a g e P r i o r i t y MIME_language [MIME_language
. . .]
Funcin
mod_dir
mod autoindex
UVJfM
mod dir
El mdulo mod d i r est compilado en Apache por defecto. Utilizando este
mdulo, Apache puede redirigir cualquier solicitud que no incluya ninguna barra
final. Por ejemplo, este mdulo puede redirigir w w w . y o u r s i t e . c o m /
s o m e d i r e c t o r y a w w w . y o u r s i t e . c o m / s o m e d i r e c t o r y / . Adems
proporciona la directiva D i r e c t o r y l n d e x para ayudar con la realizacin de
un ndice del contenido del directorio.
La directiva D i r e c t o r y l n d e x especifica el nombre(s) de los archivos que
Apache debera buscar antes de crear un ndice dinmico de directorios. Los
archivos pueden ser de cualquier tipo, desde un archivo HTML hasta un script
CGI. El valor por defecto permite a Apache buscar el archivo i n d e x . h t m l
para cualquier solicitud que termine con el nombre de un directorio.
Sintaxis: D i r e c t o r y l n d e x l o c a l _ U R L
Predefinido: D i r e c t o r y l n d e x
[ l o c a l URL ...]
index.html
Tenga en cuenta que Apache buscar los archivos en el mismo orden (de izquierda a derecha) en el que aparecen en la configuracin anterior. En otras
palabras, si Apache encuentra i n d e x . h t m l , no buscar i n d e x . h t m ,
we le orne . h t m l o we le orne . htm. Puede especificar un nombre de script CGI
script como el ndice por defecto. Por ejemplo, la siguiente directiva consigue que
Apache ejecute el s c r i p t / c g i - b i n / s h o w _ i n d e x . e g i cada vez que
Apache obtiene la solicitud de un directorio:
Directorylndex
/cgi-bin/show_index.egi
mod_autoindex
El m d u l o m o d _ a u t o i n d e x est compilado en Apache por defecto. Cuando
Apache recibe una solicitud para un directorio, busca uno o ms archivos de
11:1:1
ndices de directorios especificados por la directiva D i r e c t o r y l n d e x . Normalmente este archivo es i n d e x . h t m l o i n d e x . h t m . En ausencia de ese
archivo de ndices, sin embargo, Apache puede generar una lista dinmica de
directorios. Este mdulo le permite controlar el modo en el que Apache crea la
lista dinmica de directorios.
Apache genera dos tipos de ndices dinmicos de directorios: simple y
personalizada. El ndice personalizado y otras muchas opciones de ndices estn
disponibles para este mdulo. Las directivas para m o d _ a u t h o i n d e x son las
siguientes.
AddAIt
Cuando est activada F a n c y l n d e x i n g , esta directiva determina el texto
especificado como una alternativa al icono que se muestra para uno o ms archivos o extensiones de archivos especificados como argumentos. Esto se realiza
para navegadores no grficos como Linx.
Sintaxis: AddAIt
"text"
nombrearchivo
[nombrearchivo
"Pictures"
gif
AddAltByEncoding
Si no quiere asignar un texto alternativo a los nombres de archivo o a las
extensiones de los archivos mediante la directiva AddAIt, puede utilizar la directiva A d d A l t B y E n c o d i n g para asignar ese texto para una o ms codificaciones MIME. Al igual que AddAIt, esta directiva slo se puede utilizar cuando
est activada F a n c y l n d e x i n g .
Sintaxis: A d d A l t B y E n c o d i n g
[MIME_encoding ...]
"text"
MIME_encoding
Kl:kl
Por ejemplo, la siguiente directiva hace que Apache muestre el texto alternativo " C o m p r e s s e d F i l e " ("Archivo comprimido") para todos los archivos de
tipo MIME x - c o m p r e s s .
AddAltByEncoding "Compressed File" x-compress
AddAltByType
Al igual que la directiva A d d A l t B y E n c o d i n g , la directiva AddAltByType
asigna texto alternativo para un archivo, en lugar de un icono para
F a n c y I n d e x i n g . Sin embargo, utiliza un tipo MIME en lugar de codificacin
MIME.
Sintaxis: AddAltByType " t e x t " MIME-type
[MIME_type ...]
AddDescription
La directiva A d d D e s c r i p t i o n asigna un texto descriptivo para un nombre
de archivo, a un nombre de archivo parcial o a un nombre de archivo comodn
cuando est activada F a n c y l n d e x i n g .
Sintaxis: A d d D e s c r i p t i o n " t e x t " f i l e
f i l e ... ]
Addlcon
La directiva A d d l c o n le permite asignar iconos a nombres de archivos y de
directorios que se muestran para F a n c y l n d e x i n g .
Sintaxis: A d d l c o n i c o n o nombre a r c h i v o
BfcM
[nombrearchivo
.gif
.jpg .bmp
Si adems, quiere proporcionar texto alternativo para la extensin de los archivos de la lista, puede utilizar un formato del siguiente tipo, en donde IMG es el
texto alternativo que se muestra en los navegadores no grficos:
Addlcon
(IMG,
/icons/picture.gif)
.gif
-jpg .bmp
AA
DIRECTORY AA
De igual manera, si quiere mostrar un icono para cada lnea en blanco mostrada por el esquema de ndice personalizada, puede utilizar:
Addlcon
/path/to/your/blank/line/icon
AA
BLANKICON AA
AddlconByEncoding
La directiva AddlconByEncoding le deja asignar iconos a las codificaciones
MIME. En otras palabras, puede asignar una imagen de un icono a un tipo MIME.
Sintaxis: A d d l c o n B y E n c o d i n g
[MIME_encoding...]
icon_file
MIME_encoding
Indexes
/icons/zip.gif
x-gzip
AddlconByType
La directiva A d d l c o n B y T y p e tambin le permite asignar iconos a uno o
ms tipos MIME.
Sintaxis: A d d l c o n B y T y p e
[MIME t y p e . . . ]
icon_file
MIME_type
(HTML,/icons/html.gif)
text/html
Defaultlcon
Cuando A d d l c o n , A d d l c o n B y E n c o d i n g o A d d l c o n B y T y p e no encuentran asociacin para un determinado archivo, se puede mostrar un icono por
defecto. La directiva D e f a u l t l c o n le permite asignar ese icono.
Sintaxis: D e f a u l t l c o n URL
Contexto: configuracin del servidor, host virtual, directorio, archivo de
control de acceso en el mbito de directorios ( . h t a c c e s s )
Invalidar: I n d e x e s
Por ejemplo, la siguiente directiva muestra i d o n t k n o w . g i f como icono de
cualquier archivo cuya asociacin sea desconocida:
Defaultlcon
/icon/idontknow.gif
Fancylndexing
La directiva F a n c y l n d e x i n g le permite activar y desactivar un ndice personalizado de directorios. Puede obtener el mismo efecto con la directiva
IndexOptions.
Sintaxis: F a n c y l n d e x i n g On | Of f
Contexto: configuracin del servidor, host virtual, directorio, archivo de
control de acceso en el mbito de directorios ( . h t a c c e s s )
Invalidar: I n d e x e s
HeaderName
Si utiliza F a n c y l n d e x i n g , puede insertar contenido de un archivo al principio de la lista de ndices. La directiva HeaderName le permite especificar el
nombre del archivo para tal insercin.
Sintaxis: HeaderName
nombre
archivo
welcome
Indexlgnore
Si necesita que sean visibles algunos archivos o extensiones de archivos en la
lista de directorios, puede utilizar la directiva I n d e x l g n o r e .
Sintaxis: I n d e x l g n o r e
file
[file...]
welcome.html.htaccess
IndexOptions
La directiva I n d e x O p t i o n s especifica el comportamiento de la generacin
automtica de un ndice de directorios.
Sintaxis: I n d e x O p t i o n s
option
[option]
[...]
Lo que hace
Fancyindexing
Activa los ndices de directorios personalizados. Tenga en cuenta que las directivas Fancyindexing e IndexOptions se
invalidan la una a la otra.
KMcl
Opcin
Lo que hace
IconHeight[=pixels'
IconsAreLinks
IconWidth[=pixels]
ScanHTMLTitles
SuppressColumnSorting
SuppressDescription
SuppressHTMLPreamble
comportamiento.
Opcin
Lo que hace
SuppressLastModified
SuppressSize
IndexOrderDefault
La directiva I n d e x O r d e r D e f a u l t le permite cambiar la vista de la lista
de directorios ordenando varios campos como nombre, fecha, tamao y descripcin en los directorios que se han mostrado utilizando la caracterstica
Fancylndexing.
Sintaxis: IndexOrderDefault Ascending | Descending ame
I Date | Size | Description
Contexto: configuracin del servidor, host virtual, directorio, archivo de
control de acceso en el mbito de directorios ( . h t a c c e s s )
Invalidar: I n d e x e s
ReadmeName
Si quiere insertar un archivo al final de la lista de directorios personalizada,
utilice la directiva ReadmeName.
Sintaxis: ReadmeName
nombrearchivo
readme
E3
Modulo
Funcin
mod
asis
mod heade r s
mod
expires
mod
c e r n meta
mod_asis
El mdulo m o d a s i s est compilado por defecto. Este mdulo le permite
enviar un documento tal cual es, en otras palabras, el documento se enva al
cliente sin cabeceras HTTP. Esto puede ser til cuando redirigimos clientes sin
ayuda de ningn script. Para enviar un archivo tal cual es, necesita asegurarse de
que el archivo h t t p d . c o n f contiene una entrada del siguiente tipo:
AddType h t t p d / s e n d - a s - i s
asis
im
Cuando el cliente solicita este archivo, el mensaje de estado 301 le dice que
utilice la informacin de localizacin para redireccionar la solicitud. No tiene que
aadir las cabeceras D a t e : y S e r v e r : , porque el servidor las aade
automticamente. Sin embargo, el servidor no proporciona una cabecera L a s t Modif i e d .
mod_headers
Este mdulo no est compilado por defecto. m o d _ h e a d e r s le permite manipular las cabeceras de respuesta HTTP, y proporciona una sola directiva llamada
H e a d e r , que le permite manipular la cabecera de respuesta HTTP.
Sintaxis: H e a d e r
action
header
valu
Invalidar: F i l e l n f o
Las acciones permitidas son:
Accin
Lo que hace
Set
Add
Aade una cabecera. Puede dar lugar a varias cabeceras con el mismo nombre cuando existen una
o ms cabeceras con el mismo nombre.
Append
Unset
Elimina la cabecera.
mod_expires
El mdulo m o d e x p i r e s no est compilado en Apache por defecto. Le permite determinar el modo en el que Apache trata con cabeceras Expires HTTP en
la respuesta del servidor a las solicitudes. Las cabeceras Expires HTTP le proporcionan una forma de hablarle al cliente sobre el tiempo que tardan los recursos
solicitados en inactivarse. Esto resulta til cuando los documentos estn en la
memoria cach del cliente y ha de solicitarlos de nuevo. La mayor parte de los
clientes determinan la validez de un documento solicitado investigando el tiempo
de expiracin de los documentos en el cach proporcionado por las cabeceras
Expires HTTP. Este mdulo le permite controlar las asignaciones de las cabeceras Expires HTTP.
ExpiresActive
La directiva E x p i r e s A c t i v e activa o inactiva la generacin de la cabecera
Expires. No garantiza que una cabecera Expires se genere. Si no se encuentra el
criterio, no se enva la cabecera.
Sintaxis: E x p i r e s A c t i v e On
| Of f
ExpiresByType
La directiva E x p i r e s B y T y p e especifica el valor de la cabecera Expires
HTTP para documentos de un tipo especifico de MIME-type. El tiempo de
expiracin se determina en segundos. Puede definir el tiempo de dos formas. Si
elige utilizar el formato M s e c o n d s para marcar el tiempo de expiracin, se
utiliza el momento de la ltima modificacin como base. En otras palabras, M3600
significa que quiere que el archivo expire una hora despus de su modificacin.
Por otro lado, si utiliza el formato Ase c o n d s , entonces el momento de acceso de
clientes se utiliza como base de tiempo. A continuacin tenemos algunos ejemplos.
Sintaxis 1: E x p i r e s B y T y p e MIME_type Mseconds | A s e c o n d s
Sintaxis 2: E x p i r e s B y T y p e MIME-type " b a s e _ t i m e [ p l u s ]
num Y e a r s | M o n t h s ] W e e k s | D a y s | H o u r s | M i n u t e s | S e c o n d s "
Contexto: configuracin del servidor, host virtual, directorio, archivo de
control de acceso en el mbito de directorios ( . h t a c c e s s )
Invalidar: I n d e x e s
Las siguientes directivas hacen que todos los archivos de texto expiren una
hora despus de estar en el cach del cliente:
ExpiresByType text/plain A360C
11:1:1
Y las siguientes consiguen que todos los archivos GIF expiren tras una semana
de su ltima modificacin:
ExpiresByType
image/gif M604800
Lo que significa
Access
Now
Modification
Por ejemplo, las siguientes directivas le dicen a Apache que enve cabeceras
para decirle al navegador que los documentos HTML expirarn tras siete das
desde el momento de su acceso y que las imgenes GIF expirarn despus de
cualquier cambio en el archivo o tres horas y diez minutos despus.
ExpiresByType text/html "access plus 7 days"
ExpiresByType image/gif "modification plus 3 hours 10 minutes"
ExpiresDefault
La d i r e c t i v a E x p i r e s D e f a u l t asigna el momento de expiracin por defecto para todos los documentos en el que contexto en que se encuentran especificados. Por ejemplo, si esta directiva est especificada en el host virtual, slo se
aplicar a los documentos accesibles mediante el host virtual. Del mismo modo,
puede especificar esta directiva en un contexto en el mbito de directorios, lo que
permitir que todos los documentos en ese directorio expiren en un intervalo
especfico. Ver E x p i r e s B y T y p e para obtener los detalles de sintaxis.
Sintaxis 1 : E x p i r e s D e f a u l t
Mseconds
Aseconds
Sintaxis 2 : E x p i r e s D e f a u l t
"base_time
[plus]
num
Years|MonthsWeeks|Days|HoursIMinutes|Seconds"
Contexto: configuracin del servidor, host virtual, directorio, archivo de
control de acceso en el mbito de directorios ( . h t a c c e s s )
Invalidar: I n d e x e s
A continuacin tenemos dos ejemplos:
KEE1
ExpiresDefault M3600
ExpiresDefault "access plus 2 days"
mod_cern_meta
El mdulo m o d _ c e r n _ m e t a no est compilado por defecto. Proporciona
soporte para meta informacin. Esta informacin puede consistir en cabeceras
HTTP adicionales como:
Expires:
Saturday,
19-May-01
1 2 : 0 0 : 0 0 GMT
o puede ser cualquier otro tipo de informacin como la que tenemos a continuacin, en la que la meta informacin se almacena en un archivo y aparece junto
con cabecera de la respuesta HTTP:
Foo=Bar
MetaFiles
La d i r e c t i v a M e t a F i l e s activa o desactiva el procesamiento de los archivos
de meta cabecera.
Sintaxis: M e t a F i l e s On | Of f
Predefinido: M e t a F i l e s Of f
Contexto: archivo de control de acceso en el mbito de directorio
( .htaccess)
MetaDir
La directiva M e t a D i r especifica el nombre del directorio que almacena los
archivos meta cabecera. Por ejemplo, si tiene un directorio llamado /www/
m y c o m p a n y / p u b l i c / h t d o c s y quiere almacenar archivos meta cabecera
para ese directorio, necesitara crear un subdirectorio llamado . web si utiliza el
valor por defecto de la directiva M e t a D i r . El directorio . web almacena archivos meta cabecera.
Sintaxis: M e t a D i r
directorio
Predefinido: M e t a D i r
.web
MiU
MetaSuffix
La directiva M e t a S u f f i x especifica la extensin del nombre de archivo
para los archivos de meta informacin. Por ejemplo, si tiene un archivo HTML
llamado mypage . h t m l , entonces necesita crear mypage . h t m l . m e t a (utilizando el valor por defecto de esta directiva) para almacenar sus meta cabeceras.
El archivo mypage . h t m l . m e t a debe residir en el directorio especificado por
la directiva M e t a D i r .
Sintaxis: M e t a S u f f i x
suffix
Predefinido: M e t a S u f f i x
.meta
ESO
Mdulo
config
mod
log
mod
status
mod
info
mod u s e r t r a c k
mod_log_config
Este mdulo se discute en detalle en el captulo 8. Ver la seccin "Crear archivos de registro" en ese captulo para aprender ms cosas sobre este mdulo y sus
directivas.
mod_status
Este mdulo se discute en detalle en el captulo 8. Ver la seccin "Permitir
pginas de estado con m o d _ s t a t u s " en ese captulo para aprender ms cosas
sobre este mdulo y sus directivas.
mod_info
Este mdulo se discute en detalle en el captulo 8. Ver la seccin "Acceder a la
configuracin de acceso con m o d i n f o " en ese captulo para aprender ms
cosas sobre este mdulo y sus directivas.
mod_usertrack
Este mdulo se discute en detalle en el captulo 8. Ver la seccin "Registrar
cookies" en ese captulo para aprender ms cosas sobre este mdulo y sus directivas.
KiU
Funcin
userdir
Le permite acceder a sitios Web personales almacenados en directorios locales del usuario.
moci r e w r i t e
mod
mod
alias
Para integrar distintas partes del sistema de archivos del host en el rbol de documentos y para
redireccionar URL.
mod
speling
mod
vhost
alias
mod_userdir
El mdulo mod u s e r d i r le permite a Apache hacer accesibles directorios
Web especficos de usuario mediante h t t p : / / y o u r _ s e r v e r _ n a m e /
- u s e r n a m e . Si no tiene pensado el soporte de ese tipo de sitios Web, no necesita este mdulo. La directiva U s e r D i r (la nica directiva de este mdulo) le
permite asignar el directorio que Apache debera considerar como raz de documentos para el sitio Web del usuario.
Sintaxis: U s e r D i r
directorio_nombredirectorio
Predefinido: U s e r D i r
public_html
WdlM
/www/users
mod_alias
El mdulo m o d a l i a s est compilado por defecto en Apache. Proporciona
varias directivas que se pueden utilizar para asociar una parte del sistema
de archivos del servidor a otra o, incluso, realizar servicios de redireccin de
URL.
Alias
La directiva Alias le permite asociar una ruta a cualquier sitio de su sistema de
archivos del sistema.
Sintaxis: A l i a s
URL-ruta
ruta
/data/
"/web/data/"
MiM
AliasMatch
La directiva A l i a s M a t c h es parecida a la directiva A l i a s , excepto en que
puede utilizar expresiones regulares.
Sintaxis: A l i a s M a t c h
regex
ruta
/data(
/web/data$l
Redirect
La directiva R e d i r e c t redirige una solicitud URL a otra. Si ha movido una
seccin de su sitio Web a un nuevo directorio o, incluso, a un nuevo sitio Web,
puede utilizar esta directiva para asegurarse de que la gente que tiene el antiguo
sitio Web en la carpeta de favoritos seguir siendo capaz de encontrarlo.
Sintaxis: R e d i r e c t [ s t a t u s _ c o d e ] U R L - a n t i g u a URL-nueva
Contexto: configuracin del servidor, host virtual, directorio, archivo de
control de acceso en el mbito de directorio ( . h t a c c e s s )
Por ejemplo, la siguiente directiva redirige todas las URL solicitadas que contienen la ruta / d a t a a una nueva URL. Por lo tanto, las solicitudes a
w w w . y o u r s i t e . c o m / d a t a / s o m e f i l e . t x t se redireccionarn a
www.your-new-site.com/data/somefi le.txt:
Redirect
/data
www.your-new-site.com/data
Lo que hace
Permanent
Kifci
Cdigo de estado
Lo que hace
Temp
See other
Gone
RedirectMatch
La directiva R e d i r e c t M a t c h es parecida a la directiva R e d i r e c t , pero
acepta expresiones regulares en lugar de una simple URL.
Sintaxis: R e d i r e c t M a t c h
[cdigo-estado]
r e g e x URL
Como ejemplo del modo en el que esto podra funcionar, tenemos que la siguiente solicitud:
http://www.yoursite.com/some/old/dos/files/index.htm
es redirigida a:
http://www.yoursite.com/some/old/dos/files/index.html
RedirectTemp
La directiva R e d i r e c t T e m p es similar a la directiva R e d i r e c t . Permite
al cliente saber que el rediccionamiento es temporal. Tenga en cuenta que la
directiva R e d i r e c t tambin produce un estado temporal por defecto.
Sintaxis: R e d i r e c t T e m p
URL-antigua
URL-nueva
RedirectPermanent
La directiva R e d i r e c t P e r m a n e n t es parecida a la directiva R e d i r e c t .
Permite que el cliente sepa que la redireccin es permanente. Tenga en cuenta que
la directiva R e d i r e c t produce un estado temporal por defecto, pero puede
utilizar el cdigo de estado 301 o la palabra clave p e r m a n e n t .
Sintaxis: R e d i r e c t P e r m a n e n t
URL-antigua
URL-nueva
ScriptAlias
La directiva S c r i p t A l i a s crea un alias para la ruta fsica del directorio.
Adems, cualquier nombre de archivo suministrado en la solicitud es tratado
como un script CGI, y el servidor intenta ejecutar el script.
Sintaxis: S c r i p t A l i a s
alias
"ruta-fisica-directorio"
/cgi-bin/
"/www/nitec/public/cgi-bin/"
ScriptAliasMatch
La directiva S c r i p t A l i a s M a t c h es equivalente a la directiva
S c r i p t A l i a s excepto en que utiliza una expresin regular, que le permite
definir una regla dinmica para alias, en lugar de un alias fijo.
Sintaxis: S c r i p t A l i a s M a t c h
regex
directorio
KiVJ
mod_speling
El mdulo m o d _ s p e l i n g no est compilado en Apache por defecto. Le permite manejar las solicitudes URL mal escritas o con problemas de maysculas y
minsculas. Compara el nombre del documento solicitado con todos los nombres
de documentos en el directorio solicitado que tengan una o ms coincidencias.
En el caso de la solicitud de un documento mal escrito, el mdulo permite un
solo error, como por ejemplo, la insercin de un carcter extra, la omisin de un
carcter o una transposicin. En el caso de errores en las maysculas y minsculas, realiza una comparacin de archivos independiente de maysculas y minsculas. En cualquiera de los dos casos, si el mdulo localiza un solo documento
que se parece realmente al solicitado, lo enva al cliente. Si hay ms de una
coincidencia, le manda al cliente una lista. La nica directiva que ofrece este
mdulo e s C h e c k S p e l l i n g . La directiva C h e c k S p e l l i n g activa o desactiva
el mdulo m o d _ s p e l i ng. Tenga en cuenta que cuando esta activada la correccin ortogrfica, el servidor podra experimentar una prdida de rendimiento debida a la realizacin de bsquedas extra que son necesarias para servir una solicitud
de un documento mal escrito.
Sintaxis: C h e c k S p e l l i n g On
| Of f
Predefinido: C h e c k S p e l l i n g Of f
Contexto: configuracin del servidor, host virtual
'.i
y^^s^e^^s&^i^;L:jr..r^<
mod_vhost_alias
El mdulo mod_vho s t _ a l i a s le permite crear dinmicamente host virtuales
configurados. Este mdulo slo es adecuado para instalaciones Apache que necesiten muchos host virtuales. Por ejemplo, un Internet Service Provider (ISP) utilizando Apache, puede utilizar este mdulo para reducir el trabajo de configuracin
que, de otro modo, sera necesario para cada nuevo cliente del host virtual.
Este mdulo le permite crear configuraciones dinmicas de host virtuales utilizando la direccin IP o el nombre del host de un sitio Web virtual en la creacin
de las rutas fsicas de los directorios necesarias para servir el sitio.
VirtualDocumentRoot
La directiva V i r t u a l D o c u m e n t R o o t le permite asignar la raz de documentos para el host virtual utilizando una ruta de directorios interpolados.
Ea
Sintaxis: V i r t u a l D o c u m e n t R o o t
directorio-interpolado
Off
/www/'&O/htdocs
VirtualDocumentRootlP
La directiva V i r t u a l D o c u m e n t R o o t l P le permite asignar la raz de documentos para el host virtual utilizando una ruta de directorios interpolados, que
se construye utilizando la direccin IP del sitio Web. Este mtodo es conveniente
si utiliza un alojamiento virtual basado en IP, porque tiene una sola direccin IP
para cada sitio Web virtual.
Sintaxis: V i r t u a l D o c u m e n t R o o t l P d i r e c t o r i o - i n t e r p o l a d o
Contexto: configuracin del servidor, host virtual
En la siguiente directiva, por ejemplo, cuando Apache recibe una solicitud
para h t t p : //www. domain . c o m / s o m e p a g e . h t m l , traduce la solicitud a
/www/IP_address_of_www.domain.com/htdocs/somepage.html:
VirtualDocumentRootlP
/www/%0/htdocs
K&l
VirtuaIScriptAlias
La directiva V i r t u a I S c r i p t A l i a s le permite definir un alias de script
(al igual que la directiva S c r i p t A l i a s ) que utiliza una ruta de directorio
interpolado.
Sintaxis: V i r t u a I S c r i p t A l i a s a l i a s i n t e r p o l a t e d _ d i r e c tory
Contexto: configuracin del servidor, host virtual
En la siguiente directiva. Por ejemplo, cuando Apache recibe una solicitud
para h t t p : / / w w w . d o m a i n . c o m / c g i - b i n / s c r i p t _ n a m e , traduce la
solicitud a /www/www . domain . c o m / c g i - b i n / s c r i p t _ n a m e :
UseCanonicalName
VirtuaIScriptAlias
Off
/cgi-bin/
/www/%0/cgi-bin
La directiva U s e C a n o n i c a l N a m e est fijada en off, y necesita que Apache dependa de la cabecera del Host para el nombre del host, cabecera que es
suministrada por todos los clientes Web modernos.
El V i r t u a l D o c u m e n t R o o t es conveniente para los escenarios de alojamientos virtuales basados en nombre, en los que tiene una direccin de IP responsable de muchos sitios Web virtuales.
VirtuaiScriptAliaslP
La directiva V i r t u a l S c r i p t A l i a s IP le permite definir un alias de script
(al igual que hace la directiva ScriptAlias) que utiliza una ruta de directorio
interpolada.
Sintaxis: V i r t u a i S c r i p t A l i a s l P
interpolado
alias
directorio-
Otros mdulos
Los mdulos de esta seccin, mostrados en la tabla 5.11, no se encuentran
dentro de ninguna categora en particular.
BU
Modulo
Funcin
mod
so
mod
imap
mod p r o x y
Convierte a Apache en un servidor proxy con capacidad de caching. Ver el captulo 10 para obtener los detalles.
mod
isapi
mod
file
mod
dav
mod
example
Un ejemplo de desarrollo de un mdulo para aprender a escribir un mdulo de Apache. Slo es til
para los programadores de C.
cache
mod_so
El mdulo mod_so permite a Apache cargar el cdigo ejecutable que necesitan otros mdulos o cargar otros mdulos durante la puesta en marcha del servidor. Puede compilar todos los mdulos como mdulos DSO (Dynamic Shared
Object) excepto ste.
LoadFile
La directiva L o a d F i l e carga el archivo nombrado durante el arranque. Normalmente, se carga un archivo DLL (dynamically linked library) que necesita
otro mdulo utilizando esta directiva (slo en Windows).
Sintaxis: L o a d F i l e n o m b r e a r c h i v o
[nombrearchivo . . . ]
LoadModule
La directiva LoadModule carga un mdulo que se ha compilado como un
DSO.
Sintaxis: LoadModule
module
f ilename
mod_imap
El mdulo m o d i m a p se compila en Apache por defecto. Proporciona soporte de integracin de imgenes, que ha sido proporcionada por el programa CGI
i m a g e m a p . Puede utilizar la directiva A d d H a n d l e r para especificar el
manejador de i m a p - f i l e (construido en este mdulo) para cualquier extensin
de archivo.
Por ejemplo, la siguiente directiva hace que Apache trate a todos los archivos
que tengan la extensin . map como integracin de imgenes, y los Apache procesa los archivos utilizando el mdulo mod imap:
AddHandler
imap-file map
Los contenidos de un archivo de integracin de imgenes pueden tener cualquiera de las siguientes sintaxis:
directive valu [x,y ...]
directive valu "Men text" [x,y ...]
directive valu x,y ... "Men text"
p o i n t : define un sola coordenada puntual. La directiva p o i n t ms cercana a la coordenada suministrada por el usuario, se utiliza cuando no se
satisface ninguna otra directiva.
100,22
ISMAP SRC="/path/to/
ImapMenu
La directiva ImapMenu determina la accin para una solicitud de un archivo
de integracin de imgenes sin coordenadas vlidas.
Sintaxis: ImapMenu
Unformatted}
(None,
Formatted,
Semi-formatted,
WItM
Accin
Lo que hace
None
Formatted
Semi-formatted
Unformatted
En el men sin formato, se imprimen los comentarios y se ignoran las lneas en blanco.
ImapDefault
La directiva I m a p D e f a u l t define la accin por defecto para la integracin
de imgenes. Este valor por defecto se puede invalidar en el archivo de integracin de imgenes utilizando la directiva por defecto.
Sintaxis: I m a p D e f a u l t
URL}
{Error,
Nocontent,
Map,
Referer,
Lo que significa
URL
Una URL relativa o absoluta. Las URL relativas resuelven en relacin con la base.
Map
Men
Referer
Lo mismo que URL del documento al que se refiere. El valor por defecto es http://servername/ si no
est presente R e f e r e r : header.
Valor
Lo que significa
Nocontent
Error
ImapBase
La directiva ImapBase asigna la base por defecto que se utiliza en los archivos de integracin de imgenes. Esta base asignada se puede invalidar utilizando
la directivabase dentro del archivo de integracin de imgenes. Si esta directiva
no est presente, la base por defecto es h t t p : / / s e r v e r n a m e / .
Sintaxis: ImapBase
{Map,
Referer,
URL}
mod_file_cache
El mdulo mod_f i l e _ c a c h e permite a Apache guardar archivos estticos
frecuentemente utilizados en el cach que no se cambian a menudo. Utilizando
este mdulo, puede cargar un archivo en la memoria o preabrir un archivo y
reducir la cantidad de entradas y salidas en el disco para cada solicitud. Esto
significa que Apache no tiene que leer archivos desde el disco para cada solicitud.
Este mdulo no funciona en todas las plataformas y debera utilizarse nicamente
si est seguro de que ciertos archivos solicitados con frecuencia no se van a
cambiar. Si un archivo cacheado o un archivo preabierto cambia, el servidor
Apache no puede admitir los cambios hasta que no sea reiniciado.
MMapFile
La directivaMMapFile le permite cargar un archivo en la memoria mediante
llamadas sistemticas mmap () . Una vez que se ha cargado un archivo en la
memoria, el servidor no detectar ningn cambio en el archivo fsico. Por lo tanto,
es necesario tener cuidado cuando se utiliza esta directiva. Si cambia un archivo
que se ha cargado previamente en la memoria, asegrese de reiniciar el servidor
Apache.
Sintaxis: MmapFile n o m b r e a r c h i v o
Contexto: configuracin del servidor
[nombrearchivo]
[...]
CacheFile
La directiva C a c h e F i l e preabre un archivo y lo guarda en el cach, de
modo que cuando llega la solicitud, Apache no tiene que realizar llamadas sistemticas para abrir y leer el archivo. Una vez que se ha guardado un archivo en el
cach, cualquier cambio que se quiera realizar en el archivo requerir reiniciar el
servidor Apache.
Sintaxis: C a c h e F i l e n o m b r e a r c h i v o [ n o m b r e a r c h i v o ]
[...]
mod_dav
El mdulo mod_dav le permite utilizar las extensiones WebDAV del protocolo HTTP 1.1. Para aprender ms sobre estas extensiones visite el sitio www.
webdav. org.
Dav
La directiva Dav valida o invalida el mdulo mod_dav. Debe asignarse el
valor On si quiere utilizar la caracterstica WebDAV dentro de un contenedor de
directivas.
Sintaxis: Dav On | Of f
Contexto: directorio
DavLockDB
La directiva DavLockDB asigna el fully qualified pathname (nombre completo de la ruta de la mquina, incluido el dominio) del archivo de bloqueo de
bases de datos.
Sintaxis: DavLockDB n o m b r e a r c h i v o
Contexto: configuracin del servidor, host virtual
DavMinTimeout
La directiva DavMinTimeout fija el intervalo de bloqueo de recursos mnimo en segundos. El valor por defecto asegura que un cliente WebDAV no es
bloqueado (independientemente del tiempo) automticamente por el servidor.
Sintaxis: DavMinTimeout
seconds
Predefinido: DavMinTimeout 0
Contexto: directorio
EU
DavDepthlnf inity
La directiva D a v D e p t h l n f i n i t y permite que una solicitud PROPFIND
con la cabecera D e p t h se fije en infinito. Se recomienda el valor por defecto.
Sintaxis: D a v D e p t h l n f i n i t y On
Predefinido: D a v D e p t h l n f i n i t y
Of f
Of f
Contexto: directorio
WT7M
Parte II
Administrar
sitios Web
BU
Alojar sitios
Web virtuales
En este captulo
1. Conocemos los dos tipos de host virtuales.
2. Creamos host virtuales basados en IP.
3. Creamos host virtuales basados en nombre.
4. Configuramos DNS para host virtuales.
5. Ejecutamos un sitio Web con sus propios privilegios de usuario y de grupo.
6. Manejamos una gran cantidad de host virtuales en un solo servidor Apache utilizandomod_perl.
7. Simplificamos el proceso de creacin de nuevos host virtuales utilizando el
script m a k e s i t e .
8. Manejamos host virtuales utilizando el mdulo mod_v2h y la base de
datos MySQL.
Apache puede atender varios sitios Web desde un nico servidor. Por ejemplo, una compaa Web alojada puede tener un solo servidor Web ejecutando
Apache, que est sirviendo a cientos de sitios Web clientes. Este tipo de sistema
tiene un nombre de host principal y muchos alias IP o nombres de host virtuales.
Un sitio Web atendido mediante este tipo de host virtuales se denomina sitio Web
virtual. El soporte de Apache para sitios virtuales (llamados hosts virtuales) es
impresionante. Este captulo discute el modo de crear varios tipos de host virtuales
y cmo manejarlos utilizando distintas tcnicas.
/cgi-bin/
"/www/main/cgi-bin/"
Alias /images/
"/www/main/htdocs/images/"
<VirtualHost 192.168.1.100>
ServerName vhostl.server.com
ServerAdmin vhostl_guy@vhostl.server.com
DocumentRoot "/www/vhostl/htdocs"
ScriptAlias /cgi-bin/ "/www/vhost1/cgi-bin/"
</VirtualHost>
<VirtualHost 1 92.168.1.110>
ServerName vhost2.server.com
ServerAdmin vhost2 guy@vhost2.server.com
DocumentRoot "/www/vhost2/htdocs"
ScriptAlias /cgi-bin/ "/www/vhost2/cgi-bin/"
Alias /images/ "/www/vhost2/htdocs/images/"
</VirtualHost>
h t t p : / / v h o s t l . s e r v e r . c o m / i m a g e s / p r e t t y _ j p i c . gif, la imagen
se sirve desde el directorio / w w w / m a i n / h t d o c s / i m a g e s . Como
v h o s t 2 . s e r v e r . c o m invalida el alias / i m a g e s / por su cuenta, se sirve
una solicitud similar desde el directorio / w w w / v h o s t 2 / h t d o c s / i m a g e s .
ESI
Varios servidores principales: este mtodo implica la utilizacin de varias configuraciones de servidores Web principales. Este mtodo slo se
recomienda en el caso de que deba mantener archivos de configuracin
separados para host virtuales. Este es el mtodo menos recomendado y es
difcil de usar.
1i
V )
H'J'J
j . . f . . - ..... . ..
;_
'
. .- .i
192.168.1.100
<VirtualHost 192.168.1.100>
ServerName vhostl.domain.com
ServerAdmin someone@vhostl.domain.com
DocumentRoot "/www/vhostl/htdocs"
#
# Aqui se coloca cualquier directiva extra que necesite
#
1*11
</VirtualHost>
<VirtualHost 192.168.1.100>
ServerName vhost2.domain.com
ServerAdmin someone@vhost2.domain.com
DocumentRoot "/www/vhost2/htdocs"
#
# Aqu se coloca cualquier directiva extra que necesite
#
</VirtualHost>
mtodo no tiene ninguna ventaja respecto al mtodo anterior. El siguiente ejemplo muestra tres host virtuales basados en IP.
<VirtualHost 192 . 168.1.1>
ServerName vhostl.server.com
# Aqu se colocan otras directivas
</VirtualHost>
<VirtualHost 192.168.1.2>
ServerName vhost2.server.com
# Aqu se colocan otras directivas
</VirtualHost>
-cVirtualHost
192.168.1.3>
ServerName v h o s t 3 . s e r v e r . c o m
# Aqu s e c o l o c a n o t r a s d i r e c t i v a s
</VirtualHost>
Cada una de estas direcciones IP, deben ir unidas a la interfaz Ethernet apropiada en el servidor. Por ejemplo, la configuracin anterior requiere un sistema
que aloje los sitios Web para tener los siguientes registros DNS en su archivo de
configuracin del servidor DNS.
; Address Records
vhostl.server.com.
vhost2.server.com.
vhost3.server.com.
IN
IN
IN
A 192.168.1.1
A 192.168.1.2
A 192.168.1.3
vhostl.server.com.
vhost2.server.com.
vhost3.server.com.
Cada una de estas direcciones deben estar unidas a una o ms interfaces Ethernet
en el servidor. En un sistema Linux, se pueden unir varias direcciones IP utilizando la tcnica de denominacin IP (aliasing IP). Por ejemplo:
/sbin/ifconfig ethO
192.168.1.1 up
/sbin/ifconfig ethO:0 192.168.1.2 up
/sbin/ifconfig ethO:1 192.168.1.3 up
MMM
mantener distintos archivos de configuracin h t t p d . conf. Por ejemplo, imagine que tiene 16 direcciones IP y que quiere suministrar a 16 clientes (o departamentos) su propio archivo de configuracin h t t p d . c o n f para, que de ese modo,
cada entidad pueda gestionar absolutamente todo por su cuenta e, incluso, crear
un host virtual utilizando los contenedores < V i r t u a l H o s t > dentro de su propio h t t p d . conf.
NOTA: Antes de adentrarse en la aventura de utilizar este mtodo, considere con cuidado, la posibilidad de evitar crear varias instancias de servidores principales utilizando los contenedores < v i r t u a l h o s t > .
El listado 6.2 muestra una versin simplificada de un h t t p d . c o n f (llamado
h t t p d - 1 0 0 . c o n f ) que utiliza la directiva L i s t e n para decirle a Apache que
nicamente sirva la direccin IP 1 9 2 . 1 6 8 . 1 . 1 0 0 , asociada con el sistema que
est ejecutndose. Esto da lugar a la implementacin de un solo host virtual.
Listado 6.2. httpd-100.conf
ServerType standalone
ServerRoot " /usr/local/apache"
PidFile /usr/local/apache/logs/httpd-192.168.1.100.pid
ScoreBoardFile /usr/local/apache/logs/httpd192.168.1.100.scoreboard
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 60
MaxSpareServers 100
StartServers 50
MaxClients 200
MaxRequestsPerChild 0
Port 80
Listen 192.168.1.100:80
User prod
Group prod
ServerName prod.domain.com
ServerAdmin kabir@prod.domain.com
DocumentRoot "/www/prod/htdocs"
ftJ
ServerType standalone
ServerRoot " / u s r / l o c a l / a p a c h e "
PidFile
/usr/loca 1/apache/logs/httpd-192.168.1.101.pid
ScoreBoardFile
/usr/local/apache/logs/httpd192.168.1.101.scoreboard
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 5
MaxSpareServers 10
StartServers 5
MaxClients 10
MaxRequestsPerChild 0
Port 80
Listen 192.168.1.101:80
User stage
Group stage
ServerAdmin lance?stage.domain.com
DocumentP.oot "/www/stage/htdocs"
Una o ms interfaces Ethernet respondiendo a las direcciones IP nombradas. Por ejemplo, en un sistema Lynux, puede unir la interfaz Ethernet
e t h O tanto a 192 . 168 . 1 . 100 como a 192 . 168 . 1 . 101 utilizando
el comando denominacin (aliasing) IP, del siguiente modo:
/sbin/ifconfig ethO 192.168.1.100 up
/sbin/ifconfig ethO:0 192.168.1.101 up
Por supuesto, si un sistema tiene varias interfaces Ethernet y quiere utilizar un servidor principal para cada interfaz, no necesita utilizar alias IP.
Las direcciones IP deben tener nombres de host asociados con ellas. Para
los archivos de configuracin anteriores, la direccin 1 9 2 . 1 6 8 . 1 . 1 0 0
est asociada con p r o d . doma i n . com y la direccin 1 9 2 . 1 6 8 . 1 0 1
est asociada a s t a g e . domain . com.
Un sistema que tenga esas direcciones IP unidas a su interfaz o interfaces,
puede ejecutar dos demonios principales de Apache utilizando los siguientes comandos:
/usr/local/apache/bin/httpd -f
/usr/local/apache/bin/httpd -f
WMM
conf/httpd-100.conf
conf/httpd-101.conf
hostmaster.newdomain.com. (
20011201001
7200
3600
1728000
3600)
Serial YYYYMMDDXXX
refresh
(1 hour) retry
(20 days) expire
(1 hr) minimum ttl
Los servidores DNS utilizan el nmero de serie para determinar si necesitan o no sus registros cacheados. Para entenderlo, en el ejemplo tenemos el
nmero de serie 2 0 0 1 1 2 0 1 0 0 1 , que indica que la ltima actualizacin
tuvo lugar el 12/01/2001 y que su primer (0 01) cambio tuvo lugar ese da.
Si el administrador de DNS cambia la configuracin DNS el da 12/02/
2001, el nmero de serie debera cambiar para reflejar el cambio, de modo
que cualquier servidor DNS remoto que tenga cacheados los registros,
puede comparar nmeros de serie entre la versin cacheada y la nueva
versin, y decidir si descarga los datos DNS nuevos.
La razn de actualizacin nos dice la frecuencia con que deberan actualizarse los registros en el servidor.
La entrada final en SOA, establece que los registros tengan un valor mnimo especificado de tiempo de vida. Tenga en cuenta que todo lo que se
encuentre detrs del punto y coma es tratado como una lnea de comentario
y, por lo tanto, ignorado.
Las siguientes dos lneas no comentadas establecen que los servidores DNS
responsables de n e w d o m a i n . c o m son n s l . d o m a i n . c o m y
n s 2 . domain . com. Si no tiene un segundo servidor DNS, debera considerar el uso de un servicio DNS secundario de terceras partes como es el
http://www.secondary.com.
Mrfil
hostmaster.newdomain.com.(
Serial YYYYMMDDXXX
refresh
(1 hour) retry
(20 days) expire
(1 hr) minimum ttl
; Nombres de servidores
IN NS
nsl.domain.com.
IN NS
ns2.domain.com.
IN MX 10 mail.domain.com.
; CNAME para el alojamiento virtual basado en nombre
www.newdomain.com.
IN
CNAME www.domain.com.
Tenga en cuenta que si tiene varios servidores de correo, puede aadirlos utilizando un esquema sencillo de prioridades. Por ejemplo, imagine que quiere que
todos los correos de newdomain . com vayan a m a i l . domain . cora, y que en
caso de que este servidor est incapacitado, quiere utilizar b k u p m a i l .
d o m a i n . com.
Puede aadir simplemente un segundo registro MX, tal y como se muestra a
continuacin:
IN MX
IN MX
10 mail.domain.com.
20 bkupmail.domain.com.
ID de usuario
ID de grupo
vhost1.domain.com
vhluser
vhlgroup
vhost2.domain.com
vh2user
vh2group
192.168.1.100
<VirtualHost 192.168.1.100>
ServerName vhostl.domain.com
AssignUserID vhluser vhlgroup
#
# Aqui van otras directivas
#
</VirtualHost>
<VirtualHost 192.168.1.100>
ServerName vhost2.domain.com
AssignUserID vh2user vh2group
#
# Aqui van otras directivas
#
</VirtualHost>
ServerType s t a n d a l o n e
ServerRoot " / u s r / l o c a l / a p a c h e "
PidFile
/usr/local/apache/logs/httpd.pid
ScoreBoardFile
/usr/local/apache/logs/httpd.scoreboard
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 5
MaxSpareServers 10
StartServers 5
MaxClients 10
MaxRequestsPerChild 0
Port 80
User httpd
Group httpd
ServerName www.domain.com
ServerAdmin webmaster@domain.com
DocumentRoot "/www/mysite/htdocs"
# Nombre de los Hosts virtuales
NameVirtualHost 192.168.1.100
Include vhostl.domain.com.conf
Include vhost2.domain.com.conf
KcEl
httpd
Esta directiva U s e r toma una sola cadena como valor y, por lo tanto, se puede
escribir del siguiente modo:
<Perl>
$User = " h t t p d " ;
E3
1;
</Perl>
Las directivas que necesitan varios valores, se pueden representar como listas.
Por ejemplo, P e r l M o d u l e A p a c h e :: T e s t O n e Apache :: T e s t T w o , se
puede representar del siguiente modo:
@PerlModule = qw(Apache::TestOne Apache::TestTwo );
U'M
)
elsif ($thisHost =~ /hostjo/) {
# la configuracin de host_b se coloca aqui
$MinSpareServers = 5;
$MaxSpareServers = 10;
$StartServers = 10;
$MaxClients = 50;
}
else (
# la configuracin de host_c se coloca aqui
SMinSpareServers = 3;
$MaxSpareServers = 5;
$StartServers = 5;
$MaxClients = 30;
}
1;
</Perl>
Para hacer este escenario ms interesante, supongamos que tiene distintos host
virtuales para cada uno de los tres host y que le gustara configurarlos de un modo
elegante. Por ejemplo:
<Perl>
# Obtiene el nombre del host utilizando la herramienta Unix
hostname
# y lo almacena en la variable $thisHost.
my SthisHost = Vbin/hostname';
my $thisDomain = 'mydomain.com' ;
my @vHosts = () ;
my SanyHost;
if ($thisHost = ~ /(hostia)/) {
# la configuracin de host_a se coloca aqui
@vHosts = qw(gaia, athena, romeo, juliet, shazam);
} elsif ($thisHost = ~ /host_b/) {
# la configuracin de host_b se coloca aqui
OvHosts = qw(catbart, ratbart, dilbert);
} else {
# la configuracin de host c se coloca aqui
OvHosts = qw(lonelyhost);
}
for $anyHost (@vHosts) {
!
, { $VirtualHost ( "$anyHost . $domainName" } } = {
"ServerName" => "$anyHost.$domainName",
"ServerAdmin" => "webmaster\@$anyHost.$domainName"
I
1;
</Perl>
Una vez que ha creado una configuracin basada en Perl adecuada para sus
servidores Apache, puede comprobar su sintaxis en el cdigo para asegurarse de
que el cdigo es correcto sintcticamente, ejecutando el comando / u s r / l o c a l / a p a c h e / b i n / a p a c h e c t l c o n f i g t e s t . Si hay un error de sintaxis,
ver un mensaje de error en la pantalla. Corrija el error y vuelva a utilizar este
comando para asegurarse de que Apache acepta el cdigo.
Mtf:l
Por ejemplo, para crear un nuevo host virtual llamado n e w s i t e . com, puede
ejecutar m a k e s i t e n e w s i t e . com y el script crea y adjunta la configuracin
h t t p d . c o n f necesaria. Adems, crear los archivos de configuracin DNS
necesarios, utilizando dos plantillas. Para utilizar m a k e s i t e , siga estos pasos.
1. Copie los script m a k e s i t e y los archivos n a m e d . t m p l a t e y
h t t p d . t m p l a t e , en una localizacin apropiada en su servidor. Normalmente yo guardo el m a k e s i t e en el directorio / u s r / b i n , por lo
que se encuentra en mi ruta normal. Recomiendo que cree el directorio /
v a r / m a k e s i t e y que site los archivos n a m e d . t m p l a t e y
h t t p d . t m p l a t e en ese directorio. En los siguientes pasos, supongo
que lo ha hecho.
2. Utilice su editor de texto preferido y modifique el script m a k e s i t e . Tiene que modificar una o ms lneas de las siguientes:
my
my
my
my
my
my
my
my
my
my
my
my
my
my
$MAKESITE_DIR
$USER
$GROUP
$PERMISSION
$BASE_DIR
$HTD0CS
3CGIBIN
$NAMED_PATH
$NAMED_FILE_EXT
$NAMED_TEMPLATE
$NAMED_CONF
$HTTPD_CONF
$VHOST_TEMPLATE
$LOG_FILE
=
=
=
=
=
=
=
=
=
=
=
=
=
'/var/makesite';
'httpd';
'httpd';
'2770';
'/www';
'htdocs';
'cgi-bin';
'/var/named';
'.zone';
"$MAKESITE_DIR/named.tmplate";
'/etc/named.conf';
'/usr/local/apache/conf/httpd.conf';
"$MAKESITE_DIR/httpd.tmplate";
"$BASE_DIR/makesite.log";
Si ejecuta Apache utilizando un usario/grupo distinto de h t t p d , cambie los valores de $USER y $GROUP. Si quiere que los permisos por
defecto del directorio Web sean distintos de 2 7 7 0, entonces cambie el
valor $PERMISSION.
uta Apache utilizando un usario/grupo distinto de h t t p d , cambie los
valores de $USER y $GROUP. Si quiere que los permisos por defecto
del directorio Web sean distintos de 27 7 0, entonces cambie el valor
$PERMISSION.
Si quiere que los directorios de los documentos raz sean distintos de
h t d o c s , cambie SHTDOCS.
KcCl
TRUCO: Si est creando nombre de host virtuales por primera vez, asegrese de que aade N a m e V i r t u a l H o s t I P ^ A d d r e s s como ltima lnea en el archivo h t t p d . c o n f antes de ejecutar el scriptmakes i te por
primera vez.
Adems, compruebe el archivo / e t c / n a m e d . conf; debera ver lo siguiente:
// vhostl.com was created on 2001-04-25-17-25
zone "vhostl.com" {
type master;
file "vhostl.zone";
};
IN SOA vhostl.com.
hostmaster.vhostl.com. (
20010425000
; serial YYYYMMDDXXX
7200
refresh
3600
(1 hour) retry
1728000
(20 days) expire
3600)
; (1 hour) minimal TTL
Reinicie el servidor utilizando el comando k i l l a l l -HUP named. Adems, reinicie el servidor Apache utilizando el comando / u s r / l o c a l / a p a c h e / b i n / a p a c h e c t l r e s t a r t . Debera ser capaz de acceder al nuevo
sitio Web virtual utilizando www . v h o s t l . com/.
La pgina por defecto i n d e x . h t m l se encuentra all para ayudarle a identificar el dominio en la Web.
de
www.fractal.net/
config.m4 seala a / u s r / l o c a l / i r i c l u d e / m y s q l ya / u s r /
l o c a l / l i b / m y s q l para los archivos i n c l u d e y l i b r a r y , respectivamente; por lo que, tuve que corregir la ruta. Edite las rutas si es necesario. Yo tuve que aadir tambin - l z en la lnea LDFLAGS por lo que
qued del siguiente modo LDFLAGS=" $ LDFLAGS - L / u s r /1 i b / m y s q l
- l z -Wl,-R, / u s r / l i b / m y s q l " .
gure.
Una vez que ha compilado Apache conmod_v2h, tiene que utilizar las directivas mod_v2h, que se muestran en la tabla 6.2, en h t t p d . c o n f .
Tabla 6.2. Las directivas de mod v2h
Directiva
Funcin
v2h
v2h
Mysql
Db
v2h_ M y s q l _ T b l
v2h_ M y s q l
Serv
Fld
Mysql
Path
Fld
v2h
v2h_ M y s q l _Host
v2h_ M y s q l J o r t
v2h
Mysql
Pass
v2h
Mysql
User
v2h
Mysql
Env F l d
v2h
PathHead
v2h_ U s e l m a g e
v2h
ImagePath
v2h
DeclineURI
F J Autentificacin
y autorizacin
de visitantes
al sitio Web
En este captulo
1. Autentificamos usuarios utilizando nombres de usuario y contraseas.
2. Autorizamos el acceso utilizando el nombre del host o la direccin IP.
3. Autentificamos con RDBM.
4. Autentificamos utilizando la base de datos MySQL.
5. Autentificamos utilizando el archivo de contraseas / e t c / p a s s w d .
6. Autentificamos utilizando cookies.
Se ha estado dando vueltas mucho tiempo al soporte para la autentificacin
HTTP bsica en Apache. Se han escrito muchos mdulos para proporcionar autentificacin bsica HTTP Apache. En este captulo, vamos a ver los distintos
tipos de autentificacin y la forma de autorizar el acceso al servidor Web, cmo
autentificar usuarios utilizando archivos de contrasea, servidores de bases de
datos, etc., y cmo controlar el acceso restringiendo el acceso mediante direcciones IP o nombres de usuario.
E3
E3
Navegador Web
(1)
(2)
Servidor Web
Ventana pop-up
Nombre de
usuario
Contrasea
Navegador Web
(4)
GET /protected/file
Servidor Web
La cabecera de la
solicitud ahora incluye:
nombre de usuario
y contrasea
Contenido de /protected/file
(5a)
(xito)
(5b)
Lleva a cabo la
comprobacin de
la autentifcacin
Directiva AuthUserFile
Esta directiva asigna el nombre del archivo de texto que contiene los nombres
de usuario y las contraseas utilizadas en la autentificacin HTTP bsica. Esta
directiva requiere que proporcione un fully qualified path (nombre completo de la
mquina incluido el dominio) al archivo, para poder utilizarlo.
Sintaxis:
AuthUserFile
nombrearchivo
/www/mobidac/secrets/.htpasswd
Directiva AuthGroupFile
Esta directiva especifica el archivo de texto que hay que utilizar como la lista
de grupos de usuarios para autentificacin HTTP Basic. El nombre de archivo es
EEE1
la ruta absoluta del archivo de grupo. Puede crear este archivo utilizando cualquier editor de texto.
Sintaxis:
AuthGroupFile
nombrearchivo
nombreusuario
nombreusuario
nombreusuario
[...]
Por ejemplo:
startrek: kirk spock picard data
Directiva AuthAuthoritative
Si esta utilizando ms de un esquema de autentifcacin para el mismo directorio, puede fijar esta directiva con el valor of f para que cuando falle el par
nombre de usuario/ contrasea en el primer esquema, lo pase al siguiente nivel
(inferior).
Sintaxis: A u t h A u t h o r i t a t i v e On
Of f
Predefinido: A u t h A u t h o r i t a t i v e On
Contexto: directorio, archivo de control de acceso en el mbito de directorio ( . h t a c c e s s )
Invalidar: AuthConf ig
Por ejemplo, si est utilizando el mdulo m o d _ a u t h _ m y s q l (que se discutir ms tarde en este captulo) y el mdulo estndar m o d _ a u t h , para proporcionar servicios de autentifcacin, y falla el par nombre de usuario/ contrasea para
uno de ellos, entonces se utiliza, si es posible, el siguiente mdulo para autentificar al usuario. Cuando falla el par nombre de usuario/ contrasea en todos los
mdulos, el servicio vuelve a editar una cabecera de estado 401 y enva una
respuesta de cabecera WWW-Authenticate para volver a realizar una autentifcacin. Sin embargo, si un mdulo determinado autentifica con xito un par nombre
de usuario/ contrasea, los mdulos de nivel inferior nunca reciben el par nombre
de usuario/ contrasea.
Se recomienda que deje el valor por defecto porque no debera disear un
esquema de autentifcacin gradual en el que un usuario pasa al siguiente.
WHM
'mcmb^ii -,n l y /
AuthN^Tne
^Lil.l-jTvpe
"Meiii'o-?r-i)r, y
Au-.;'TTi^rc 11 ?
reqire
Acre-i,-"
B->i"
/ v i w w / :".o::L = t o ' .rr"" n r e r.:,
v ^ld--js?r
</Loc-tiori-'
FH1
/usr/local/apache/bin/htpasswd -c path_to_password_file
username
-c
/www/secrets/.members
porque tendr que aadir o eliminar configuraciones tan rpidamente como los
usuarios (en caso de un sistema ISP) soliciten esos cambios. Utilizando una autentificacin basada en . h t a c c e s s , sin embargo, puede permitir un usuario o
a un departamento crear tantas secciones slo de miembros como ellos quieran sin
su intervencin, una inestimable ayuda para un administrador de sistemas muy
ocupado.
Para utilizar la autentificacin basada en . h t a c c e s s para autentificacin
slo de miembros, siga los siguientes pasos.
1. Aada la siguiente directiva en su archivo h t t p d . conf:
AccessFileName
.htaccess
a:
<Directory />
Options FollowSymLinks
AllowOverride AuthConfig
</Directory>
NOTA: Asegrese de que nicamente el usuario Apache puede leer el archivo . h t a c c e s s (hgalo utilizando la directiva User). Por ejemplo, si
ejecuta Apache como h t t p d , entonces debera ejecutar los comandos
<Location /financial>
AuthName "Members Only"
AuthType
Basic
AuthUserFile /www/mysite/secrets/.financial-team.pwd
require valid-uscr
</Location>
<Location /sales>
AuthName "Members Only"
AuthType
Basic
AuthUserFile /www/mysite/secrets/.sal es-team.pwd
require valid-user
</Location>
Aqu se utiliza el mismo archivo de contrasea . membe r s . pwd para las dos
localizaciones pero cada localizacin utiliza un grupo distinto. El archivo de
grupo es comn porque un archivo de grupo puede contener varios grupos. El
archivo de grupo / w w w / m y s i t e / s e c r e t s / . g r o u p s es un archivo de texto
sencillo, que para el ejemplo anterior sera:
financial: cgodsave jolson
sales: esmith jkirk
Ahora, para aadir un nuevo usuario a un grupo no necesita cambiar el archivo h t t p d . c o n f (o si est utilizando los archivos . h t a c c e s s , los contenedores < L o c a t i o n > ) . Puede aadir simplemente un usuario al grupo apropiado en
el archivo de grupo, una vez que ha creado la cuenta de usuario utilizando el
comando h t p a s s w d .
EH
Directiva allow
Esta directiva le permite definir una lista de host (que contenga uno o ms host
o direcciones IP) que tienen el acceso permitido a un directorio determinado.
Cuando se ha especificado ms de un host o direccin IP, hay que separarlos con
espacios. La tabla 7.1 muestra los valores posibles para la directiva.
Sintaxis: allow from hostl host2 host3 ...
Contexto: directorio, archivo de control de acceso en el mbito de directorio ( . h t a c c e s s )
Invalidar: L i m i t
Tabla 7 . 1 . Posibles valores para la directiva Allow
Ejemplo
Descripcin
All
Un FQDN de un host
EI1
Ejemplo
Descripcin
Un nombre parcial de
dominio de un host
Una direccin IP
completa de un host
Un par red/mscara
de red
Una especificacin
red/nnn CIDR
allow 206.171.50.0/24
Directiva deny
Esta directiva es exactamente la contraria de la directiva a l l o w . Le permite
definir una lista de host que tienen el acceso denegado a un directorio especi-
fico. Al igual que la directiva a 11 ow, puede aceptar todos los valores de la tabla
7.1.
Sintaxis: d e n y f rom h o s t l h o s t 2 h o s t 3
[ . . . ]
Directiva order
Esta directiva controla el modo en que Apache evala tanto la directiva a 11 ow
como la directiva deny.
Sintaxis: o r d e r d e n y ,
failure
allow
Predefinido: o r d e r d e n y ,
allow,
deny
mutual-
allow
WrUM
Sintaxis: a l l o w f rom e n v = v a r i a b l e
Contexto: d i r e c t o r i o , a r c h i v o de c o n t r o l de a c c e s o
en el mbito de d i r e c t o r i o ( . htaccess)
Invalidar: L i m i t
Esto slo es til si est utilizando otras directivas como B r o w s e r M a t c h
para asignar una variable de entorno. Por ejemplo, imagine que quiere permitirle
a Microsoft Internet Explorer 6, la ltima versin de Internet Explorer, acceder al
directorio en el que almacen algunos archivos HTML con VBScript embebido.
Al igual que el resto de navegadores Web principales, como el Netscape Navigator,
no soportan directamente VBScript, es preferible que no tenga usuarios de
Navigator en el directorio. En este caso, puede utilizar la directiva
B r o w s e r M a t c h para asignar una variable de entorno cuando se detecta Internet
Explorer 5.5. La directiva sera:
BrowserMatch "MSIE 5.5" ms_browser
<Directory /path/to/Vbscript_directory
order deny,allow
deny from all
allow from env=ms browser
</Directory>
>
from e n v = v a r i a b l e
"MSIE"
ms b r o w s e r
Ahora puede utilizar un contenedor < D i r e c t o r y > para especificar la directiva deny, del siguiente modo:
<Directory /path/to/vbscript_directory
order deny,allow
allow from all
deny from env=ms browser
</Directory>
>
Si est interesado en bloquear el acceso a un mtodo determinado de solicitudes HTTP, como GET, POST o PUT, puede utilizar el contenedor < L i m i t > para
hacerlo. Por ejemplo:
<Location /cgi-bin>
<Limit POST>
order deny,allow
deny from all
allow from yourdomain.com
</Limit>
</Location>
Mdil
h t t p d . c o n f una vez que reemplace la ruta y los nombres de usuario por los
apropiados:
Alias /aolbuddies/
"/path/to/web/directory/for/aolbuddies/"
<Location /aolbuddies/>
Deny from all
Allow from .aol.com
AuthName "AOL Buddies Only"
AuthType Basic
AuthUserFile /path/to/.myusers.pwd
AuthGroupFile /path/to/.mygroups
require group aolbuddies
Satisfy all
</Location>
FH1
una tabla en una base de datos. Si ya tiene una tabla en la base de datos con esa
informacin no necesita seguir los pasos siguientes.
1. Entrar en el servidor MySQL utilizando el comando m y s q l -u r o o t p. Le pedir que introduzca la contrasea raiz para la base de datos.
ADVERTENCIA: La contrasea raz para el servidor MySQL debera ser
siempre distinta de la contrasea raz de su sistema Unix. Sus usos son
distintos y por lo tanto deben tratarse por separado.
4. Ahora tiene que crear una tabla llamada wwwusers introduciendo las
siguientes lneas en la entrada de comandos MySQL.
crate table wwwusers (
username varchar(40)
passwd
varchar(20)
);
I Type
I username | varchar(40) |
1 passwd
| varchar (20)
| PRI I
I
I
I
I I
1J*1
Por ejemplo:
insert into wwwusers (username, passwd)
vales ('esmith','sale007');
wwwgroups (
varchar(40),
varchar(40)
);
1 Field
I Type
I Nuil | Key
Default I Extra I
| NULL
| NULL
+
|
|
+
|
|
+
);
Por ejemplo:
insert into wwwgroups (username, groupname)
vales ( ' kabir',
'www wheel'
'2manysecrets'
WAM
--
group_table_name
group_field_name
Auth_MySQL_Empty__Passwords off
Auth MySQL Encrypted Passwords on
Auth_MySQL_Encryption_Types Crypt_DES
Auth_MySQL_Scrambled_Passwords off
Auth_MySQL_Authoritative on
Auth_MySQL_Non_Persistent off
puede permitir a un usuario acceder a un directorio restringido, Apache volver a editar la solicitud de autentifcacin.
La directiva A u t h _ M y S Q L _ N o n _ P e r s i s t e n t , le indica a Apache
que no se desconecte del servidor de la base de datos para cada solicitud de autentifcacin. Desconectarse para cada solicitud significara
que Apache tendra que conectarse para cada nueva solicitud de autentifcacin, lo que disminuira el rendimiento. Por lo tanto, se recomienda el valor por defecto (of f).
3. Si aade lo que hemos visto al contenedor<Directory> o al contenedor
< L o c a t i o n > en httpd.conf necesita reiniciar el servidor Apache utilizando el comando / u s r / l o c a l / a p a c h e / b i n / a p a c h e c t 1
r e s t a r t . Por otro lado, si utiliza esta configuracin en el archivo
. h t a c c e s , puede utilizarlo sin reiniciar el servidor.
M&l
Apache::AuthenDBI
/memberonly/
"path_to_restricted_access_directory"
Por ejemplo:
Alias
/memberonly/
"/usr/local/apache/htdocs/protected/"
Para terminar, la directiva r e q u i r e v a l i d - u s e r le indica a Apache que slo permita el acceso a aquellos usuarios que pasen la prueba
de autentificacin.
'install HTTPD::UserAdmin'
'install HTTPD::GroupAdmin'
$DB HOST
$DB PORT
$DATABASE
$DB DRIVER
$DB USER
$DB_PASSWORD
$ENCRYPTION
$USER TABLE
$USERNAME FIELD
$PASSWORD FIELD
$GROUP TABLE
$GROUP FIELD
$MAXSZ USER
= 'localhost'
_
w .
= 'auth';
- 'mysql';
= 'kabir';
= Sdbpwd;
= 'crypt';
= 'wwwusers';
= 'username',
= 'passwd',
= 'wwwgroups'
= 'groupname'
= 4 0;
my $MAXSZ_PWD
my $MAXSZ_GRP
=2 0;
= 40;
BiViJ
-dbpwd=database_password \
-auto=on
gz-'^r:;::^
Actualizar una contrasea de usuario en la tabla de usuarios
manage_user.pl -db=group \
-action=add \
-user=kabir \
-group=administrators \
-dbpwd=mydbpwd
WblA
Esta seccin discute una solucin que utiliza bases de dalos MySQL (sin embargo, puede utilizar cualquier otra RDBM) y mdulos mod _ p e r l de CPAN. A
continuacin tenemos e modo de implementar este tipo de solucin.
1. S no est instalado ya, instale el m d u l o m o d p e r l tal y como se discute
en el capitulo 16.
2. Instale dos indulos CPAN para Apache utilizando el siguiente comando
corno ruta;
p r L -MC1AN --: * i n s t a 11 A p a c ' 1 T : : A :^ hC ^ o k i f '
p e r : -MCPAN -?: l i n - t a l l A p a c h o : : A u t h T i : k e t '
3. Una vez que tiene instalado estos mdulos, necesitar crear la base de
datos a u t . i y la tabla wwwuser discutida en la seccin "Crear la base de
datos de autentificacin de usuarios en el servidor mysq" de este captulo.
Necesitar tambin aadir las dos tablas siguientes.
C^PATF: TABLE L i c k e t : - (
t i c K e t h b h C l A R ( 3 ? MOT N'JLL,
Ls
iWT NOT KU T ,L,
FRIKAHY
?:~,Y
I. U c k ^ - _ h a s h )
);
C^HLATE TA3LE . . _ c k e L s e c r e t s
f c _ve i a 1 c r,
B I C I N 'i',
s e c _aatd
TXT HQT f.7L7LL
r
,'
Siga las instrucciones dadas en la seccin "Crear la base de datos de autentificacin ci usuarios en el servidor mysql" de este captulo, para aadir
estas tablas en la base de datos a u t h .
4. Una vez que ha creado esas tablas, debe aadir un secreto en la tabla
t i c k e t s e c r e t s . Hl modo ms sencillo de aadir un secreto es registrarse en la base de datos y conectarse a la base de dalos a u t h y emitir
una sentencia insertada del siguiente modo:
ineL-L I n t e t i c k e t s e c r o t s ( SHC v e : s _ o t i (
{ 'rjurr.fcer' , T r u n d c n w i a t . V ) ;
s e c _ciata )
va \-tos
5. Determine a qu localizacin del directorio Web quiere restringirle el acceso y emita una sesin de cookies para esto. En este ejemplo, he llamado a
esta localizacin / p r o t e c t e c i . Aada ta si guien Le configuracin a su
archivo h t t p d , conf:
E^rlMG'.\dle Apache : : Aut KTi Cket
P e r i 3 t ? t V a r Fi o t.ec;U:d T i c k e t s
ny I : mysql : fi^ h ^ b ^ s p - ^ i : i h ; her,t. = l c c a l a o s t
Pc:_L-et7ar ? r o t e c t e d T i ;:ktDBUsGr h t t p d
EE3
Las directivas P e r l S e t V a r se utilizan para asignar los distintos pares clave=valor que el mdulo necesita.
P r o t e c t e d T i c k e t P a s s w o r d S t y l e determina el tipo de
encriptado. Tiene tres opciones: estilo tradicional de Unix en el que
hay una encriptacin por digestin en una direccin, Plaintext (no recomendado), o MD5.
PerlSetVar ProtectedSecure 1
PerlSetVar ProtectedLoginScript
/protectedloginform
Aqu se le dice a Apache que pida las credenciales vlidas del usuario, que
ha de ser autentificado por el mdulo Apache : : A u t h T i c k e t .
E3
S e c u r e : Yes
Data:
expires:988390493:version::user:kabir2:hash:
b f 5 a c 9 4 1 7 3 0 7 1 c d e 9 4 4 8 9 e f 7 9f2 4 b l 5 8 : t i m e : 9 8 8 3 8 9 5 9 3
13. Capacite al navegador web para que almacene la cookie y tendr acceso a
la seccin Web restringida.
14. A continuacin, debera verificar que no hay un nuevo ticket en la tabla de
tickets. Puede registrarse en su base de datos del servidor y ver el contenido de la tabla de tickets. Por ejemplo, en un sistema Linux ejecutando un
servidor MySQL, puede ejecutar el comando s e l e c t * from t i c k e t s ,
una vez que est registrado en MySQL mediante el comando m y s q l -u
h t t p d -p a u t h . A continuacin se muestra una salida:
mysql> select * from tickets;
+
| ticket_hash
+
| 145el2ad47da87791ace99036e35357d
1 6ell5dl679b8a78f9b0a6f92898elcd6
+
2 rows in set (0.00 sec)
+
I ts
+
I 988393278
| 988393401
+
+
I
+
|
|
+
vnw
Monitorizacin
del acceso
a Apache
En este captulo
1. Monitorizamos el estado de Apache.
2. Permitimos el registro.
3. Personalizamos el registro.
4. Archivamos sus registros.
5. Realizamos un seguimiento de usuarios.
6. Analizamos sus archivos de registro.
7. Mantenemos sus archivos de registro.
Seguramente se ha preguntado alguna vez quin accede a su sitio Web o
cmo funciona el servidor Apache en su sistema. La monitorizacin, el registro y
el anlisis del servidor Apache, pueden proporcionar una gran cantidad de informacin vital para el administrador de sistemas del servidor Web, y adems puede
ser de gran ayuda en los aspectos de marketing de su sitio Web. En este captulo,
le mostrar la forma de controlar y registrar informacin en un servidor Apache,
para satisfacer sus necesidades de conocimiento.
E3
Monitorizar Apache
Apache le permite monitorizar estos dos tipos de informacin valiosa va Web:
Informacin de la configuracin del servidor: esta informacin es esttica, pero acceder a ella rpidamente puede resultar muy til cuando quiere
determinar qu mdulos estn instalados en el servidor.
Informacin del estado del servidor: esta informacin cambia constantemente. Puede monitorizar informacin del tipo tiempo de operacin del
servidor, nmero total de solicitudes servidas, transferencia total de datos,
estado de los procesos hijo y manejo de los recursos del sistema.
--prefix=/usr/local/apache \
--with-mpm=prefork \
--enable-info
Este comando, configura Apache de modo que se queda instalado en el directorio / u s r / l o c a l / a p a c h e , configura la fuente para que se ejecute como un
servidor "preforking", y habilita el mdulo m o d _ i n f o. Ejecute make y make
i n s t a l l para compilar e instalar el nuevo servidor construido de Apache.
Una vez que tiene instalado este mdulo en el servidor, puede ver la informacin de la configuracin de la Web, aadiendo la siguiente configuracin al archivo h t t p d . c o n f :
K:E1
<Location /server-info>
SetHandler server-info
Order deny,allow
Deny from all
Allow from 127.0.0.1 .domain.com
</Location>
from
127.0.0.1
.nitec.com
El punto delante del nombre de dominio permite que cualquier host del dominio acceda a la informacin del servidor. Sin embargo, si desea limitar todo esto a
un solo dominio llamado s y s a d m i n . d o m a i n . com, cambie la lnea A l l o w
from por:
Allow
from
127.0.0.1
sysadmin.domain.com
Una vez que el servidor est configurado y reiniciado, la informacin del servidor se obtiene del host local (es decir, ejecutando el navegador Web con Lynx
en el propio servidor) accediendo h t t p : / / l o c a l h o s t / s e r v e r - i n f o.
Esto devuelve una pgina completa de configuracin del servidor y de todos
los mdulos. Si quiere acceder desde localizaciones distintas, utilice el nombre
completo del servidor, incluido el dominio, elfully qualified ame en lugar del
nombre del host local. Por ejemplo, si su servidor Web se llama www. n i t e c . com,
acceder a la informacin del servidor utilizando: h t t p : / /www . n i t e c . com/
server-info.
El mdulo mod i n f o tambin proporciona una directiva llamada
A d d M o d u l e l n f o, que le permite aadir texto descriptivo en la lista de mdulos
proporcionada por el mdulo m o d _ i n f o. El texto descriptivo podra ser cualquier cosa incluido texto HTML. A d d M o d u l e l n f o tiene la siguiente sintaxis:
AddModulelnfo module_name
descriptive_text
Por ejemplo:
AddModulelnfo mod_info.c 'See <a href="http://localhost/manual/
mod/mod_info.html">man mod_info</a>'
Esto muestra un enlace HTML junto con la lista d e m o d _ i n f o . c, proporcionando un modo sencillo de obtener informacin en el mdulo desde el manual
online de Apache, tal y como se muestra a continuacin.
Module ame: mod info.c
Content handlers: (code broken)
Configuration Phase Participation: Crate Server Config, Merge
Server Configs
MrMM
Module Directives:
AddModulelnfo - a module ame and additional information on
that module
Current Configuration :
AddModulelnfo mod_info.c vman mod_info'
Additional Information:
man mod_info
mod_alias.c
mod_userdir.c
mod_actions.c
mod_imap.c
mod_dir.c
mod_negotiation.c
mod_log_config.c
mod_mime.c
http_core.c
mod_include.c
mod_auth.c
mod_access.c
core.c
Por supuesto, su lista variar basndose en qu mdulos tiene activados durante la configuracin de la fuente. Ahora, vamos a ver cmo puede monitorizar
el estado de un servidor Apache en ejecucin.
ni
NOTA: Parte de la informacin que acabamos de nombrrselo est disponible cuando es capaz de desplegar ese tipo de informacin utilizando la
directiva E x t e n d e d S t a t u s , que se discutir ms tarde en esta seccin.
Scoreboard Key:
"_" Waiting for Connection, " S " Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"L" Logging, "G" Gracefully finishing, "." Open slot with no
current process
Srv PID Acc M CPU
SS Req Conn Child Slot Client VHost Request
0-0 0 0/87/87 __
0.07 1726072572 0 0.0 0.10 0.10
(unavailable)
0-0 0 105/105/105 W
0.00 1726072572 0 50.5 0.05 0.05
(unavailable)
0-0 0 166/166/166 K
0.02 1726072572 0 233.5 0.23 0.23
(unavailable)
0-0 0 49/49/49 K
0.01 1726072572 0 25.2 0.02 0.02
(unavailable)
0-0 0 77/77/77 K
0.08 1726072572 0 116.6 0.11 0.11
(unavailable)
re%i
4-0 0 0/0/17323 _
(unavailable)
Kdil
Cambiar el valor de $ w h e r e l o g con la ruta en la que le gustara almacenar el archivo creado por el script. Asegrese de que la ruta existe ya o
tendr que crear utilizando el nombre de ruta m k d i r - p . Por ejemplo,
m k d i r -p / v a r / l o g / a p a c h e asegurar que todos los directorios (/
v a r , / v a r / l o g , / v a r / l o g / a p a c h e ) se van creando a medida que
se necesitan.
FET1
El script utiliza una conexin socket con el servidor Apache para enviar las
solicitudes URL; por lo tanto, necesita asegurarse que tiene soporte socket para
Perl. Por ejemplo, en un sistema Linux, el cdigo Perl del socket se encuentra en
s o c k e t . ph. Puede utilizar este s o c k e t . ph para determinar si existe este
archivo en su sistema.
Si una seal no tiene un valor, entonces se representa por un guin (-). Las
seales tienen los siguientes significados:
Ver los apndices para obtener una lista de todos los cdigos de estado HTTP/
1.
El campo de la fecha puede tener este formato:
date =
[day/month/year:hourminute:second zone]
Valores
Da
2 dgitos.
Mes
3 letras.
Ao
4 dgitos.
Hora
2 dgitos.
Minutos
2 dgitos.
Segundos
2 dgitos.
Zona
La siguiente seccin ofrece un resumen de todas las directivas que puede utilizar con m o d _ l o g _ c o n f i g . Hay cuatro directivas disponibles en este mdulo.
Directiva TransferLog
T r a n s f e r L o g asigna el nombre del archivo de registro o programa al que se
enva la informacin de registro. Por defecto, la informacin de registro se en-
re?gi
" | path_to_external/
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual
La directiva T r a n s f e r L o g toma como argumento o bien una ruta de un
archivo de registro, o bien una tubera a un programa externo. Se considera que el
nombre del archivo de registro es relativo al S e r v e r R o o t asignado si no se
encuentra un carcter / inicial.
Por ejemplo, si S e r v e r R o o t est asignado a / e t c / h t t p d , entonces la
siguiente lnea le dice a Apache que enve la informacin de registro al archivo /
etc/httpd/logs/access.log:
TransferLog
logs/access.log
Directiva LogFormat
L o g F o r m a t determina el formato del archivo de registro nombrado en la
directiva T r a n s f e r L o g . Si incluye un nickname para el formato en la lnea de
la directiva, puede utilizarlo en otras directivas L o g F o r m a t y CustomLog en
vez de repetir la cadena completa del formato. Una directiva L o g F o r m a t que
define un nickname no hace nada ms; es decir, solo define el nickname, y no
aplica realmente el formato.
Sintaxis: L o g F o r m a t
format
[nickname]
E>llW
Directiva CustomLog
Al igual que la directiva T r a n s f e r L o g , esta directiva le permite enviar
informacin de registro a un archivo de registro o a un programa externo. A
diferencia de T r a n s f e r L o g , sin embargo, le permite utilizar un formato de
registro personalizado que se puede fijar como un argumento.
Sintaxis: CustomLog file | pipe [format | nickname]
[env=[!]environment_variable]
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual
En el siguiente ejemplo, cada linea del archivo a c c e s s . l o g se escribir
utilizando el formato los especifcadorcs de formato dados. El formato determina
un formato para cada lnea del archivo de registro:
CustomLog logs/access.log "%h %1 %u %t \"%r\" %>s %b"
Las opciones disponibles para el formato son exactamente las mismas que las
que le sirven de argumento a la directiva L o g F o r m a t . Si el formato incluye
cualquier espacio (lo cual ocurre en la mayora de los casos), debe ir entre comillas dobles. En lugar de la cadena de formato real, puede utilizar un nickname
definido con la directiva L o g F o r m a t . Por ejemplo:
LogFormat "%h %t \"%r\" %>s" myrecfmt
CustomLog logs/access.log myrecfmt
Para terminar, si utiliza el m o d s e t e n v i f (instalado por defecto) o el mdulo para rescribir URL (mod r e w r i t e , que no est instalado por defecto)
para determinar las variables de entorno basadas en una URL solicitada, puede
crear registros condicionales utilizando la opcin env= [ ! ] e n v i r o n m e n t _
v a r i a b l e con la directiva CustomLog. Por ejemplo, imagine que permite a la
gente bajarse un papel blanco PDF y quiere registrar todas las bajadas en un
archivo de registro llamado w h i t e p a p e r . l o g en su directorio de registro habitual. A continuacin tenemos la configuracin necesaria:
SetEnvIf Request_URI \.pdf$ whitepaper
CustomLog logs/whitepaper.log common env=whitepaper
CustomLog logs/access.log common env=!whitepaper
Directiva CookieLog
C o o k i e L o g le permite registrar informacin sobre cookies en un archivo
relacionado con la ruta de la directiva S e r v e r R o o t . No se recomienda esta
directiva, porque no parece que Apache vaya a traer soporte para ella durante
mucho tiempo. Para registrar datos sobre cookies, utilice el mdulo de seguimiento de usuarios ( m o d _ u s e r t r a c k ) . El mdulo de seguimiento de usuarios se
discute ms tarde en este captulo.
Sintaxis: C o o k i e L o g
f ilename
tienen una cadena como argumento. Esta cadena puede tener tanto caracteres
literales como especificadores de formato especiales %. Cuando se utilizan valores literales en esta cadena, se copian en un archivo de registro para cada solicitud. Los especificadores %, sin embargo, son reemplazados con los valores
correspondientes. Los especificadores % especiales se muestran en la tabla 8.2.
Tabla 8.2. Especificadores % especiales para entradas de registro
Especificador %
Descripcin
%a
%A
%B
%b
%c
Estado de conexin cuando la respuesta tiene lugar. El carcter "X" se escribe si la conexin fue
abortada por el cliente antes de que se completase
la respuesta. Si un cliente utiliza el protocolo keepalive, se escribe un "+" para mostrar que la conexin se ha mantenido despus de agotar el tiempo
de operacin. Se escribe un "-" para indicar que se
cerr la conexin tras la respuesta.
%{mycookie}C
%D
%{myenv}e
%f
%h
%H
%{ IncomingHeader }|
%l
MsVJ
Especmcador %
Descripcin
%m
%{ ModuleNote }n
%{ OutgoingHeader }o
El contenido de OutgoingHeader; es decir, la lnea o lneas de cabecera en la respuesta. El carcter o (outgoing) al final quiere decir que se trata de
una cabecera de un servidor.
%p
%P
%q
La cadena de consulta.
%r
%s
%t
%{format}t
%T
%u
%U
%v
%V
cdigos de estados HTTP. Por ejemplo, imagine que quiere registrar todas las
URL que dirigen a un usuario a una pgina que no existe. En ese caso, el servidor
produce una cabecera de estado 404 (No encuentra). Por lo tanto, para registrar
estas URL puede utilizar el especificador de formato:
'%404{Referer}i'
De igual modo, para registrar las URL resultantes de un estado inusual, puede
utilizar:
'%1200,304,302{Referer}i'
Por ejemplo:
"%h %1 %u %t \ " % r \ " %s %b \ " % { R e f e r e r } i \ " \ " % { U s e r - a g e n t ( i \ " " .
Estos registros de especificacin CLF, formatean datos y aaden la informacin Referer y User-agent encontrada en las cabeceras proporcionadas por el
cliente en cada entrada de registro. Hemos visto cmo aadir campos personalizados
para el archivo de registro pero no sabemos qu es lo que ocurre si necesita
almacenar estos datos en ms de un archivo de registro. La siguiente seccin
discute cmo utilizar varios archivos de registro.
"%{Referer}i"
Kikl
TransferLog
logs/access_log
CustomLog
logs/agents_log
"%{User-agent)i"
vhost_logs/reboot_access_log
Registrar cookies
Hasta ahora, las opciones de registro discutidas, no le permiten identificar
visitantes. La identificacin de visitantes es muy importante, porque si sabe quin
est realizando qu solicitudes, se puede hacer una idea de cmo se utiliza su
contenido. Por ejemplo, imagine que tiene una pgina realmente buena es algn
sitio de su pgina Web, y tiene algn modo de identificar a los visitantes en su
registro. Si observa el registro y puede ver que muchos visitantes van de una
pgina a otra hasta encontrar dicha pgina, podra reconsiderar su diseo Web y
dejar la pgina ms accesible. Apache tiene un mdulo llamadomod_usertrack
que le permite hacer un seguimiento de los visitantes a su sitio Web registrando
las cookies HTTP.
COOIQESHTtT:'na;c6bkie HTTP es simplemente una pieza de informacin qu el servidor le pasa al navegador Web. Esta informacin se
almacena normalmente en un par clave=valor y puede ir asociada con todo
el sitio Web o con una URL particular en el sitio Web. Una vez que el
servidor enva una cookie y l navegador la acepta, la cookie residir en el
sistema delnavegador Web; Cada Vez que l navegador Web solicite la
rtismaURL, O cualquier URL qu se encuentre bajo el alcance de la URL
Mtlil
Directiva CookieExpires
Esta directiva se utiliza para determinar el perodo de expiracin de las cokies
que son generadas por este mdulo. El perodo de expiracin se puede definir en
trminos de nmero de segundos, o en un formato del tipo " 1 month 2 days 3
hours."
Sintaxis: C o o k i e E x p i r e s
expiry-period
Idtll
CookieExpires 3600
CookieExpires "2 days 3 hours"
Directiva CookieTracking
Esta directiva activa o desactiva la generacin automtica de cookies. Cuando
tiene asignado el valor on, Apache comienza a enviar cookies de seguimiento de
usuarios para cada nueva solicitud. Esta directiva se puede utilizar para activar o
desactivar este comportamiento en servidores o en directorios. Por defecto, compilar m o d _ u s e r t r a c k no activa las cookies.
Sintaxis: C o o k i e T r a c k i n g On
| Of f
Contexto: configuracin del servidor, host virtual, directorio, archivo control de acceso en el mbito de directorio ( . h t a c c e s s )
Invalidar: F i l e l n f o
syslog
IcIiU
/var/log/debug
Idikl
Debug: mensajes registrados al nivel de depuracin de errores que incluirn el archivo fuente y el nmero de lnea en el que se genera el mensaje,
para ayudar a la depuracin de errores y al desarrollo del cdigo
Emerg: mensajes de emergencia
Error: mensajes de errores
Warn: advertencias
KTiEl
imprime todas las direcciones IP (si tiene activada una bsqueda DNS [domain
ame server], cuando se muestran los alias de los host). La utilidad c a t realiza
una lista del archivo a c c e s s _ l o g , y el resultado se dirige al interpretador awk,
que imprime nicamente el primer campo en cada lnea utilizando la sentencia
p r i n t . Esta sentencia imprime todos los host; pero qu es lo que ocurre si
quiere excluir los host de su red? En ese caso, debera utilizar:
cat /path/to/httpd/access log I awk '{print $1)'
' (A206. 171.50)'
egrep
donde 2 0 6 . 1 7 1 . 5 0 deberia reemplazarse con su direccin de red. He supuesto que tiene una red de tipo C. Si tiene una red de tipo B, slo tiene que
utilizar los primeros dos octetos de su direccin IP. Esta versin le permite excluir sus propios host utilizando la utilidad e g r e p , a la que se le indica que
muestre (va - v ) slo los host que no comienzan con la direccin de red
2 0 6 . 1 7 1 . 5 0 . Sin embargo, esto no acaba de resultar totalmente satisfactorio,
porque hay muchas posibilidades de repeticin. Por lo tanto, la versin final es:
cat /path/to/httpd/access log
egrep -v * (A206.171.50)'
| uniq
La utilidad u n i q filtra las repeticiones y muestra solo una lista por cada host.
Por supuesto, si quiere ver el nmero total de host que tienen acceso a su sitio
Web, puede dirigir el resultado final a la utilidad wc con la opcin - 1 :
cat /path/to/httpd/access_log I awk '{print $1}' I \
uniq | egrep -v ' (A206.171.50)' I wc -1
WebTrends
www.webtrends.com/
Wusage
www.boutell.com/wusage/
Wwwstat
www.ics.uci.edu/pub/websoft/wwwstat/
Analog
www.statslab.cam.ac.uk/~sret1/analog/
KEE1
http-analyze
www.netstore.de/Supply/http-analyze/
Pwebstats
www.unimelb.edu.au/pwebstats.html
WebStat Explorer
www.webstat.com/
AccessWatch
http://netpressence.com/accesswatch/
Mantenimiento de registros
Permitiendo el registro, ser capaz de ahorrar mucho trabajo, pero los registros en s, le van a aadir trabajo extra: ha de mantenerlos. En los sitios Apache
con muchos dominios virtuales, los archivos de registro se pueden convertir en
enormes en poco tiempo, lo que puede causar fcilmente una crisis en el disco.
Cuando los archivos de registro se vuelven muy grandes, debe rotarlos.
Tiene dos opciones para rotar sus registros: puede utilizar la utilidad de Apache llamada r o t a t e l o g , o puede utilizar l o g r o t a t e , una facilidad disponible en la mayora de los sistemas Linux.
Utilizar rotatelog
Apache tiene soporte para una utilidad llamada r o t a t e l o g . Puede utilizar
este programa del siguiente modo:
ItfiIJ
Por ejemplo, si quiere rotar el registro de acceso cada 86.400 segundos (es
decir, 24 horas), utilice la lnea siguiente:
TransferLog "|
Utilizar logrotate
La utilidad l o g r o t a t e rota, comprime y enva archivos de registro. Est
diseada para facilitar la administracin del sistema de archivos de registro. Permite la rotacin, compresin, eliminacin y envo automticos de los archivos de
registro a diario, mensualmente, o basndose en el tamao. Normalmente,
l o g r o t a t e se ejecuta como un trabajo diario del cron (demonio de Unix para la
automatizacin de tareas). Lea las pginas de informacin de l o g r o t a t e para
aprender ms sobre l.
Si su sistema soporta la utilidad l o g r o t a t e , debera crear un script llamado
/ e t c / l o g r o t a t e . d / a p a c h e tal y como se muestra en el listado 8.2.
Listado 8.2. /etc/logrotate.d/apache
# Observe que este script supone que:
#
# a. Tiene instalado Apache en /usr/local/apache
# b. Su ruta de registro es /usr/local/apache/lcgs
# c. Su registro de acceso se llama access_log (por defecto en
Apache)
# d. Su registro de error se llama error_log (por defecto)
# e. el archivo PID, httpd.pid, para Apache, se almacena en el
#
directorio log (por defecto en Apache)
#
# Si alguna de estas suposiciones son falsas, por favor cambie
# la ruta o el nombre de archivo.
#
/usr/local/apache/logs/access_log (
missingok
compress
rotate 5
mail webmaster@yourdomain.com
errors webmaster@yourdomain.com
size=10240K
postrotate
/bin/kill -HUP 'cat /usr/local/apache/logs/httpd.pid
2>/dev/nullx 2> /dev/null I I true
IdtlrJ
endscript
}
/usr/local/apache/logs/error_log
missingok
compress
rotate 5
mail webmaster@yourdomain.com
errors webmaster@yourdomain.com
size=10240K
postrotate
/bin/kill -HUP 'cat /usr/loca 1/apache/logs/httpd.pid
2>/dev/nullv 2> /dev/null || true
endscript
}
Esta configuracin determina que tanto los accesos como los archivos de registro de error de Apache sean rotados cada vez que crece por encima de 10MB
(10,240K), y que todos los archivos antiguos de registro sean comprimidos y
enviados a w e b m a s t e r @ y o u r d o m a i n . com una vez que han pasado por cinco rotaciones, en lugar de ser eliminados. Cualquier error que tenga lugar durante
el procesamiento de los archivos de registros se enva a r o o t @ y o u r d o m a i n
. com.
Utilizar logresolve
Por razones de rendimiento, debera deshabilitar la bsqueda de nombre de
usuarios utilizando la directiva HostNameLookups con el valor off. Esto
significa que sus entradas de registro mostrarn direcciones IP en lugar de nombres de host para los clientes remotos. Cuando se analizan los registros, es de
gran ayuda tener los nombres de host de modo que pueda determinar quin a
accede a qu lugar fcilmente. Por ejemplo, a continuacin tenemos unos cuantos
ejemplos de entradas de registro en el archivo / u s r / l o c a l / a p a c h e / l o g s /
access_log.
207.183.233.19 - - [ 15/Mar/2001:13:05 : 01 -0800] "GET /book/
images/back.gif HTTP/1.1" 304 0
207.183.233.20 - - [ 15/Mar/2001:14:45:02 -0800] "GET /book/
images/forward.gif HTTP/1.1" 304 0
207.183.233.21 - - [ 15/Mar/2001:15:30 : 03 -0800] "GET /book/
images/top.gif HTTP/1.1" 304 0
lt?i!:l
LogFormat
"%h
',1
%u
:t
\"*.r\"
- >s
,b"
common
logs/
BES1
number * hostname
nano.nitec.com
rhat.nitec.com
r2d2.nitec.com
Observe que la utilidad no puede usar el cach porque las tres direcciones IP
que estn traducidas (para las entradas de registro mostradas) son nicas. Sin
embargo, si su archivo de registro tiene direcciones IP del mismo host, se utilizar
el cach para traducirlas en lugar de realizar solicitudes DNS a ciegas.
Si piensa que puede utilizar este script, le recomiendo que lo ejecute como un
trabajo del c r o n . Por ejemplo, en mi servidor Web Apache ejecutando Linux,
simplemente aado el script a / e t c / c r o n . d a i l y para crear una versin traducida del registro diario.
illl
Reescribir
las URL
En este captulo
1. Trabajamos con el motor de reescritura de URL de Apache.
2. Analizamos la distribucin URL.
3. Manejamos contenido.
4. Restringimos el acceso.
Las URL llevan a los visitantes a su sitio Web. Como administrador Apache,
necesita asegurar que todas las URL posibles de su sitio Web son funcionales.
Cmo se hace? Ha de mantener la monitorizacin de los registros de error para
todas las solicitudes URL fallidas. Si observa que las solicitudes se estn devolviendo con un cdigo de estado 404 Not Found, es el momento de investigar estas
URL. A menudo, cuando el autor de un documento HTML actualiza un sitio
Web, olvida que volver a nombrar un directorio puede dar lugar a la prdida de
muchos visitantes debido a la prdida de coherencia en la carpeta de favoritos de
estos.
Como administrador, cmo podra resolver este problema? Las buenas noticias son que hay un mdulo llamado mod r e w r i t e que le permite resolver
Sin embargo, tambin es posible aadir condiciones a una regla, de modo que
la substitucin slo se aplique si se encuentra la condicin. Apache puede manejar estas URL sustituas como si fueran subsolicitudes internas, o puede devolverlas al navegador Web como si fueran redirecciones externas. La figura 9.1
muestra un ejemplo en el que aparece una solicitud y el resultado de una regla
mod_rewrite.
I
http://blackhole.nitec.com/~kabir
Servidor Apache
mod_rewrite
Regla:
RewriteRule A/~([A/]+)/?(.*)
/users/$1/$2 [R]
Explicacin
SERVER_NAME
SERVER_ADMIN
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
SERVER_VERSION
DOCUMENT_ROOT
HTTP_ACCEPT MIME
HTTP_COOKIE
HTTP_FORWARDED
URL enviada.
HTTPJHOST
HTTP_PROXY_CONNECTION
HTTP_REFERER
HTTP_USER_AGENT
REMOTE ADDR
Variable
Explicacin
REMOTEJHOST
REMOTEJJSER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
REQUEST_URI
URI solicitado.
REQUEST_FILENAME
Igual que
THE_REQUEST
URL solicitada.
TIME_YEAR
Ao actual.
T1ME_M0N
Mes actual.
TIME_DAY
Da actual.
TIME_HOUR
Hora actual.
TIME_MIN
Minuto actual.
TIME_SEC
Segundo actual.
TIME_WDAY
Da de la semana actual.
TIME
Momento actual.
API_VERSION
IS_SUBREQ
SCRIPT
FILENAME.
RewriteEngine
Esta directiva le proporciona un mecanismo de activacin/desactivacin para
el motor de reescritura de URL en el mdulo mod r e w r i t e . Por defecto, la
reescritura est desactivada. Para utilizar el motor de reescritura, debe activar el
motor asignndole a esta directiva el valor on.
Sintaxis: R e w r i t e E n g i n e On
Predefinido: R e w r i t e E n g i n e
gm
Of f
Of f
FollowSymLinks
RewriteOptions
Esta directiva le permite determinar opciones para cambiar el comportamiento
del motor de reescritura. Actualmente, la nica opcin disponible es i n h e r i t .
Dndole el valor i n h e r i t a esta directiva, puede forzar que una configuracin
de bajo nivel herede la configuracin de mayor nivel.
Sintaxis: R e w r i t e O p t i o n s o p t i o n l o p t i o n 2
[ . . . ]
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual, archivo de control de
acceso en el mbito de directorio ( . h t a c c e s s )
Por ejemplo, si asigna esta directiva en el rea de configuracin de su servidor
principal, un host virtual definido en el archivo de configuracin heredar toda la
configuracin rescrita, as como las reglas de reescritura, las condiciones, las
integraciones, y similares. De igual modo, cuando esta directiva se asigna en un
archivo de configuracin en el mbito y las integraciones, por defecto, el motor de
reescritura no permite heredar una configuracin rescrita, pero esta directiva le
permite alterar el comportamiento por defecto.
RewriteRule
Esta directiva le permite definir una regla de reescritura. La regla debe tener
dos argumentos. El primer argumento es el patrn buscado que debe cumplir para
aplicar la cadena de sustitucin. El patrn buscado se escribe utilizando una
expresin regular (ver apndice B para obtener los conceptos bsicos sobre las
expresiones regulares). La cadena de sustitucin puede construirse con todo texto, con referencias a las subcadenas en el patrn de bsqueda, con valores para
las variables del servidor, e incluso con funciones map. La lista de indicadores
puede contener una o ms cadenas de indicadores, separados por comas, para
informar al motor de reescritura sobre que es lo que hay que hacer despus con la
sustitucin.
Sintaxis: R e w r i t e R u l e
string
[flag_list]
search_pattern
substitution
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual, archivo de control de
acceso en el mbito de directorio ( . h t a c c e s s )
Vamos a ver un ejemplo:
RewriteRule /-(["/]+)/?(.*)
/users/$l/$2
[R]
E3
search-pattern-for-original-URL
substitutionl
RewriteRule
[flags]
RewriteRule
[flags]
search-pattern-for-substitutionl substitution2
search-pattern-for-substitution2 substitution3
Significado
C I chain
E=var:value I env=var:value
F I forbidden
G |gone
L | last
Ka
Indicador
Significado
N I next
NC I nocase
NS | nosubreq
P | proxy
El uso de este indicador convertir una solicitud URL en una solicitud proxy interna. Esto
slo funcionar si tiene compilado Apache con
el mdulo mod p r o x y y configurado para utilizar el mdulo del proxy.
QSA | qsappend
S=n | skip=n
T=MIME-type |
type=MIME-type
ItW!
RewriteCond
La directiva R e w r i t e C o n d es til cuando queremos aadir una condicin
extra para una regla de reescritura especificada por la directiva Rewr i t e R u l e .
Puede tener varias directivas R e w r i t e C o n d para cada Rewr i t e R u l e . Deben
definirse todas las condiciones de reescritura antes de la regla en s.
Sintaxis: R e w r i t e C o n d
[flag_list]
test
string
condition_pattern
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual, archivo de control de
acceso en el mbito de directorio ( . h t a c c e s s )
La cadena de prueba debe estar construida con texto simple, variables del
servidor o referencias, tanto de la regla de reescritura actual como de la ltima
condicin de reescritura. Para acceder a la referencia n t h de la ltima directiva
R e w r i t e R u l e , utilice $n; para acceder a la referencia n t h de la ltima directiva R e w r i t e C o n d , utilice %n.
Para acceder a la variable del servidor, utilice el formato % { v a r i a b l e
ame}. Por ejemplo, para acceder a la variable REMOTE__USER, especifique
% { REMOTE_USER} en la cadena de prueba.
La tabla 9.3 contiene una lista de varios formatos de acceso a datos.
Tabla 9.3. Formatos de acceso a datos para la directiva RewriteCond
Especificador de formato
Significado
%{ENV:variable}
%{HTTP:header}
%{LA-U: variable}
de reescritura almacenada en el archivo de configuracin del servidor ( h t t p d . c o n f ) , no puede utilizar % { R E M O T E _ U S E R } porque esta
variable slo se define una vez que el servidor
ha llevado a cabo la fase de autentificacin,
que tiene lugar despus de la fase de procesamiento de URL del mdulomod^rewrite. Para
saber qu usuario es el que da lugar a una autentificacin exitosa del nombre de usuario,
Especificador de formato
Significado
puede utilizar % { L A - U : R E M O T E _ U S E R } . Sin
embargo, si est accediendo a datos REMTE^
USER de un RewriteCond en un archivo de
configuracin de directorios, puede utilizar
% { R E M O T E _ U S E R } porque la fase de autorizacin ha terminado ya y la variable del servidor
est disponible como siempre. La bsqueda tiene lugar generando una subsolicitud basada en
URL.
%{LA-F:variable}
-f
-s
Comprueba si existe el archivo de tamao distinto de cero especificado por la cadena de prueba.
-1
-F
-U
Significado
NC I nocase
Realiza una prueba de condiciones sin hacer distincin entre maysculas y minsculas.
OR I ornext
Normalmente, cuando tiene ms de una R e w r i t e Cond para una directiva R e w r i t e R u l e , estas condiciones se aaden juntas para que tenga lugar la
sustitucin final. Sin embargo, si necesita crear una
relacin OR entre dos condiciones, utilice este indicador.
RewriteMap
La directiva R e w r i t e M a p facilita una bsqueda clave valor a travs de la
utilizacin de un mapa. Piense en este mapa como una tabla de datos en la que
cada fila tiene una clave y un valor. Normalmente, un mapa est almacenado en
un archivo. Puede ser un archivo de texto, un archivo DBM, una funcin interna
de Apache, o un programa externo. El tipo de mapa se corresponde con la fuente
del mapa. La tabla 9.6 contiene una lista de tipos aplicables de mapas.
Sintaxis: R e w r i t e M a p
of_map
name_of_map
type_of_map : s o u r c e _
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual
Tabla 9.6. Opciones de indicadores para la directiva RewriteMap
Tipo de mapa
Descripcin
txt
valuel
Tipo de mapa
Descripcin
Key2
value2
first_value_for_key1 | second_value_for_key1
Key2
first_value_for_key2 | second_value_for_key2
dbm
Se puede utilizar un archivo DBM como fuente de mapas. Esto puede ser muy til y rpido (comparado con los
archivos de texto) cuando tiene un gran nmero de pares
clave valor. Tenga en cuenta que estos mapas basados
en archivos DBM slo se leen durante el arranque de
Apache y nicamente se vuelven a leer si el archivo se
actualiza una vez que el servidor est preparado y ejecutndose. Los archivos tambin se vuelven a leer durante
el reinicio del servidor.
prg
RewriteBase
Esta directiva slo es til si est utilizando reglas de escritura en archivos de
configuracin a nivel de directorio. Slo es necesario para las rutas de URL que
no integran en el directorio fsico del archivo objetivo. Asgnele a esta directiva el
alias que utilice para el directorio. Esto asegurar que m o d _ r e w r i t e utilizar
el alias en lugar de la ruta fsica en la URL final (sustituida).
Sintaxis: R e w r i t e B a s e
base_URL
"/www/nitec/htdocs/icons/"
/icons/
RewriteLog
Si quiere registrar las aplicaciones de sus reglas de reescritura, utilice esta
directiva para asignar un nombre de archivo de registro. Al igual que el resto de
las directivas, supone que una ruta sin barra inclinada inicial (/) significa que
quiere escribir un archivo de registro en el directorio raz del servidor.
Sintaxis: R e w r i t e L o g
path_to_logf ile
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual
Por ejemplo, la siguiente directiva escribe un archivo de registro en el
subdirectorio de registros bajo el directorio raz de su servidor:
RewriteLog
logs/rewrite.log
Tal y como se mencion antes, nicamente el usuario del servidor puede escribir en un registro escrito por un servidor.
RewriteLogLevel
Esta directiva le permite especificar qu se ha registrado en el archivo de
registros. El valor por defecto 0 significa que no se va a registrar nada. De hecho,
>m
un nivel de registro de 0 significa que no va a producirse ningn proceso relacionado con registros dentro de este mdulo. Por lo tanto, si quiere deshabilitar el
registro, mantenga este valor en 0.
Sintaxis: R e w r i t e L o g L e v e l
level
Predefinido: R e w r i t e L o g L e v e l 0
Contexto: configuracin del servidor, host virtual
NOTA: Si fija la directiva RewriteLog en , / d e v / n y l l y R e w r i t e L o g L e v e l en un valor que no sea 0, se llevar a cabo el proceso interno relacionado con el registro, pero no se producir ningn registro. Este
proceso gasta gran cantidad de recursos de su sistema, por lo que si no
quiere registro, mantenga el valor por defecto en esta directiva. Tiene 10
niveles de registro, que van de 0 a 9. Cuanto ms alto sea el nivel, ms
datos de registro se escriben.
RewriteLock
La directiva R e w r i t e L o c k le permite determinar un programa de mapeado
externo para crear mapas de reescritura. Cuando utilice la directivaRewriteLock
tiene que especificar un nombre de registro. Este archivo se utiliza como archivo
de bloqueo para comunicacin sincronizada con los programas externos de mapeo.
Sintaxis: R e w r i t e L o c k
f llname
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual
MiVlM
Esta es una URL de atajo y necesita estar integrada a una URL cannica.
Podra tener tambin otros atajos u otras URL internas que necesitasen estar
integradas en sus URL cannicas. Este ejemplo le muestra cmo se traduce
- u s e r n a m e a / u / u s e r n a m e . La figura 9.2 ilustra lo que tiene que ocurrir.
Servidor Apache
1 http://hostname/~usernamfi
$1
$2
1 ~(username)/()
Y
Redirige
/u/$1/$2
/u/username
>k
modrewrite
Y
Localizacin: http://hostname/u/username
w
Figura 9.2. Ampliar una URL solicitada a una URL cannica
7~ ( ["/]+) /? (.*)
/u/$l/$2
[R,L]
~f o o / a n y p a t h es / h o m e / f / f o o / w w w / a n y p a t h , mientras que / - b a r /
a n y p a t h es / h o m e / b / b a r / w w w / a n y p a t h . Para implementar un esquema de traduccin de las URL a la forma cannica de las URL, en este caso, se
puede utilizar la siguiente regla:
RewriteRule
V~(([a-z])[a-z0?9]+)(.*)
/home/$2/$l/www$3
[R,L]
mod_rewrite
-(username/anypath)
http://newhost/~$1
http://newhost/~usemame/anypath
Localizacin: http://newhost/~username/anypath
Servidor Apache
-/-(.+)
http://newhost/~$l
[R,L]
http://hostname/filename.html
$1
L
Regla #1 I
(filename.html)
J
/your/docroot/dir1/$1
Si
Existe/your/docroot/dr1/filename.httnl?
4-No
Regla #2 I
/your/docroot/dir2/$1
_
Existe /your/docroot/dir2/filename.html?
No se realiza sustitucin
T
Subsolicitud interna
Salida de la solicitud
(.+)
/your/docroot/dirl%{REQUEST_FILEAME}
/your/docroot/dir1$1
[L]
"(.+)
/your/docroot/dir2%{REQUEST_FILEAME)
/your/docroot/dir2$1
[L]
"(.+)
"PT1
EEH
[L]
RewriteCond
/usr/local/apache/htdocs/
dir2%(REQUEST_FILENAME}
-f
RewriteRule
"(.+)
/usr/local/apache/htdocs/dir2$l
[L]
RewriteRule
"(.+)
[PT]
2. Ejecutemkdir -p / u s r / l o c a l / a p a c h e / h t d o c s / d i r l y chmod
-R h t t p d : h t t p d / u s r / l o c a l / a p a c h e / h t d o c s / d i r l para
crear el directorio d i r l bajo su documento y para cambiar su dueo a
usuario y grupo h t t p d . Estoy suponiendo que ha ejecutado Apache como
el usuario h t t p d . Haga lo mismo para d i r 2 .
3. Ejecute el comando l y n x -dump - h e a d h t t p : / / l o c a l h o s t /
k a b i r . h t m l . Esto lanzar el navegador Web Lynx y le dir que muestre
Mtftl
nicamente las cabeceras de respuesta devueltas por el servidor Web. Ahora, suponiendo que no tiene un archivo llamado K a b i r . h t m l en el directorio / u s r / l o c a l / a p a c h e / d i r l , ni en el / u s r / l o c a l / a p a c h e /
d i r 2 , ni en el / u s r / l o c a l / a p a c h e , debera ver una respuesta parecida a la siguiente:
HTTP/1.1 404 Not Found
Date: Fri, 16 Mar 2001 06:06:51 GMT
Server: Apache/2.0.14 (Unix)
Connection: cise
Content-Type : text/html; charset=Vso-8859-1
EE3
$1
j
$2
$3
(/foo)/s=(Java)/(bar/)
Y
S1/$3[E=STATUS:S21
URL sustituida:
/foo/bar/
mod rewrite
Variables de entorno
STATUS=Java
Procesamiento interno
de solicitudes
Servidor Apache
I Salida de la solicitud
El valor de $2 se almacena en la variable de entorno llamada STATUS utilizando el indicador E. Cuando esta regla est en su sitio y se realiza una solicitud
-dump
-head h t t p : / / l o c a l h o s t / d i r l /S=value/
He acortado la salida de registro de reescritura por motivos de brevedad. Observe que m o d _ r e w r i t e ha fijado la variable STATUS en V a l u ' , por lo
que ahora si un script CGI basado en Perl quiere acceder al valor de la variable de
entorno STATUS, puede utilizar $ENV { STATUS }. De igual modo, una directiva
Server-Side Include (SSI) tambin puede acceder a esta variable de entorno.
IN
192.168.1.100.
Para crear un sitio Web para dos amigos llamados Joe y Jennifer, necesita los
siguientes registros DNS para d o m a i n . com:
www.domain.com.
www.joe.domain.com.
www.jennifer.domain.com.
IN
IN
IN
A
CNAME
CNAME
192.168.1.100.
www.domain.com.
www.domain.com.
Una vez que el DNS est preparado y probado, tendr que configurar Apache
para servir estos sitios utilizando directorios / h o m e / u s e r n a m e / w w w , en los
que cada u s e r n a m e es el nombre de la cuenta de usuario de su amigo.
La siguiente asignacin de la regla de reescritura se puede utilizar para reescribir
internamente h t t p : //www . u s e r n a m e . domain . c o m / a n y p a t h a / h o m e /
username/www/anypath:
ESI
$1
I
mod_rewrte
(/anypath)
'i
$1
$2
www.(username).host.com(/anypath)
I
Sustituye la URL actual
/home/$1$2
/home/usemame/anypath
'
Salida de la solicitud
Servidor Apache
Kggl
!-f
%{REQUEST_URI}
(.+)
!-U
http://Web serverB.dom/$l
http://www.mydomain.com/download/
http://www.mydomain.com/download/
http://www.mydomain.com/download/
http://www.mydomain.com/download/
http://www.mydomain.uk/download/
MftM
de
ch
http://www.mydomain.de/download/
http://www.mydomain.ch/download/
I http://vvvvw.mydomaln.eom/dovvnload/index.h
mod rewrite
$1
/download/(index.html)
dialupOOl .demon.uk::index.html
j.
_ _
dialupOOl.demon.(uk)::(index.html)
%{sitemap:$1 |www.mydomain.com/download}$2
(D
http://www.mydomain.uk/download/index.html
T
I Localizacin: http://www.mydomain.uk/download/index.htinl
Servidor Apache
f
www.mydomain.uk!
EII
if ( c u r r e n t URL matches a
then
f u l l y - q u a l i f i e d - h o s t n a m e : :anything)
then
S u b s t i t u t e d URL = v a l u e - o f - t h e - k e y $ 2
#donde $2 es c u a l q u i e r cosa que se e n c u e n t r e despus de
#fully-qualified-hostname: :
pattern
Else
# Utiliza el valor por defecto www.mydomain.com/
download/$2
Substituted URL = www.mydomain.com/download/$2
endif
Endif
%{TIME_HOUR}%(TIME_MIN}
%{TIME HOUR}%{TIME MIN(
>0700
<1900
RewriteRule
RewriteRule
foo\.html5
"foo\.html$
foo.day.html
foo.night.html
Manejar contenido
Los ejemplos de esta seccin versan sobre reglas de reescritura de contenido
especfico. Le mostrar cmo crear las URL de compatibilidad retroactiva, a
reescribir contenido basado en el navegador, a crear HTML transparente al usuario final para las redirecciones CGI, y este tipo de cosas.
*foo\.html$
bar.html
Si quiere dejar que el navegador se d cuenta del cambio, puede realizar una
reescritura externa de modo que el navegador mostrar la nueva URL. Todo lo
que necesita hacer es aadir el indicador R del siguiente modo:
RewriteRule
foo\.html$
bar.html
[R]
lcM:l
"Mozilla/5.*
foo.cool.html
[L]
foo\.html$
foo.cgi
[T=application/x-httpd-cgi]
Restriccin de acceso
Estos ejemplos muestran temas sobre el control de acceso. En esta seccin le
muestro cmo controlar el acceso a ciertas reas de su sitio Web utilizando el
mdulo para rescribir URL.
KEE1
Robots de bloqueo
Es sencillo bloquear un programa rastreador de Web (tambin llamados robots) molesto, para que no pueda obtener pginas de un sitio Web determinado.
Puede probar con un archivo / r o b o t s . t x t que contenga entradas de Robot
Exclusin Protocol, pero, normalmente, esto no es suficiente para deshacerse de
estos tipos de robots. Una solucin podra ser:
A
RewriteCond %{HTTP_USER_AGENT}
NameOfBadRobot.*
A
RewriteCond %{REMOTE^ADDR}
123\ . 45\.67\. [ 8?9]$
RewriteRule 'Vnot/to/be/indexed/by/robots/.+
[F]
Como puede ver, coincide la cabecera User-Agent del robot, junto con la direccin IP del host que se utiliza. Las condiciones anteriores permiten que se
comprueben varias direcciones IP (123 . 45 . 67 . 8 y 123 . 4 5 . 6 7 . 9 ) .
DEFLECTED
DEFLECTED
http://somewhere.com/
Mil
Eli] Establecer
un servidor
Proxy
En este captulo
1. Analizamos los tipos de servidores proxy.
2. Configuramos Apache como un servidor proxy.
3. Preparamos navegadores Web para proxies.
Un servidor proxy es un sistema que se sita entre el host del cliente y el
servidor al que quiere acceder. Cuando un host solicita un cierto recurso remoto
utilizando una URL, el servidor proxy recibe esta solicitud y utiliza el recurso
para satisfacer la solicitud del cliente. En trminos generales, un servidor proxy
acta como un servidor para los host del cliente y como un cliente para los servidores remotos.
En un escenario tpico de proxy, este proceso permite al servidor proxy almacenar el contenido solicitado en un cach. Cualquier solicitud nueva que requiera
informacin que se encuentra en el cach no necesita ser servida trayendo la
informacin desde el servidor remoto. En lugar de eso, la nueva solicitud se sirve
desde los datos del cach. Esto permite a los servidores proxy suavizar los cuellos
de botella. Sin embargo, esto no es todo lo que un servidor proxy puede hacer.
Este captulo le ensea a convertir Apache en un servidor proxy que puede llevar
ItEfcl
Control de registro y acceso: utilizando un servidor proxy, puede controlar el uso que hacen los empleados o los estudiantes de Internet (o incluso
de intranet). Puede bloquear el acceso a determinados sitios Web para
proteger a su compaa, y puede evitar que abusen del tiempo de su compaa. Analizando los accesos a su servidor proxy y los registros de error,
puede identificar los patrones de uso y realizar una poltica de utilizacin
de la red ms adecuada en el futuro.
E3
Proxy forward
Un proxy forward normalmente se sita entre el host del usuario y los recursos remotos a los que quiere acceder. Un recurso puede ser un recurso de Internet,
como muestra la figura 10.1, o puede ser un recurso de intranet. La siguiente
solicitud para el mismo recurso ser servida desde los datos del cach si los datos
no han expirado.
Internet
J
host
Router
Servidor
proxy
forward
Hub de la
LAN
host
>
host
Figura 10.1. Un servidor proxy forward
Los hosts usuarios saben que estn utilizando un servidor proxy porque cada
host debe ser configurado para utilizar un servidor proxy. As por ejemplo, es
necesario que le diga al navegador Web que utilice un servidor proxy antes de que
el navegador pueda utilizarlo. Todas las solicitudes remotas estn encauzadas
mediante el servidor forward mostrado en la figura 10.1, proporcionando, de este
modo, una solucin manejable y de coste efectivo para reducir la utilizacin de
ancho de banda e implementar la poltica de acceso a usuarios. Este tipo de servidores proxy tambin se conocen con el nombre de servidor proxy caching. El
proxy reverse tambin mete datos en el cach pero funciona de forma contraria a
como lo hace el servidor proxy forward.
Proxy reverse
Un proxy reverse se sita frente a un recurso de Internet, tal y como muestra la
figura 10.2, o frente a un recurso de intranet. En estos sistemas, el proxy reverse
recupera los recursos solicitados del servidor original y los devuelve al host usuario.
El host usuario conectado con el servidor proxy no es consciente de estar
conectado al servidor proxy, sino que piensa que est conectado directamente al
servidor que contiene los recursos, a diferencia de lo que ocurre cuando utilizamos un servidor forward. Desde el punto de vista del usuario, est accediendo al
recurso solicitado directamente.
Internet
t k
i <
Router
Servidor
proxy
reverse ^
Servidor
Web
Hub ae ia
host
LAN
host
Figura 10.2. Un servidor proxy reverse
La figura 10.2 muestra que los usuarios de Internet tienen que atravesar el
proxy reverse para conectarse al servidor Web. Como es un proxy reverse, los
usuarios no son conscientes de su existencia y piensan que estn conectados con
el servidor Web. Los usuarios de una LAN pueden conectar directamente con el
servidor Web desde la red interna, tal y como se muestra en la figura.
Por ejemplo, si se utiliza un servidor proxy reverse para un sitio Web llamado
w w w . c s u s . e d u , entonces todos los estudiantes de CSUS (California State
University, Sacramento) tienen que dirigir su navegador a www . c s u s . edu y no
hacer referencia a ninguna configuracin proxy en su navegador. El navegador
manda una solicitud al servidor www . c s u s . edu. Lo cierto es que al navegador
no le sirve de mucho saber que el servidor www. c s u s . edu es en realidad un
servidor proxy reverse que traduce internamente las solicitudes a un servidor Web
EE9
llamado i n t e r n a l - w w w . c s u s . edu, para obtener el contenido de la solicitud. Qu ventaja tiene este tipo de sistemas? Como el dato est cacheado para
cada solicitud, el servidor proxy puede proporcionar algn soporte de balance de
carga para los verdaderos servidores que se encuentran detrs de la escena.
NOTA: Apache no soporta por ahora el servicio proxy reveise; uia embargo, se implementar en la siguiente versin del mdulo jnod_proxy,
Directivas mod_proxy
El soporte proxy en Apache proviene del mdulo m o d p r o x y . Este mdulo
no est compilado por defecto. Tiene que reconfigurar Apache utilizando . /
c o n f ig . s t a t u s - - e n a b l e - m o d u l e = p r o x y del directorio de la distribucin de la fuente de Apache y ejecutar make && make i n s t a l l para
recompilar y reinstalar el servidor Apache actualizado. Actualmente, slo est
implementado un servidor proxy caching en Apache. Es capaz de soportar los
protocolos HTTP 1.1, HTTPS (va CONNECT para SSL) y FTP. El mdulo
tambin se puede configurar para conectarse a otros mdulos proxy para estos y
otros protocolos. Proporciona las directivas que se discuten en las siguientes
secciones.
ProxyRequests
P r o x y R e q u e s t s le permite activar o desactivar el servicio caching del proxy.
Sin embargo, no afecta a la funcionalidad de la directiva P r o x y P a s s .
Sintaxis: P r o x y R e q u e s t s On | Of f
Predefinido: P r o x y R e q u e s t s Of f
Contexto: configuracin del servidor, host virtual
ProxyRemote
P r o x y R e m o t e le permite a su servidor funcionar de interfaz con otro servidor proxy.
Sintaxis: P r o x y R e m o t e
match
remote proxy_server_URL
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual
El valor de correspondencia puede ser alguno de los siguientes:
E3
ftp
http://ftp.proxy.evoknow.com:8000
enva todas las solicitudes FTP que proceden del servidor proxy local a f t p : /
/ f t p . p r o x y . evoknow . com. Las solicitudes se envan va HTTP, por lo
tanto, la verdadera transaccin FTP tiene lugar en el servidor proxy remoto.
Si quiere dirigir todas las solicitudes proxy de un determinado sitio Web a este
servidor proxy directamente, puede hacerlo con esta directiva. Por ejemplo:
ProxyRemote
com:8000
http://www.bigisp.com/ http://web-proxy.bigisp.
Esto enva todas las solicitudes que coinciden con www . b i g i s p . com a webp r o x y . b i g i s p . com. Si quiere dirigir todas sus solicitudes proxy a otro proxy,
puede utilizar el asterisco como correspondencia. Por ejemplo:
ProxyRemote * http://proxy.domain.com
ProxyPass
P r o x y P a s s le permite mapearun rbol de documentos del servidor Web en
el espacio de documentos de su servidor proxy.
Sintaxis: P r o x y P a s s
relative_URL
destination_URL
www.microsoft.com/
http://proxy.evoknow.com/internet/microsoft
acta como un mirror del sitio Web remoto. Cualquier solicitud que utiliza el
< r e l a t i v e - U R L > se convertir internamente en una solicitud proxy para l
<destination-URL>.
Si el sitio remoto incluye referencias absolutas, las imgenes no aparecern y
los enlaces no funcionarn. Tampoco podr utilizar esta directiva con los servidores SSL.
ProxyBlock
La directiva ProxyBlock le permite bloquear el acceso al host o al dominio.
Sintaxis: P r o x y B l o c k p a r t i a l _ o r _ f u l l _ h o s t n a m e [ .
. ]
gates
bloquea todos los accesos a cualquier host que coincida con cualquiera de las
palabras o nombres de dominio anterior. El mdulo m o d p r o x y intenta determinar la direccin IP para estos hosts durante el arranque del servidor, y los
cachea para correspondencias posteriores.
Para bloquear el acceso a todos los hosts, utilice:
ProxyBlock *
NoProxy
NoProxy le proporciona cierto control sobre la directiva P r o x y R e m o t e en
un entorno de intranet.
Sintaxis: NoProxy Domain_name |
Hostname
Subnet
IP_Address
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual
IcEkl
Puede especificar que un nombre de dominio, o una subred, o una direccin IP,
o un nombre de host no sea servido por el servidor proxy especificado en la
directiva P r o x y R e m o t e . Por ejemplo:
ProxyRemote
NoProxy
http://firewall.yourcompany.com:8080
.yourcompany.com
Proxy Domain
ProxyDomain especifica el nombre de dominio para el servidor proxy.
Sintaxis: ProxyDomain Domain
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual
Cuando esta directiva tiene asignado el nombre de dominio local en una intranet,
cualquier solicitud que no incluye a un nombre de dominio, tendr este nombre de
dominio adjunto; por ejemplo:
ProxyDomain
.evoknow.com
Cuando un usuario del dominio evoknow . com enva una solicitud para una
URL del t i p o h t t p : / / m a r k e t i n g / u s . h t m l , la solicitud es regenerada como
la siguiente URL:
http://marketing.evoknow.com/us.html
CacheRoot
C a c h e R o o t le permite cachear el disco. Puede especificar un nombre de
directorio en el que el servidor proxy puede escribir archivos cacheados.
Sintaxis: C a c h e R o o t
directory
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual
El servidor Apache que est ejecutando el mdulo proxy, debe escribir permisos para el directorio, por ejemplo:
CacheRoot
M.-M
/www/proxy/cache
CacheSize
C a c h e S i z e determina la cantidad de espacio en el disco (en kilobytes) que
se debe utilizar para el cacheado del disco. Los archivos cacheados estn escritos
en el directorio especificado por la directiva C a c h e R o o t .
Sintaxis: C a c h e S i z e
kilobytes
Predefinido: C a c h e S i z e 5
Contexto: configuracin del servidor, host virtual
NOTA: Aunque ef servidor proxy puede escribir trias datos de tos que estn
especificados en el liante* el estq^nm4elacotecci^WsQrat&vor
proxy eliminar archivos hasta que la utilizacin se encuentre en el valor
asignado o pe* debajo de ste. La asignacin por4efec|o (5Kj no estadista; recomiendo cualquier asignacin entre 10MB y 108 dependiendo de la
carga d usuarios;
, , . . - ; ..-.,: ,^ ,-.
CacheGcInterval
C a c h e G c I n t e r v a l determina el momento (en horas) en el que Apache
debe comprobar los directorios cach para eliminar los archivos que han expirado. Esto tambin tienen lugar cuando Apache fuerza el lmite del espacio de disco
utilizado especificado por la directiva C a c h e S i z e .
Sintaxis: C a c h e G c I n t e r v a l
hours
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual
CacheMaxExpire
C a c h e M a x E x p i r e determina el momento (en horas) en el que expiran todos
los documentos cacheados. Esta directiva invalida cualquier fecha de expiracin
especificada en el documento; por lo tanto, si un documento tiene una fecha de
expiracin posterior al mximo especificado por esta directiva, el documento se
elimina igualmente.
Sintaxis: C a c h e M a x E x p i r e
hours
Predefinido: C a c h e M a x E x p i r e 24
Contexto: configuracin del servidor, host virtual
El valor por defecto permite que los documentos cacheados expiren en 24
horas. Si desea que los documentos expiren ms tarde cambie este valor.
CacheLastModifiedFactor
C a c h e L a s t M o d i f i e d F a c t o r determina un factor que se utiliza para calcular el momento de expiracin cuando el servidor Web original no distribuye una
fecha de expiracin para el documento.
Sintaxis: C a c h e L a s t M o d i f i e d F a c t o r
number
floating
Predefinido: C a c h e L a s t M o d i f i e d F a c t o r
0.1
point
CacheDirLength
Cuando est activado el caching de un disco, Apache crea subdirectorios en el
directorio especificado por la directiva C a c h e R o o t . Esta directiva determina el
nmero de caracteres utilizados en la creacin de los nombres de los directorios.
Realmente no necesita cambiar el valor por defecto de esta directiva. Los usuarios
curiosos que quieran saber cmo o por qu se han creado estos directorios, tienen
una respuesta simplificada a continuacin.
Sintaxis: C a c h e D i r L e n g t h
length
Predefinido: C a c h e D i r L e n g t h 1
Contexto: configuracin del servidor, host virtual
Apache utiliza un esquema de digestin cuando crea la ruta y el nombre de
archivo para los datos de la URL que se van a cachear. Por ejemplo, cuando tiene
activado el caching y accede a una URL (como w w w . m i c r o s o f t . c o m ) me-
diante su servidor proxy Apache, el servidor digiere esta URL de modo que ms
tarde puede recuperar datos rpidamente. Esta digestin es del tipo
lYSRxSmB2 0Q_HkqkTuXeqvw. Si se utiliza el valor por defecto para las directivas C a c h e D i r L e n g t h y C a c h e D i r L e v e l s , Apache almacena los datos encontrados en www . m i c r o s o f t. com en un archivo llamado:
%CacheRoot%/l/Y/S/RRxSmB20Q_HkqkTuXeqvw
CacheDirLevels
C a c h e D i r L e v e l s determina el nmero de directorios que crear Apache
para almacenar los archivos de datos cacheados. Remtase a la seccin anterior
para obtener la informacin relacionada.
Sintaxis: C a c h e D i r L e v e l s
levis
Predefinido: C a c h e D i r L e v e l s 3
Contexto: configuracin del servidor, host virtual
CacheDefaultExpire
CacheDef a u l t E x p i r e proporciona el tiempo por defecto (en horas) que
se utiliza para expirar un archivo cacheado cuando no se sabe el momento de la
ltima actualizacin de un archivo. C a c h e M a x E x p i r e no invalida esta asignacin.
Sintaxis: C a c h e D e f a u l t E x p i r e
hours
Predefinido: C a c h e D e f a u l t E x p i r e
NoCache
Sintaxis: NoCache Domain_name
Hostname
. . . ]
| Subnet |
IP_Address |
Predefinido: ninguno
Contexto: configuracin del servidor, host virtual
proxy:*>
</Directory>
proxy:http://www.evoknow.com/>
</Directory>
A continuacin vamos a ver unas cuantas configuraciones proxy que se utilizan habitualmente.
ItUfl
hostC
A
Y
C Internet )206.171.50.254
Servidor
proxy
192.168.1.254
Hub de la
<
LAN
hostB
1Q9 1RH 1 9
A.
Y
hostA
192.168.1.1
Si no est seguro de cmo crear los archivos de contrasea necesarios, remtase a captulo anteriores.
Adems, es posible restringir el acceso para un protocolo. Por ejemplo:
<Directory
proxy:http:*>
</Directory>
le permite controlar cmo se procesan las solicitudes HTTP en su servidor
proxy. Del mismo modo, puede utilizar el esquema siguiente para controlar cmo
maneja el servidor proxy cada protocolo:
<Directory
</Directory>
O
im
proxy:ftp:*>
<Directory
proxy:https:*>
</Directory>
Esto convierte el servidor proxy en un mirror del sitio Web www. a p a c h e . org.
Esta configuracin convierte a mi servidor p r o x y b l a c k h o l e . evoknow . com
en un mirrow Apache. Cuando un usuario introduce la URL h t t p : //
b l a c k h o l e . e v o k n o w . com, el usuario recibe la pgina de inicio del mirrow
Apache como si estuviese accediendo a www . a p a c h e . o r g .
Antes de que haga una copia local de un sitio Web, es importante que obtenga
permiso, ya que suelen estar implicados asuntos relacionados con el copyright.
M+J
puede convertir en un gran lo cada vez que tenga que cambiar su configuracin
proxy. Aqu es donde tiene sentido la configuracin automtica de proxy en los
navegadores.
[> Apariencia
^ Navigator
Historie!
O Conexin dVecta con Internet
Idioma;
Aplicaciones a u . . .
Navegacin int...
Buscar en nter..
http
ProxySSL:
prr
nfer
h t t p / / p n n nite
jm
Pjjerto;
18080
om
Puerto.:
803u '
Puerto:
[o
Exploracin co...
Descargas
[> Cornposer
l> Correo/Grupos de ...
Proxy TP:
Proxy de Gopher: f
Sistema SOQCS:
!
OSOCKSv4
Puerto:
[o
Puerto:
J7T"
0 5OOCSvS
OICQ
[> Privacidad & segur...
^Avanzadas
5eaiercias de ...
Cache
Proxy
Conexiones de ,.
Instalacin de ...
Pueda_delraton_
| Aceptar
1 [ Cancelar J
j5J*J3
^pifXz^l
-f
/path/to/access/log
Opciones de I n t e r n e t
Conexiones
General
I
Programas
Seguridad
j
|
Opciones avanzadas
Privacidad
I
Contenido
Pagina de nido ~
Puede cambiar la pgina que utza como pagina de inicio.
Qieccin
|"j
Usar actual
Predeterminada
Eimma archivos...
Configuracin...
Fuentes...
I
I
p^TJ
^J
Idiomas...
Aceptar |
gorrar Historial
Accesjbidad...
Cancelar
2. Haga clic en la pestaa de Conexiones y haga clic en el botn de Configuracin de LAN. Supongo que est utilizando una conexin LAN gateway/
router a Internet.
Itfcfcl
Puerto: 18080
Opciones avanzadas... I
Aceptar
Cancelar
En este caso, al igual que en el Netscape Navigator, puede especificar diferentes ajustes para los servidores proxy. Cuando haga clic en Aceptar y en el botn
Aplicar para aplicar los nuevos ajustes, su navegador se configurar para utilizar
el servidor proxy.
MJil
EH
Significado
NULL
DIRECT
PROXY host:port;
SOCKS host:port;
MiU
SOCKS
Nombre de la funcin
Explicacin
isPlainHostName(host)
DnsDomainls(host, domain)
localHostOrDomainls (host,
fqdnhost)
Ejemplos
LocalHostOrDomainls
("a.b.org", "a.c.com") devuelve
false.
isResolvable(host)
EHEI
Nombre de la funcin
Explicacin
Ejemplos
islnNet(host, IP address
pattern, netmask)
dnsResolve(host)
mylpAddress()
dnsDomainLevels (host)
shExpMatch(string,
shellExpression)
var hostIP = mylpAddress() devuelve el IP del host del navegador Web y almacena en l una
variable llamada hostIP.
7to/
weekdayRangefFRI") devuelve
true si estamos a Friday (viernes)
segn la hora local.
weekdayRangefMON", "FRI",
"GMT") devuelve true si estamos
en el rango de Monday-Friday (lunes a viernes) en la hora GMT.
Nombre de la funcin
Explicacin
Ejemplos
dateRange(day)
dateRange(day1, day2)
dateRange(month)
dateRange(month1, month2)
dateRange(year)
dateRange(year1, year2)
dateRange(day1, monthl, day2,
month2)
dateRange(month1, yearl,
month2, year2)
dateRange(day1, monthl,
yearl, day2, month2, year2)
dateRange(day1, monthl,
yearl, day2, month2, year2,
gmt)
timeRange(hour)
timeRange(hour1, hour2)
timeRange(hour1, mn1, hour2,
min2)
timeRange(hour1, mn1, s e d ,
hour2, min2, sec2)
timeRange(hour1, minl, s e d ,
hour2, min2, sec2, gmt
IcMJ
modo, un navegador Web en el host B utiliza el mtodo F i n d P r o x y ForURL () para evaluar cmo acceder a h t t p : //www. n i t e c . com. La figura muestra que el mtodo F i n d P r o x y F o r U R L () instruye al navegador para
que acceda al sitio directamente.
Host A
Solicitud:
.http://www.microsoft.com
FindProxyForURL()
<
Configuracin proxy:
Prueba proxy.nitec.com:8080 y
entonces intenta el acceso DIRECT
Servidor proxy
Proxy.nitec.com
Router
HostB
Solicitud:
http://www.nitec.coi
k.
FindProxyForURL()
Configuracin proxy:
acceso DIRECT
<
Servidor Web
www.nitec.com
Internet )
|| dnsDomainls(host, ".nitec.com"))
return "DIRECT";
else
return "PROXY proxy.nitec.com:8081; DIRECT";
MsVJ
Solicitudes
Servidores
http://www.yahoo.com
ftp://ftp.microsoft.com/
https://www.amazon.com/
http://www.nitec.com
Servidor Proxy
http-proxy.nitec.com
Servidor Proxy
Router
ftp-proxy.nitec.com
Servidor Proxy
ssl-proxy.nitec.com
www.nitec.com
f
https://secured.nitec.com
secured.nitec.com
ftp://ftp.nitec.com
ftp.nitec.com
lcM;l
Internet J
K&l
exit 0;
sub specialClient{
#
# Esta subrutina saca una configuracin del servidor proxy
#
print <<FUNC;
function FindProxyForURL(url, host)
{
if (isPlainHostName(host) I I
dnsDomainls(host, ".nitec.com"))
return "DIRECT";
else if (shExpMatch (host, "*.com"))
return "PROXY com-proxy.nitec.com:8080; "
else if (shExpMatch(host, "*.edu"))
return "PROXY edu-proxy.nitec.com:8080; "
else
return "DIRECT";
}
FUNC
}
sub otherClients(
#
# Esta subrutina saca una configuracin del servidor proxy
#
print <<FUNC;
function FindProxyForURL(url, host)
{
return "DIRECT";
}
FUNC
Este script da lugar a una configuracin especial del servidor proxy para el
host con la direccin IP 2 0 6 . 1 7 1 . 5 0 . 5 1 ; el resto de los host obtienen una
configuracin distinta. Para acceder a esta configuracin proxy, puedo preparar
el Netscape Navigator o el IE para dirigir este script a h t t p : //
www . n i t e c . c o m / c g i - b i n / p r o x y . p l . Por ejemplo, en IE puede especificar una URL igual a la anterior como la direccin del script de configuracin
1M1
ItVXl
n i Ejecutar
sitios Web
perfectos
En este captulo
1. Creamos un ciclo Web para su organizacin.
2. Generamos sitios Web basados en plantillas utilizando el makepage.
3. Publicamos en una intranet utilizando el mtodo PUT HTTP.
4. Estandarizamos sus estndares.
5. Hacemos sus Web ms intuitivas.
6. Promocionamos su sitio Web en Internet.
En este momento, tendr probablemente, uno o ms sitios Web preparados y
ejecutndose en su nuevo servidor Web Apache. Toda su empresa le est felicitando por su maravilloso trabajo. Est usted en el cielo, verdad? Incorrecto!
Muy pronto sus compaeros le preguntarn cmo actualizar sus pginas en el
sitio Web. Por ejemplo, el departamento de marketing podra llamar y preguntarle
cmo actualizar la informacin referente a los precios, o el departamento legal le
podra preguntar cmo puede aadir ms contenido legal en uno de los sitios
Web.
IcWcl
Publicacin automatizada: mi experiencia es que desarrollar constantemente contenido nuevo y excitante es un gran desafo en s mismo. Si aade
tareas manuales de presentacin de contenido, muy pronto tendr las cosas
fuera de control. Por ejemplo, si tiene tres autores de contenido escribiendo
pginas HTML para un sitio, debera plantear una presentacin y un objetivo comunes, podra utilizar plantillas HTML e integrar el contenido utilizando un proceso automatizado. En este captulo se discuten algunos de
estos procesos.
Prcticas estndar: para que el sitio Web sea intuitivo, hay una serie de
guas que hay que seguir. Discutiremos algunas de las ms importantes en
este captulo.
(Z
ICIO
Ciclo de prueba
1
Fase de
desarrollo
Fase de
prototipo
Fase de
produccin
, k
Tal y como muestra la figura, un ciclo Web se inicia con la fase de desarrollo,
contina con la fase prototipo y termina con la fase de produccin. Cuando se
reinicia el ciclo, sin embargo, se inicia con la fase de produccin y repite la ruta
previa del ciclo. Las fases del ciclo son:
Fase de desarrollo: en esta fase, comienza a desarrollar su contenido
Web. El contenido, ya sea documentos HTML o scripts CG1 o cualquier
otra cosa, queda totalmente desarrollado y probado en esta fase. Una vez
que los desarrolladores estn totalmente seguros de que su trabajo est
listo para integrarse con el sitio o sitios Web, el nuevo contenido desarrollado pasa a la siguiente fase.
Fase prototipo: la fase de prototipo permite la integracin del nuevo contenido desarrollado con el contenido existente, y permite el desarrollo de
ciclos de prueba. Una vez en la fase de prototipo, los desarrolladores no
siguen participando en el proceso. En este proceso, se introducen sujetos
prueba que no son desarrolladores, para eliminar los posibles prejuicios a
la hora de evaluar la correccin del contenido. En este momento, podr
localizar algunos problemas o quiz obtenga un conjunto satisfactorio de
pruebas. En este ltimo caso, est preparado para pasar el nuevo contenido, desarrollado, practicado y comprobado, a la fase de produccin. Si se
han encontrado problemas en este contenido nuevo, tendr que comenzar
desde la fase de desarrollo una vez que los desarrolladores hayan solucionado el problema en el rea de desarrollo. No permita que los desarrolladores
solucionen los problemas en el rea prototipo.
Cuando est listo para empezar otro ciclo de desarrollo (reiniciar el proceso
completo), copie el contenido de la fase de produccin y pselo a la fase de
desarrollo, de modo que los desarrolladores puedan trabajar en l. El ciclo contina del mismo modo cada vez que lo necesite.
Qu ventajas tiene todo esto para usted? Le ofrece opciones de seguridad y de
manejabilidad. Por ejemplo, si est desarrollando contenido y lo est descargando
directamente en su sistema de produccin antes de realizar la totalidad de las
pruebas, est trabajando en condiciones lmite. En la mayor parte de los casos, los
desarrolladores de contenido querrn tener su contenido probado en el entorno
local, y se darn prisa en terminar. Como un entorno de desarrollo local normalmente carece de integracin de contenido actual con el contenido nuevo, las pruebas no son siempre realistas. nicamente integrando el contenido existente con el
nuevo, puede detectar las posibles incompatibilidades. Una carga directa en el
sistema de produccin desde la fase de desarrollo, sin la fase de prototipo, puede
dar lugar a cualquiera de los siguientes errores:
El nuevo contenido puede invalidar los archivos en el sistema de produccin. Esto ocurre cuando tenemos archivos de imgenes, debido a la falta
de una convencin estndar a la hora de nombrar los archivos o debido a la
utilizacin de directorios comunes para archivos de imagen.
Pueden aparecer muchos otros problemas si hay varios desarrolladores implicados y sus proyectos estn interconectados. Si no quiere correr riesgos en la fase
de produccin, necesita pasar por la fase prototipo. Apache puede ayudarle a
implementar estas fases.
EZI
Al menos tres ordenadores distintos como servidores Apache de desarrollo, prototipo y produccin. Todos estos ordenadores ejecutan servidores Apache en el puerto 80.
public
htdocs
cgi-bin
staging
htdocs
cgi-bin
- O developer
htdocs
cgi-bin
Figura 11.2. La estructura de directorios utilizada para los sitios public, stage y
developer para "my company"
Tipo de servidor
80
1080
8080
Puede elegir cualquier otra asignacin de puertos, siempre que no utilice una
direccin de puerto que ya se est utilizando o que sea superior a 65535. El
servidor de produccin debera tener asignado el puerto 80, porque las solicitudes
HTTP se envan por defecto a esta direccin de puerto. Para crear los host virtuales
para la asignacin de puerto mostrada en la tabla 1 1.1, necesita editar el archivo
h t t p d . c o n f del servidor Apache del siguiente modo.
1. Para hacer que el servidor Apache escuche estos puertos, utilice la directiva L i s t e n :
Listen 80
Listen 1080
Listen 8080
/path/to/Apache/server/root/conf/staging
/path/to/Apache/server/root/conf/developer
/path/to/Apache/
/path/to/Apache/
"/www/mycompany/staging/htdocs"
/egi-bin/
"/www/myeompany/staging /egi-bin/"
para la configuracin del sitio prototipo. Por otro lado, para el archivo de
configuracin del sitio de desarrollo, sern:
lcl;!il
DocumentRoot
ScriptAlias
"/www/mycompany/developer/htdocs"
/cgi-bin/
"/www/mycompany/developer/cgi-bin/"
NOTA: Si utiliza una configuracin especial para su servidor de produccin, el cual utiliza informacin de la ruta absoluta, tendr qu editar los
nuevos archivos de configuracin, para los subdirectorios s t a g i r t g - y
developer.
Estos comandos copian todos los archivos y directorios de su servidor de produccin en la raz de documentos de su servidor de desarrollo. Simplemente tiene
que asegurarse de cambiar la informacin de la ruta donde sea necesario en su
sistema.
Para un entorno con varios ordenadores para el ciclo Web, puede crear un
archivo t a r en su servidor de produccin y copiarlo en su sitio de desarrollo va
FTP.
Asigne los permisos de archivos de modo que Apache pueda leer todos los
archivos y ejecutar scripts CGI. Si tiene directorios en los que Apache podra
tener acceso de escritura (para scripts CGI que escriban datos), debera asignar
tambin estos permisos. Una vez que lo ha hecho, inicie o reinicie Apache para
servir el sitio de desarrollo.
il:il
Ahora, tiene que asegurarse de que aparece el sitio de desarrollo (en el navegador
Web) igual que el sitio de produccin. Realice algunas comparaciones manuales y
algunas pruebas. Asegrese de que los script tambin funcionan.
Si cualquiera de sus scripts CGI produce las URL codificadas por hardware
para su servidor de produccin, seguirn haciendo lo mismo para su sitio de
desarrollo. Puede ignorar estas URL o dejarlas fijas de modo que utilicen la
variable de entorno SERVER_NAME y la direccin de puerto de SERVER_PORT.
Cumple su propsito? En otras palabras, la funcionalidad que proporciona el nuevo contenido cumple sus especificaciones?
Tiene efectos secundarios el nuevo contenido? Por ejemplo, si el contenido nuevo es realmente un nuevo script CGI, debera utilizar el soporte de
depuracin de errores de Apache para controlar cmo funciona el script.
il
Mueva un proyecto cada vez, de modo que pueda encontrar y resolver los
problemas de prototipo. Por ejemplo, si aade tres scripts CGI nuevos a su
sistema, mueva un script cada vez al rea prototipo. Realice tanto las
pruebas de funcionalidad como las de integracin del sitio. Si el script
supera la prueba, mueva el siguiente script al rea prototipo. Una vez que
ha movido todo el contenido nuevo, puede realizar las pruebas de nivel de
integracin del sitio. Monitorice con cuidado los registros del sitio de prototipo. Nota algo raro en los registros de error? Si no es as, entonces est
preparado para realizar una actualizacin de su sitio de produccin. Ha de
tener cuidado al llevar esto a cabo. Por ejemplo, si tiene algn script CGI
#
#
#
#
#
#
#
/bin/chown -R httpd.httpd
#
#
#
#
#
#
$PRODUCTION_DIR
/bin/chmod - R 750
$PRODUCTION_DIR
Una vez que ejecutamos este script, debera realizar una prueba rpida para
asegurarse de que todo est en orden. En caso de problemas, puede volver a
nombrar el directorio de produccin actual, y cambiar el nombre del directorio
prototipo al nombre de su directorio de produccin para restablecer su ultimo
sitio de produccin.
IcMl
proceso de presentacin de contenido que est altamente automatizado y que requiera muy poca participacin por nuestra parte.
Existe una gran cantidad de programas en el mercado que nos pueden ayudar
en este proceso.
Algunos desarrolladores utilizan Microsoft Front Page para gestionar el desarrollo de contenido; otros utilizan el Dreamweaver; y algunos utilizan otros productos. Algunas personas utilizan mtodos ms robustos de compaas de desarrollo
Web que cuestan cientos o miles de dlares. A continuacin tenemos una solucin
que me ha funcionado (y lo har durante aos) en el mantenimiento de sitios Web.
Los requisitos para esta solucin son:
jckfcl
EtUM
EnablePut
E n a b l e P u t activa o desactiva el mtodo PUT. Para utilizar el mtodo PUT,
debe activarlo asignndole el valor On a esta directiva.
Sintaxis: E n a b l e P u t
On|Off
Predefinido: E n a b l e P u t Of f
Contexto: directorio, localizacin
EnabieDelete
E n a b l e D e l e t e On | Off activa o desactiva el mtodo DELETE, que le
permite eliminar una pgina Web va HTTP. Para utilizar el mtodo DELETE,
debe activarlo asignando el valor On a esta directiva.
Sintaxis: E n a b l e D e l e t e On
Predefinido: E n a b l e D e l e t e
Off
Off
umask
urnask o c t a l _ determina la mscara de permiso por defecto (es decir,
umask) para un directorio. El valor por defecto de 0 07 asegura que cada archivo dentro del directorio se crea con permiso 770, que nicamente permite al dueo
del archivo y al grupo leer, escribir y ejecutar el archivo.
IckVJ
Sintaxis: umask
octal_value
Predefinido: umask o c t a l _ 0 0 7
Contexto: directorio, localizacin
&&
make
location alias>
EnablePut On
AuthType Basic
AuthName "Name_of_the_Web_section"
AuthUserFile path_to_user_password_fi le
<Limit PUT>
require valid-user
</Limit>
</Location>
/publish/
"/www/mysite/htdocs/publish/"
<Location /publish>
EnablePut On
AuthType Basic
AuthName "Web Publishing Section"
AuthUserFile /www/mysite/secrets/.users
<Limit PUT>
require valid-user
</Lirait>
</Location>
KEE1
number of__chid s e r v e r s
usernamel
groupnamel
Mjil
NameVirtualHost
<VirtualHost
IP Address
IP_Address>
192.168.1.100
<VirtualHost 192.168.1.100>
ServerName carol.domain.com
AssignUserID carol carol_group
DocumentRoot /www/intranet/htdocs/carol
Alias
/publish/
"/www/intranet/htdocs/carol/publish/"
<Location /publish>
EnablePut On
AuthType Basic
AuthName "Carol's Publishing Site"
AuthUserFile /www/intranet/secrets/.users
<Limit PUT>
require carol
</Limit>
</Location>
</VirutalHost>
WAtlM
3. Una vez que ha creado un host virtual para cada usuario, reinicie Apache
utilizando el comando / u s r / l o c a l / a p a c h e / b i n / a p a c h e c t l
r e s t a r t y probando el sistema de cada usuario publicando una pgina
de prueba utilizando la URL apropiada.
Backup online
El backup online es til en caso de emergencia. Puede acceder rpidamente a
los datos copiados y, en la mayor parte de los casos, realizar en pocos minutos las
tareas necesarias de restitucin. Para obtener una solucin backup online, buscar
un fabricante de backup online comercial o hablar con su ISP. Si est alojando su
servidor o servidores Web en su propia red, sin embargo, puede mantener backups
de otro host en su red. En la mayora de los sistemas Unix, puede ejecutar un
programa llamado r d i s t para crear directorios mirror en sus sitios Web en
otros host Unix (en el captulo 23 tiene un ejemplo de una aplicacin de mirrow de
un sitio basado en r d i s t ) .
Podra ser una buena idea mantener una versin comprimida de los datos Web
en el servidor en s. En los sistema Unix, puede establecer un trabajo c r o n para
crear un archivo t a r comprimido con los datos de la Web con una frecuencia
determinada. Por ejemplo:
# Para sistemas V-ish Unix, rango laborable 0?6 donde 0=Domingo
# Para sistemas BSD-ish utiliza rango laborable 1?7 donde
l=Lunes
# Es un ejemplo es para un sistema Linux (System V-ish cornd)
30 2 * * 0,1, 3, 5, root /bin/tar czf /backup/M-W-F-Sun.tgz
/www/*
30 2 * * 2, 4, 6
root /bin/tar czf /backup/T-TH-Sat. tgz /
www/ *
W&M
W - F - S u n . t g z . Del mismo modo, los martes, los jueves y los sbados por la
maana (a las 2:30 a.m.), la segunda entrada del c r o n crear un archivo con los
mismos datos llamado T - T H - S a t . t g z en el mismo directorio backup. Tener
dos backups le garantiza que tiene al menos dos backups de dos das en dos
archivos comprimidos.
Backup offline
Tambin puede realizar backups en un medio transportable y guardarlas en
localizaciones seguras. Este tipo de backup suele ser una operacin que consume
bastante tiempo. Para realizar este backup puede utilizar unidades de cintas, drives
duros transportables (como los discos Jaz). Yo prefiero un backup basado en
cintas de 8mm porque proporciona 8GB de capacidad de almacenaje de datos;
adems, llevan en el mercado mucho ms tiempo que el nuevo medio transportable compacto.
A medida que sus sitios Web se enriquecen de contenido, el espacio Web
disponible se llena rpidamente. Esto suele ser una consecuencia de archivos que
estn sin usar pero que nunca se han eliminado por miedo a que algo (como un
enlace) se rompa en algn sitio. Si piensa que esto est sucediendo en su sitio
Web, y est en una plataforma Unix, debera considerar ejecutar la utilidad f i n d
para localizar archivos a los que no se haya accedido durante mucho tiempo. Por
ejemplo:
find /www -ame "*.bak" -type f -atime +10 -exec ls -1 {} \;
Esto da lugar a una lista con todos los directorios /www que terminan con la
extensin . b a k y a los que no se ha accedido desde hace 10 das. Si quiere
eliminar estos archivos, puede reemplazar el comando ls -1 y realizar una
bsqueda como esta:
find /www -ame "*.bak" -type f -atime +10 -exec rm -f (} \;
Si le sirve de ayuda, puede crear una entrada c r o n que ejecute este comando
cada cierto tiempo.
Definir estndares
Con un ciclo Web en marcha, tiene un entorno que puede acomodar muchos
desarrolladores; sin embargo, nicamente creando un ciclo Web no est asegurando alta calidad de produccin Web. Una alta calidad Web requiere contenido
de alta calidad, y hay una serie de guas que puede seguir en cuanto al desarrollo
de contenido. Se trata de definir sus estndares.
Cada sitio Web debera ofrecer contenido nico para hacerlo atractivo a potenciales visitantes. Todos los tipos de contenido Web pueden clasificarse en
K&l
contenido esttico y contenido dinmico. El contenido esttico se crea normalmente con archivos HTML, y el contenido dinmico suele ser la salida de un CGI
o de otras aplicaciones del lado del servidor o del lado del cliente.
La mayora de los sitios Web utilizan una mezcla de ambos tipos de contenido
para publicar su informacin; por lo tanto, son necesarios los estndares tanto
para el desarrollo de contenido esttico como para el desarrollo de contenido
dinmico
Cada uno de sus documentos debera contener al menos estas etiquetas HTML.
Guarde imgenes in-line junto con los documentos
Las imgenes in-line de un documento deberan residir en un subdirectorio del
directorio de documentos. Las referencias de la fuente de estas imgenes deben
ser relativas, de modo que si se mueve el documento de una localizacin a otra
junto con el directorio de imgenes, la imagen sigue rindiendo exactamente igual
que antes.
tfflfe^y^fM ;fx$ep$i{>n a esta regla: si alguna de sus imgenes es
tc^iflii^jnt'^^^Q^w colocarla en un directorio central de imgenes,t^fjjfcfiralo 4e este tipo de casos es una barra d navegacin estndar
im|#en^tyf^^
archivos de imagen. La barra de navegacin se
IcliEl
tendramos que determinar estos documentos una vez movidos. Muchos sitios
guardan sus imgenes en un directorio central de imgenes (como i m a g e s ) bajo
la raz de documentos y enlazan los documentos utilizando etiquetas IMG como:
<IMG SRC="/images/images3.gif" HEIGHT="20" WIDTH="30"
ALT="Image 3 Description">
Esto resulta perfecto, pero cuando quiere eliminar el documento HTML, necesita asegurarse de que tambin elimina la imagen apropiada en el directorio cen-
Itlifcl
tral de imgenes. Si falla en este proceso, a la larga desaparecer una gran cantidad de espacio en el disco en su cantera de imgenes. Por lo tanto, no es una
buena idea mantener imgenes en un directorio central. Debera guardar imgenes
en un subdirectorio con sus enlaces.
file=/copyright.html"
-->
Ahora, todo lo que necesita hacer es crear una pgina HTML llamada
c o p y r i g h t . h t m l , y colocarla bajo su directorio raz de documentos. Como el
contenido de esta pgina HTML se inserta en el documento compatible con SSI
que hace esta llamada, no necesita utilizar las etiquetas <HTML>, <HEAD>,
<TITLE> o <BODY>. Utilizar las llamadas SSI le har la vida ms sencilla
cuando necesite actualizar el ao en el mensaje copyright, o cuando necesite realizar cualquier otro cambio.
EH3
en lugar de :
local
$variable;
porque la primera declaracin crea una variable que slo est disponible en el
mbito en el que se ha creado. La ltima definicin simplemente crea una instancia local de una variable global, lo que supone una gran confusin. Perl 6 proba-
ES71
blemente cambiar la palabra clave 'local' por 'temp' para aclarar este concepto
a los programadores.
K&l
mente manipular la URL para llegar a la pgina de inicio y empezar desde all.
Bien, para llevar esto a cabo hay que suponer que existe un enlace claro a esa
pgina (la que coincide con la palabra buscada) desde la pgina de inicio, lo cual
no es siempre cierto.
Es una buena idea implementar una barra de men que permita al usuario ir
hacia atrs y hacia delante, y que tambin permita al usuario saltar a una localizacin relacionada, o incluso a la pgina de inicio.
Colores apropiados
Asegrese de no excederse con la eleccin de colores. La utilizacin de colores
extremos hace de su sitio Web un sitio poco profesional y poco lustroso. Ha de
preocuparse por el colorido y utilizar el esquema apropiado de colores. Por ejemplo, si su sitio Web est relacionado con juguetes para nios, debera ser bastante
colorido. Si su sitio est relacionado con precios de procesadores de seales
digitales, no va a necesitar colores brillantes ni llamativos.
Iclikl
404
/sorry.html
EU
Buscadores: antes de hacer nada para promocionar su sitio Web, pregntese, "cmo encuentro informacin en la Web?" La respuesta es: a travs
de los buscadores. Est su compaa en una lista de un buscador? Si la
respuesta es no, este es el primer paso en la promocin de su sitio Web.
Casi todos los buscadores le permiten introducir su URL en la base de
datos del robot de bsqueda, de modo que este robot puede atravesar su
Web en el futuro. Debera realizar una lista de los buscadores que considere ms importantes, e introducir la URL de su sitio Web en estos buscadores.
Este proceso puede llevarle das o semanas.
MblM
Parte III
Ejecutar
aplicaciones
Web
il
Ejecutar
scripts CGI
En este captulo
1. Entendemos los conceptos bsicos del Common Gateway Interface.
2. Configuramos Apache para CGI.
3. Proporcionamos acceso a c g i - b i n a usuarios individuales.
4. Ejecutamos aplicaciones CGI utilizadas habitualmente.
5. Configuramos Apache para depurar las aplicaciones CGI.
El contenido dinmico dirige la Web. Sin contenido dinmico y personalizaba,
la Web resultara un sitio del tipo "se encuentra en tal sitio, haga tal cosa". Despus de todo, la gente no va a buscar y a experimentar el mismo contenido caduco una y otra vez. El contenido dinmico se est convirtiendo en una realidad
gracias a la ayuda de una especificacin llamada Common Gateway Interface
(CGI). La especificacin CGI le dice al servidor Web cmo interaccionar con
aplicaciones externas. Un servidor Web que ejecuta aplicaciones CGI, le permite, prcticamente a cualquiera, ejecutar a demanda una lista seleccionada de
programas en su servidor. Este captulo trata los conceptos bsicos del CGI para
E3
Qu es CGI?
Para proporcionar contenido dinmico e interactivo en la Web, muchos sitios
Web populares utilizan aplicaciones CGI. Lo cierto es que usted ha utilizado ya
algunas aplicaciones CGI en la Web. Por ejemplo, cuando rellena un formulario
Web es muy probable que ste se procese mediante un script CGI escrito en Perl
o en algn otro lenguaje.
Por supuesto, a medida que surgen ms tecnologas Web, aparecen nuevas
formas de distribuir contenido dinmico en la Web. La mayora de estas soluciones son especficas para un lenguaje determinado, o dependen de un sistema
operativo o del desarrollo de un software comercial. CGI, por su parte, es una
especificacin de una interfaz de puente (gateway), independiente del lenguaje
que se puede implementar utilizando de forma cualquier lenguaje de desarrollo de
aplicaciones conocido, incluyendo C, C++, Perl, lenguajes de script shell y Java.
Esta seccin le ofrece un resumen del funcionamiento de un programa CGI
(ver la figura 12.1). La idea principal es que el servidor Web obtiene una URL
determinada, que de forma casi mgica, al menos por ahora, le dice al servidor
que debe ejecutar una aplicacin externa llamada h e l l o w o r l d . c g i . El servidor Web lanza la aplicacin, espera a que se complete y devuelve un resultado.
Entonces, transmite el resultado de la aplicacin al cliente Web del otro lado.
Internet
GET /cgi-bin/helloworld.pl
Servidor Apache
(1)
(2)
helloworld.pi
(4)
(5)
Cabecera HTTP
(3)
Helio World
Helio World
Wb\M
Solicitudes GET
Las solicitudes GET son el mtodo ms sencillo de enviar solicitudes HTTP.
Cada vez que introduce una direccin de un sitio Web en su servidor, genera una
solicitud GET y la enva al servidor Web solicitado. Por ejemplo, si introduce
h t t p : / /www. h u n g r y m i n d s . com en su navegador Web, enva una solicitud HTTP como la siguiente:
GET /
ETTl
nternet
f
I Establecimiento de variables
1
de entorno CGI
GET
/cgi-bin/search.cgi?book=cgi&author=kabir
Se ha completado
el programa CGI?
|
1
Devuelve la cabecera
y el contenido CGI
1
Figura 12.2. Proceso CGI en un servidor
A continuacin vamos a ver lo que tiene que hacer un programa CGI para
recuperar los datos introducidos para utilizarlos para propsitos internos.
Tal y como muestra la figura 12.3, un programa CGI.
1. Lee la variable de entorno REQUESTjyiETHOD.
2. Determina si se utiliza o no el mtodo GET utilizando la variable almacenada en la variable REQUEST_METHOD.
3. Si se utiliza el mtodo GET, recupera el dato almacenado en la variable de
entorno QUERY STRING, .
4. Codifica el dato.
5. Procesa el dato codificado.
6. Escribe el tipo de contenido del resultado en su herramienta de salida
estndar (STDOUT), tras completar el proceso.
7. Escribe el dato resultante en el STDOUT y sale.
El servidor Web lee el STDOUT de la aplicacin y lo analiza para localizar el
tipo de contenido de la salida. Entonces transmite las cabeceras HTTP y el
Content-Type apropiados antes de transmitir la salida al cliente. El programa
CGI se abandona y se completa la transaccin CGI.
'
Inicio
1
Se
Utiliza el mtodo-.
Dato codificado
Proceso
T
Tipo de contenido del resultado
a STDOUT
1
/
!
;
Final
V
y
Figura 12. 3. Proceso CGI en el servidor
Elikl
'lf CMf A: Si tenemos un programa COI para proporcionar toda la informacin sobre las cabeceras HTTPy etipo de contenido, hay que ponerle el
prefijo nph {para cabeceras las cabeceras no analizadas) a su nombre. El
servidor no analiza la salida nph de un programa COI y la transmite directamente al cliente; la mayora de los programas CGI dejan que el servidor
escrbala cabecera HTTP y, por lo tanto, se trata de programas de cabeceras analizadas.
La utilizacin del mtodo GET para pasar datos introducidos en un programa
CGI, est limitado en muchos sentidos, incluidos los que se exponen a continuacin:
El tamao total de datos que se pueden transmitir como parte de una URL
est limitado por el lmite de la longitud de la URL del cliente. Muchos
navegadores Web tienen lmites de hardware para la longitud de una URL,
y por lo tanto, el nmero total de datos que se puede enviar mediante una
URL codificada es muy pequeo. Sin embargo, en ocasiones puede ser
una gran idea pasar datos a los programas CGI mediante una URL. Por
ejemplo, si tiene un formulario HTML que utiliza el mtodo GET para enviar datos a un programa CGI, esta URL se puede introducir en la carpeta
de favoritos para utilizarla ms tarde, sin necesidad de volver a introducir
los datos de entrada. Esto puede resultar muy cmodo para las aplicaciones de consulta a bases de datos.
La longitud del valor de una sola variable de entorno (QUERY_STRING)
est limitada. Muchos, sino todos, sistemas operativos tienen lmites en el
nmero de bytes que puede contener el valor de una variable de entorno.
Esto limita el nmero total de bytes que se pueden almacenar como datos
de entrada.
Estos lmites no influyen en los programas CGI que necesitan pocas entradas
de usuario o que no las necesitan. Para aquellos programas que necesitan una
gran cantidad de datos introducidos por el usuario, sin embargo, es mejor utilizar
otro mtodo (el mtodo POST) para las solicitudes HTTP. El mtodo POST se
discute en la siguiente seccin.
Solicitudes POST
El mtodo POST se utiliza para pasar datos a programas CGI. Suele encontrar este mtodo en los formularios HTML que rellena en las pginas Web. Como
ejemplo, tenemos el listado 12.1.
Observe que hay una seccin <FORM> </FORM> en el listado. Un formulario HTML tiene normalmente una etiqueta de inicio <FORM> que define la accin ACTION y el mtodo METHOD para el formulario. En el ejemplo anterior,
cu
su
el sistema decimal, pero tiene un conjunto extra de dgitos. Estos digitos extra son
A (=10), B (=1 1), C (=12), D (=14) y F (=15). Por ejemplo, el 20 en el sistema
hexadecimal es igual al 32 en el sistema decimal. El sistema de conversin es:
20 = 2 x
(16"1 )
+ 0 x
(16"0)
Estos dos dgitos consisten en el valor que puede integrar en la tabla ASCII
(para el ingls) para obtener el carcter. Por ejemplo, %20 (hexadecimal) es 32
(decimal) y se corresponde al carcter espacio en la tabla ASCII.
EO
SERVER SOFTWARE
SERVER_SOFTWARE est asignado por Apache, y el valor se encuentra habitualmente de la siguiente forma:
Apache/Versin
(OS I n f o )
En este caso, Apache es el nombre del software del servidor que est ejecutando el programa CGI, y versin es el nmero de la versin de Apache. Un valor
de ejemplo sera:
Apache/2.0.14 (Unix)
Esto resulta til cuando un programa CGI se utiliza para sacar partido de una
caracterstica nueva que se encuentra en la ltima versin de Apache, y sigue
siendo capaz de rendir en versiones antiguas.
GATEWAY_INTERFACE le dice al programa CGI qu versin de la especificacin CGI soporta actualmente el servidor. Un valor de ejemplo sera:
CGI/1.1
SERVER_ADMIN
Si utiliza la directiva S e r v e r A d m i n en el archivo h t t p d . c o n f para determinar la direccin de correo electrnico del administrador del sistema, esta
variable ser asignada para reflejarlo. Adems, observe que si tiene una directiva S e r v e r A d m i n en un contenedor de configuracin de un host virtual, la variable SERVER_ADMIN se asigna a esa direccin en el caso de que el programa
CGI al que se est accediendo sea parte del host virtual.
DOCUMENT_ROOT
Esta variable est asignada al valor de la directiva D o c u m e n t R o o t del sitio
Web al que se est accediendo.
SERVER_NAME
Esta variable le dice al programa CGI a qu host se est accediendo. El valor
es una direccin IP o el nombre completo del host:
SERVER_NAME = 192.168.1.100
SERVER_NAME = www.domain.com
HTTP_HOST
Ver la variable SERVER_NAME.
HTTP_ACCEPT
Esta variable est asignada a la lista de tipos MIME que el cliente puede
aceptar, incluidos los siguientes:
HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
image/png, */*
Aqu, el cliente dice que es capaz de manejar imgenes GIF, JPEG, PNG, y
otro tipo de imgenes. Esto le permite al programa CGI determinar el tipo de
salida ideal para el cliente.
Por ejemplo, un programa CGI podra producir GIF o JPEG y recibir una
HTTP_ACCEPT:
HTTP^ACCEPT = i m a g e / g i f ,
*/*
HTTP_ACCEPT_CHARSET
Esta variable determina el conjunto de caracteres aceptable para el cliente,
por ejemplo:
HTTP_ACCEPT_CHARSET = i s o - 8 8 5 9 - 1 , * , u t f - 8
HTTP_ACCEPT_ENCODING
Esta variable determina los esquemas de codificacin aceptables para el cliente,
por ejemplo:
HTTP_ACCEPT_ENCOMDING = g z i p
EEEl
HTTP_USER_AGENT
Esta variable determina qu software del cliente y qu sistema operativo est
ejecutando el sistema, por ejemplo:
HTTP_USER_AGENT = Mozilla/4 .04 [en]
(WinNT; I)
Observe que Mozilla es una palabra clave utilizada por Netscape para la base
de cdigo de Navigator. Aunque nicamente los navegadores Netscape utilizan
la palabra Mozilla, muchos otros fabricantes han comenzado a utilizar Mozilla
como parte de la cabecera HTTP. Por ejemplo, Microsoft Internet Explorer (IE)
5.5 produce el siguiente dato HTTP_USER_AGENT cuando se ejecuta en la
misma mquina:
HTTP USER_AGENT = Mozilla/5.5 (compatible; MSIE 5.5; Windows NT)
HTTP_REFERER
Esta variable est asignada al Uniform Resource Identifier (UR1) que dirige
las solicitudes al programa CGI al que se ha llamado. Utilizando esta variable,
puede decidir si la solicitud proviene del enlace de una de sus pginas Web o de
HTTP_CONNECTION
La variable HTTP CONNECTION est asignada al tipo de conexin que utiliza el cliente y el servidor. Por ejemplo:
HTTP_CONNECT:ON = K e e p - A l i v e
Esto indica que el cliente es capaz de manejar conexiones utilizando KeepAlive y que las est utilizando.
SERVER_PORT
El valor de la variable SERVER_PORT le dice al programa CGI qu puerto
del servidor se est utilizando para acceder al programa. Un ejemplo sera:
SERVER_PORT = 80
Si un programa CGI crea unas URL que se dirigen al servidor, sera til incluir
la direccin del puerto, que se encuentra como el valor de esta variable, en la
URL.
REMOTE_HOST
La variable REMOTE_HOST informa a un programa CGI sobre la direccin
IP o el nombre IP del cliente, del siguiente modo:
REMOTE_HOST = dsl-666.isp24by7.net
REMOTE_PORT
El cliente utiliza este nmero de puerto en el lado del cliente de la conexin
socket:
REMOTE_PORT
=1163
REMOTE_ADDR
La variable REMOTE_ADDR es la direccin IP del sistema del cliente:
REMOTE ADDR = 1 9 2 . 1 6 8 . 1 . 1 0 0
REMOTE_USER
La variable REMOTE_USER ser asignada nicamente cuando el acceso al
programa CGI requiera autentificacin HTTP b a s i c . El nombre de usuario utilizado en esta autentificacin, se almacena en esta variable para el programa
CGI. El programa CGI, sin embargo, no tendr modo de identificar la contrasea
utilizada para acceder a l. Si esta variable est asignada al nombre de usuario, el
programa CGI puede suponer con seguridad que el usuario suministr la contrasea adecuada para el acceso.
SERVER_PROTOCOL
SERVER_PROTOCOL es el protocolo y el nmero de versin que utiliza el
cliente para enviar la solicitud para el programa CGI:
SERVER_PROTOCOL = H T T P / 1 . 1
REQUEST_METHOD
La variable REQUEST_METHOD asigna el mtodo de solicitudes HTTP utilizado por el cliente para solicitar un programa CGI. Los valores habituales son:
GET, POST y HEAD.
REQUEST__METHOD=GET
REQUESTJJRI
La variable REQUEST_URI determina el URI de la solicitud.
REQUEST_URI = /cgi-bin/printenv2
REMOTEJDENT
REMOTE_IDENT ser asignada slo si se asigna la directiva I d e n t i t y C h e c k . Esta variable almacena la informacin de identificacin devuelta por
el i d e n t d (demonio de identificacin) remoto. Como muchos sistemas no ejecutan este tipo de procesos demonio, REMOTE_IDENT no debera considerarse
seguro en la identificacin de usuarios. Recomiendo utilizar esta variable en un
entorno de intranet o de extranet en el que usted o su organizacin est ejecutando un servidor i d e n t d .
AUTH TYPE
Si un programa CGI se almacena en una seccin del sitio Web en la que se
requiere la autentifcacin para acceder, esta variable se asigna para especificar
el mtodo de autentifcacin utilizado.
CONTENT_TYPE
Esta variable especifica el tipo MIME de cualquier dato adjunto a la cabecera
de la solicitud. Por ejemplo:
CONTENT_TYPE = appl ication/x-www-form-urlencoded
CONTENT_LENGTH
Cuando se utiliza el mtodo POST, Apache almacena los datos introducidos
(adjuntos a la solicitud) en el STDIN del programa CGI. El servidor no inserta un
marcador End-of-File (EOF) en el STDIN. Sin embargo, a esta variable se le
asigna el nmero de bytes. Por ejemplo, si:
CONTENT_LENGTH = 21
SCRIPT_NAME
SCRIPT_NAME es el URI del programa CGI:
SCRIPT_NAME = /cgi-bin/search.cgi
SCRIPT_FILENAME
SCRIPT_FILENAME es el nombre completo de la ruta del programa CGI:
SCRIPT_FILENAME = /www/kabir/public/cgi-bin/search.cgi
QUERY_STRING
Si un cliente Web, un navegador Web por ejemplo, utiliza el mtodo GET y
proporciona los datos introducidos tras una interrogacin (?), el dato se almacena
como el valor de esta variable. Por ejemplo, una solicitud para el siguiente programa CGI:
http://apache.domain.com/cgi-bin/search.cgi?keyl=valuel&key2=
value2
mw
NOTA: PATH_It*?QBO tiene nada que forme parte de la cadena de consulta. En otras palabras, si el URI incluye una cadena de consulta tras una
?, esta parte del dato se almacenar en la variable QDRY'STftlNGl l*or
ejemplo:
http://apache.dbaiairi.com/egi-bin/search.cgi/CA/
958 25 Tb&k^apaches auhor= kabi r
har que Apache asigne las siguientes variables:
PATH_INFO - /CA/95825
QUERXtSTRING=' book=apacheSauthor=kabir
PATH_TRANSLATED
Esta es la ruta absoluta del archivo solicitado. Por ejemplo, cuando un cliente
Web, como un navegador Web, solicita ht tp : / / s e r v e r / c g i - b i n /
s c r i p t . c g i , la ruta actual del script puede ser p a t h _ t o _ c g i _ a l i a s /
s c r i p t . cgi.
WVIM
persos sus programas CGI por el espacio Web podra hacer que su sitio Web
fuese imposible de manejar, y adems puede crear agujeros de seguridad difciles
de detectar.
/alias/ "/fully/qualified/path/to/cgi/scripts/dir/"
Por ejemplo:
ScriptAlias /cgi-bin/ "/www/mycompany/public/cgi-bin/"
Si est asignando soporte CGI para un sitio virtual, aada una lnea
S c r i p t A l i a s en el contenedor < V i r t u a l H o s t . . . > que defina el
host virtual. Por ejemplo:
NameVirtualHost 192.168.1.100
<VirtualHost 192.168.1.100>
ServerName blackhole.domain.com
DocumentRoot "/www/blackhole/public/htdocs"
ScriptAlias /apps/ "/www/blackhole/public/cgi-bin/"
</VirtualHost>
Aqu el alias / a p p s / se utiliza para crear un alias para el directorio del programa CGI. Si hay un programa CGI llamado f e e d b a c k . c g i en el directorio
/ w w w / b l a c k h o l e / p u b l i c / c g i - b i n , slo se puede acceder a l mediante la siguiente URL:
http://blackhole.domain.com/apps/feedback.cgi
Una vez que asigna la directiva S c r i p t A l i a s , asegrese de que el permiso del directorio permite a Apache leer y ejecutar los archivos que encuentre en
el directorio.
El directorio asignado por S c r i p t A l i a s debera tener asignaciones de permisos estrictas. nicamente el desarrollador del programa CGI o el administrador del sistema deberan tener permiso total (lectura, escritura y ejecucin ) para
el directorio. Puede definir varios alias para los directorios de los programas CGI
de modo que el directorio S c r i p t A l i a s especificado no sea navegable (por
defecto) por razones de seguridad.
Cuando se realiza una solicitud a Apache, ste intenta ejecutar cualquier archivo ejecutable (con permiso de archivo) del directorio S c r i p t A l i a s e d . Por
ejemplo:
http://blackhole.domain.com/apps/foo.cgi
http://blackhole.domain.com/apps/foo.pl
http://blackhole.domain.com/apps/foo.bak
http://blackhole.domain.com/apps/foo.dat
Todas estas solicitudes URL avisarn a Apache para que intente ejecutar los
distintos archivos f oo.
2. Tiene que crear un alias para el directorio del programa CGI. No hay
modo de acceder al directorio del programa CGI sin un alias (o un enlace
simblico), ya que reside fuera del rbol de documentos. Puede definir un
alias utilizando la directiva A l i a s , que tiene la sintaxis siguiente:
Alias /alias/ "/path/to/cgi/dir/outside/doc/root/"
3. Instruya a Apache para que ejecute programas CGI desde este directorio,
definiendo un contenedor < D i r e c t o r y > para este directorio especial.
La definicin del contenedor del directorio que es necesaria para hacer
que todo esto ocurra (es decir, para convertir el directorio en un directorio
para el programa CGI) es:
<Directory " / p a t h / t o / c g i / d i r / o u t s i d e / d o c / r o o t " >
O p t i o n s ExecCGI - I n d e x e s
AddHandler c g i - s c r i p t e x t e n s i o n - l i s t
</Directory>
En este ejemplo, est permitiendo . c g i y . pl como extensiones de programas CGI y, por lo tanto, cuando se realizan solicitudes como estas:
http://www.domain.com/cgi-bin/anything.cgi
http://www.domain.com/cgi-bin/anything.pl
Apache intentar ejecutar estos archivos como programas CGI. Por supuesto, si estos archivos no son realmente ejecutables o no existen, Apache desplegar mensajes de registro de error.
im
Las asignaciones de permisos para el directorio del programa CGI, mencionadas antes, siguen aplicndose a esta configuracin. La misma configuracin se
aplica tambin a los sitios de host virtuales. Por ejemplo, en el ejemplo siguiente,
el alias / c g i - b i n / para www . c l i e n t O 1 . com se asigna para ejecutar programas CGI en el directorio / w w w / c l i e n t O l / p u b l i c / c g i - b i n :
<VirtualHost 192.168.2.100>
ServerName www.client01.com
DocumentRoot "/www/clientOl/public/htdocs"
CustomLog logs/www.clientOl.com.access.log
ErrorLog logs/www.clientOl.com.errors.log
Alias /cgi-bin/ "/www/clientO1/public/cgi-bin/"
<Directory "/www/clientOl/public/cgi-bin">
Options ExecCGI -Indexes
AddHandler cgi-script .cgi .pl
</Di rectory>
</VirtualHost>
Aqu, el alias / c g i - b i n / para www . c l i e n t O l . c o m se asigna para ejecutar programas CGI en el directorio / w w w / c l i e n t O l / p u b l i c / c g i - b i n .
Estos sitios a menudo obtienen solicitudes para acceso cgi-bin mediante sus
clientes Web (navegadores). El trmino acceso cgi-bin es un trmino general
que se utiliza para indicar facilidad CGI en un servidor Web. Tradicionalmente, el
directorio del programa CGI tiene el alias / c g i - b i n / , y por eso se cre este
trmino. El otro trmino comn que se est haciendo muy popular es pgina
fime, que se refiere a la pgina indexada en el mximo nivel de un directorio
Web de un usuario. Las siguientes secciones discuten dos modos de proporcionar acceso cgi-bin a usuarios en un servidor Web Apache. Slo tiene que
implementar cualquiera de estos mtodos.
ServerName www.domain.com
UserDir public_html
Aqu ( [ a - z ] +) integrar una o ms letras minsculas seguidas de una seal (~) a $1. En otras palabras, esta expresin regular. Por eso, $1 est asignada
j oe en el ejemplo anterior. Observe que A asegura que la directiva slo se aplica
a las URL que comiencen con ~, tal y como muestra el ejemplo anterior.
La siguiente expresin regular en la directiva es (.*), la cual integra todo lo
que sigue el / c g i - b i n / con $2. Por esos, $2 est asignada a s e a r c h .
c g i ? a u t h o r = k a b i r . Ahora Apache puede crear la ruta fsica del directorio del programa CGI, utilizando:
/home/$l/public_html/cgi-bin/$2
~ ( [ a - z ] + ) / c g i - b i n / (.*)
/home/$l/cgi-bin/$2
/www/$l/cgi-bin/$2
h o m e / u s e r n a m e ) , debera, como administrador del sistema, ser capaz de ejercer un mayor control sobre l.
TRUCO: Antes de que empiece a hacer las cosas por su cuenta, dirjase
al sitio de Comprehensive Perl Archive Network (CPAN) to h t t p : / /
cpan. per 1. com para saber cules son los mdulos Perl que puede utilizar para resolver su problema actual o reducir sus esfuerzos de desarrollo
reutilizando mdulos CPAN. En esta seccin, voy a utilizar mucho mdulos CPAN para construir scripts CGI. Cada vez que vea mt mdulo es
cualquiera de los scripts que se discuten aqu, puede aftadr l mdulo en so
sistema utilizando el mdulo CPAN que se distribuye co elest&dsr de
Perl.
NOTA: Los usuarios de Apache para Windows deberan consultar la. do*
cumentacin de Perl para saber cmo tienen que utilizar los mdulos CPAN,
ya que es distinta que la aproximacin estndar discutida aqu. Ver, tambin, la seccin especfica para Windows de este libro.
Por ejemplo, imagine que ve un mdulo llamado HTML : : Tmplate en una
lista de scripts y que le gustara instalar este mdulo para poder ejecutar el script
que utiliza. Para instalar el mdulo CPAN, ejecute p e r 1 -MCPAN -e s h e l l
desde el prompt de comandos como raz.
NOTA: Si est ejecutando el comando shell p e r l -MCPAN -e por
primera vez, le pedir que configure el mdulo CPAN. pm actual, el cual se
utiliza para instalar otros mdulos CPAN. Simplemente sa las instrucciones para configurar el inMulo CPAN.pro y luego proceda a ejecutar el
comando.
',>..:..
'
Una vez que se encuentra en el prompt de CPAN, ejecute el comando
i n s t a l l HTML : : Tmplate para instalar el mdulo. El mdulo CPAN instalar este mdulo para usted. Si reclama dependencia, debera instalar algn otro
mdulo antes de poder instalar un mdulo que dependa de otros mdulos CPAN.
Una vez que ha llevado esto a cabo, ejecute q u i t desde el prompt CPAN para
volver al shell.
TRUCO: Si no quiere ejecutar el shell CPAN interactivo utilizando el shell
p e r l -MCPAN -eparamslalarMra^^
-e 'CPAN: :Shell->install(i^QfeierB) / . Por ejemplo, p*rl
-MCPAN -e s h e l l
>CF*Ji : S h l l * > i A s t a l l . K T M L : :
Tmplate)' in^arel mduloH^Ml^
cutar este comando desde el script shell.
.">;A ;.-
EEE1
#
# Obtener datos del usuario
#
my $query = new CGI;
my $name = $query->param('ame');
#
# Procesa datos
#
$name
= lc($name);
my @strArray = ();
foreach my $str (split(/ /,$name)) {
push(@strArray, ucfirst ($str));
}
my $formattedName = join 1 ', @strArray);
#
# Muestra resultados
#
print $query->header;
print $query->start_html( 'Greetings');
tMil
Ahora, vamos a analizar este script con ms detalle. La primera lnea es una
lnea especial:
#!/usr/bin/perl
Esta lnea le dice al sistema que ejecute Perl cada vez que se ejecute este
script. Si tiene instalado Perl en un directorio no estndar, entonces debe modificar esta lnea. Por ejemplo, si instal Perl en / u s r / l o c a l / b i n / p e r l , entonces debe cambiar esta lnea para reflejarlo. Todas las lneas (menos la primera)
que empiezan con un signo '#' son comentarios y Perl las ignora.
El siguiente segmento de cdigo es:
use s t r i c t ;
u s e CGI;
BMI
Godsave
GODSAVE
godsave
GODSAVE
godSave
GoDsAvE
Como puede ver, el usuario puede introducir una de estas u otras combinaciones de letras para representar su nombre. Sin embargo, queremos mostrar "Carol
Godsave" ya que ese es el formato correcto para su nombre. Nuestro bloque de
cdigo de procesamiento utiliza el siguiente algoritmo:
1. Transforma el nombre en letras minsculas. Esto convierte lo que Carol
introduzca en ' c a r o l g o d s a v e ' .
2. Separa las palabras con un carcter espacio. Esto nos produce ' c a r o l '
y 'godsave' .
3. Convierte en letra mayscula nicamente la primera letra de cada palabra. Esto produce ' C a r o l ' y ' G o d s a v e ' .
4. Une las partes separadas por un espacio. Esto devuelve ' C a r o l
G o d s a v e ' , que es exactamente lo que queremos.
En este segmento de cdigo utilizamos un array llamado @ s t r A r r a y , que iniciamos con una lista vaca. Entonces se utiliza un loop f o r e a c h , que podemos encon-
trar en Perl, para recorrer cada parte del nombre que se ha separado utilizando la
funcin s p l i t () . Llamamos a la funcin s p l i t () con dos parmetros:
s e p a r a t o r , que, en este caso, es un espacio escrito en formato de expresin regular / /, y la cadena que vamos a separar, que en este caso es $name. La funcin
s p l i t () devuelve las partes separadas en un array. De modo que, efectivamente,
en el caso de Carol, el loop f o r e a c h es del siguiente modo:
foreach my $str ('carol' 'godsave') {
push(@strArray, ucfirst($str) ) ;
}
El loop recorre cada parte y cambia a maysculas nicamente el primer carcter de cada palabra utilizando una llamada a la funcin b u i l t - i n
u c f i r s t () . Cuando u c f i r s t () recibe un string, slo convierte la primera
letra a mayscula y devuelve la cadena modificada. Por ejemplo,
u c f i r s t ( ' c a r o l ' ) devuelve
'Carol';
de
igual
modo,
u c f i r s t ( ' g o d s a v e ' ) devuelve ' G o d s a v e ' . Cada parte modificada del
nombre, se almacena en un array llamado @ s t r A r r a y . Por ejemplo, despus
de procesar el nombre de Carol, O s t r A r r a y es a r r a y = ( ' C a r o l ' ,
' G o d s a v e ' ) . Para terminar, unimos las partes del nombre en una nueva variable llamada $f o r m a t t e d N a m e para formar el nombre completo. La funcin
j o i n () se utiliza para unir los elementos de @ s t r A r r a y con un espacio en
blanco en la llamada j o i n ( ' ', @ s t r A r r a y ) . Ahora tenemos formado el
nombre en la variable $ f o r m a t t e d N a m e y simplemente tenemos que mostrarlo. El segmento de cdigo para mostrarlo es el siguiente:
print
print
print
print
print
$query->header;
$query->start_html('Greetings');
$query->p ( 'Helio ' . $formattedName
$query->p ( 'Thanks for coming to our Web s i t e . ' ) ;
$query->end_html;
La primera lnea de este segmento asigna la cabecera de contenido. Se necesita una cabecera Content-Type. El cliente utiliza esta cabecera para determinar
cmo se despliega el contenido enviado por el servidor. Como un script CGI
genera el contenido, debe decirle al servidor qu tipo de contenido est pasando
al servidor para envirselo al cliente. El mdulo CGI proporciona un mtodo llamado h e a d e r ( ) , que crea la cabecera Content-Type apropiada. Por ejemplo,
$ q u e r y - > h e a d e r ; devuelve C o n t e n t - T y p e :
text/html;
c h a r s e t = I S O - 8 8 5 9 - l . Cuando llamamos a h e a d e r () sin un tipo especfico de parmetro, el Content-Type por defecto ser t e x t / h t m l . Sin embargo, si su script tiene que sacar un tipo distinto, por ejemplo t e x t / p l a i n , puede
utilizar el parmetro h e a d e r ( - t y p e => ' t e x t / p l a i n ' ) . Por ejemplo:
# ! /usr/bin/perl
u s e CGI;
BBcl
Este script muestra un archivo GIF llamado / t m p / w e a t h e r . g i f utilizando la cabecera C o n t e n t - T y p e : i m a g e / g i f . Ahora, volvemos al script
g r e e t i n g s . p l . Una vez que hemos desplegado la cabecera de contenido por
defecto, el script utiliza mtodos HTML del mdulo CGI, como son
s t a r t _ h t m l () , p () y e n d _ h t m l () , para crear el contenido HTML. Por
ejemplo, imagine que Carol introduce la siguiente URL:
http://server/cgi-bin/greetings.pl?name=carol godsave
traduce a:
<p>Hello Carol Godsave,</p>
<title>Greetings</title>
</head>
<body>
<p>Hello Carol Godsave,</p>
<p>Thanks for coming to our Web site.</p>
</body></html>
Observe el ttulo ' G r e e t i n g s ' que se pas al mtodo. Los dos mtodos
p () producen lo siguiente:
<p>Hello Carol Godsave,</p>
<p>Thanks for coming to our Web site.</p>
ESEl
Soporte de varios formularios Web: un solo script funcionar para varios formularios Web de una pgina. Un formulario Web de una sola pgina hace todas sus preguntas en una sola pgina. Hay veces en las que le
pedirn que construya un formulario Web de varias pginas. Estas aplicaciones de procesamiento de formularios normalmente utilizan lgica de
negocio personalizada para desplegar varios formularios y se encuentran
fuera del alcance de este libro. Mi recomendacin personal, basada en
aos de desarrollo Web, es evitar formularios de varias pginas porque la
gente a menudo se molesta cuando les piden que contesten a una serie
muy larga de preguntas. Adems, cuando diseamos un formulario Web
de una sola pgina, no debemos realizar demasiadas preguntas. Mantener
la coleccin de datos en mnimos es una buena prctica. La experiencia
me dice que las esperanzas e ilusiones se terminan con los formularios de
gran tamao o de varias pginas, y a menudo deciden abandonar el posible
negocio con el sitio.
Configuracin centralizada para todos los formularios Web: el script
utiliza un archivo de configuracin que soporta varios formularios Web.
Cada configuracin de un formulario Web puede almacenarse por separado en este archivo de configuracin estndar, lo que significa que puede
centralizar la informacin sobre la configuracin de formularios, lo cual es
muy ventajoso para un administrador de sistemas muy ocupado.
Archivos con los valores separados por comas (Comma Separated
Valu, CSV) para almacenar los datos: el script le permite guardar
datos en archivos CSV. Cada formulario puede tener su propio archivo
CSV. Adems puede especificar el orden de los campos y qu archivos
quiere almacenar.
<p>
<form action="/cgi-bin/formwizard.pl" method="POST">
<table border=0
cellpaddi ng=3
cellspacing=0
bgcolor="#000000">
<tr>
<td>
<table border=0
cellpadding=5
cellspacing=5
bgcolor="#abcdef">
<tr>
<td> ame </td>
<td> <input name="name" type=text size=30 maxsize=50> </td>
</tr>
<tr>
<td> Email </td>
<td> <input name="email" type=text size=30 maxsize=50> </td>
</tr>
<tr>
<td> Zipcode</td>
<td> <input name="zipcode" type=text size=30 maxsize=50> </td>
</tr>
<tr>
<td> Can we send you junk mail?</td>
<td>
cin-put type=radio name="opt-in" valu "yes">Yes, Please!
<input type=radio name="opt-in" valu "no">No, Never!
</td>
</tr>
<tr>
<td align=center> <input type=submit value="Register Me"</td>
<td align=center> <input type=reset> </td>
</tr>
</table>
</td>
</tr>
</table>
</form>
<P>
</html>
|mohammed kabir
&na
|mrkabir@hotmail com
Zipcode
[95833
Canwesendyoujunkmair?
|
RggisterMe
r Yes, Pfeasel
''No.Never!
Reset |
Este formulario Web tiene cuatro campos de datos: ame (nombre), email
(direccin de correo electrnico), zipcode (cdigo postal) y una casilla de conformidad. Este es el tpico formulario de registro de usuarios excepto en que la
mayora de los sitios no tienen una casilla de conformidad como la que aparece
en este formulario. Cuando un usuario rellena este formulario, el dato se almacena en un archivo, y el usuario recibe un mensaje de agradecimiento o se le dirige
a otra pgina. Por ejemplo, cuando se rellena el formulario anterior, puede mostrar un mensaje de agradecimiento como el que se muestra en la figura 12.6.
User Registration Complete
Mohammed Kbir,
Thank you for takmg the time to rcgister. We wffl send you mformation
mamrkabir@hotmalcoia
Retum I
1
Carga la configuracin del
formulario Web
1
Crea un objeto CGI
1
Encuentra
Ja configuracin del
^formulario?
Datos no vlidos
Valida tos datos del usuario
1
Datos almacenados
1
Muestra una
pgina de
agradecimiento"^
Disco
EE
El script formwizard.pl
El script f ormwi z a r d . pl implementa este diagrama de flujo. En el archivo
de configuracin f o r m w i z a r d . i n i , el campo r e g i s t e r . h t m l tiene las
siguientes restricciones:
#
# Configuracin del formulario Web para *** register.html ***
#
#
[register.html]
tmplate dir = /www/asb2/chl2/forms/register
#
#
# Asigna el nombre de la plantilla thank you
#
thankyou_template = thanks.html
#
#
#
#
#
#
#
thankyou_redirect_url = /asb2/chl2/forms/feedback.html
#
#
#
#
#
#
#
#
#
form__field_info=<<FORM_FIELDS
ame,text,required,max_chars=50,min_chars=3,case=ucfirst,
exclude_regex=[~a-z .],pattern=none
email,text,required,max=100,min=6,case=lowerall,
exclude_regex=[Aa-z0-9-_.\@],pattern=email
zipcode,number,optional,pattern=us_zipcode,exclude_regex=[A0-9-]
opt-in,text,required,case=lower,pattern=none,valid_data=yes|no
FORM_FIELDS
#
#
#
#
#
#
#
#
# Especifica el
data_directory=/tmp
data filename=registration.csv
data_field_separator=,
data_field_order=email,ame, zipcode, opt-in
Anlisis de formwizard.ini
A continuacin, vamos a analizar este script ms detenidamente, de modo que
pueda configurarlo para sus necesidades especficas.
La primera lnea es una lnea especial:
# ! /usr/bin/perl
Esta lnea le dice al sistema que ejecute Perl cada vez que el sistema ejecute
este script. Si tiene instalado Perl en un directorio no estndar, debe cambiarlo
adecuadamente. Por ejemplo, si tiene instalado Perl en / u s r / l o c a l / b i n /
p e r l , entonces cambie esta lnea para reflejarlo.
El siguiente segmento de cdigo es:
use
use
use
use
use
use
strict;
Config::IniFiles;
File::Basename;
HTML::Tmplate;
Fcntl qw(:DEFAULT :flock);
CGI;
Esto carga todos los estndares y todos los mdulos CPAN necesarios. Los
mdulos CPAN que utiliza este script son C o n f i g : : I n i F i l e s ,
HTML : : T m p l a t e y CGI. El mdulo CGI se carga como un mdulo Perl, pero
debe instalar los otros dos utilizando el mdulo CPAN. A continuacin tenemos
dos comandos q u i c k que instalarn estos mdulos desde la raz shell:
perl -MCPAN -e 'CPAN::Shell->install ('Config::IniFiles')
perl -MCPAN -e 'CPAN::Shell->install('HTML::Tmplate')
= new Config::IniFiles
-file => "/www/myscripts/conf/formwizard.ini";
C3
La lnea t e m p l a t e _ d i r del archivo de configuracin est asignada al directorio en el que se mantienen las plantillas HTML para este formulario Web
( r e g i s t e r . h t m l ) . En la versin actual del script, la nica plantilla que utilizamos es la plantilla HTML para la pgina thank you, de modo que se mantiene en
este directorio.
La configuracin f orm_f i e l d _ i n f o es una versin extendida del concepto del par c l a v e = v a l o r . Aqu una sola clave, f orm_f i e l d _ i n f o, tiene varios valores. Los valores son lneas entre las cadenas FORM_FIELDS.
Cada lnea de valores tiene varios campos. Por ejemplo:
Para controlar las entradas del usuario, el script utiliza un conjunto de parmetros
para cada campo de entrada. Los parmetros se muestran en la tabla 12.1. Cada
parmetro se separa con una coma y se almacena en el archivo de configuracin
del siguiente modo:
form_field_info=<<FORM_FIELDS
fieldnamel,parameterl,parameter2,parameter3,...,parameterN
fieldname2,parameterl,parameter2,parameter3,...,parameterN
fieldname3,parameterl,prameter2,parameter3,...,parameterN
fieldnameN,parameterl,parameter2,parameter3,...,parameterN
FORM_FIELDS
Tabla 1 2 . 1 . Parmetros de control de las entradas de usuario en los archivos de
configuracin
Parmetro
Ejemplo
Explicacin
Text,
ame,text
Number
zipcode,number
required,
ame,required
Optional
zipcode,optional
Max chars=n
name.max chars=50
Min chars=n,
name,min_chars=3,
Parmetro
case=ucfirst | upper
| Icfirst
lower
Ejemplo
Explicacin
name,case=ucfirst
exclude_regex=[character
set]
name,exclude_regex=
[Aa-z .]
El valor del campo ame
debe estar compuesto por
caracteres de la a a la z o
por el punto. No estn permitidos otros caracteres.
pattern=none
email,pattern=email
El patrn de e-mail especifica que el valor del campo
nombrado (email) est
comprobado para una direccin de correo electrnica vlida.
valid_data=value1|value2
opt-in, valid_data=yes|no
Aqu el campo opt-in puede tener nicamente el valor de 'yes' o 'no'.
Una vez que cargada la informacin de los campos del formulario en el array
@f i e l d l n f o, el siguiente segmento de cdigo comprueba si el archivo de configuracin tiene un directorio de plantillas (es decir, valores para la variable
$ t e m p l a t e D i r ) , o si el array d f i e l d l n f o est.vaco.
name=mohammed k a b i r , z i p c o d e = 9 5 8 3 3 , email=MRKABIR@
h o t m a i l . com, y o p t - i n = y e s , y si el t h a n k y o u _ r e d i r e c t _ u r l
est asignado a h t t p : / / w w w . d o m a i n . c o m / f r i e n d s . p l , entonces la subrutina r e d i r e c t _ d a t a () redirige el navegador Web a:
http : //www . doma i n . cora/
friends.pl?name=Mohammed%2 0Kabir&zipcode=95833&email=
mrkabirShotmail.com&opt-in=yes
Esto le permite al sitio remoto recibir el dato del usuario mediante el mtodo HTTP GET. Observe que si simplemente quiere redirigir al usuario a
otra pgina y no enviar el dato mediante GET, tiene que asignar el valor de
no al parmetro s e n d d a t a o n _ r e d i r e c t en el archivo de configuracin .
Si no est asignado el t h a n k y o u _ r e d i r e c t _ u r l , el script carga el
nombre de la plantilla de agradecimiento desde el archivo de configuracin utilizando el parmetro de configuracin t h a n k y o u _ t e m p l a t e .
Se supone que esta plantilla se encuentra en el directorio de plantillas asig-
nadas por el parmetro de configuracin t e m p l a t e _ d i r . El script utiliza la subrutina s h o w _ t h a n k s () para mostrar la pgina de agradecimiento. La subrutina s h o w _ t h a n k s () personaliza el agradecimiento
reemplazando etiquetas especiales con los valores que introduce el usuario en los campos. Esto se realiza creando una instancia del objeto HTML: :
T m p l a t e , que se inicializa con la pgina de la plantilla asignada por el
parmetro t h a n k y o u _ t e m p l a t e . El objeto HTML: : T m p l a t e llamado $ t e m p l a t e utiliza su mtodo its $ t e m p l a t e - > p a r a m () para
reemplazar etiquetas especiales con un hash creado por el mtodo
$query->Vars ().
Para terminar, se muestra el resultado del script y este finaliza.
La plantilla de agradecimiento utilizada en este ejemplo se muestra en el listado 12.5.
Listado 12.5. Pgina thankyou.html
<html>
<body bgcolor="white">
<font face="Arial" size=+l>User R e g i s t r a t i o n C o m p l e t e < / f o n t x b r >
<P>
<form action="<TMPL_VAR name=REFERRER>" method="GET">
<table border=0
cellpadding=3
cellspacing=0
bgcolor="#000000">
<tr>
<td>
<table border=0
cellpadding=5
cellspacing=5
bgcolor="#abcdef">
<tr>
<td>
<TMPL_VAR NAME=name>, <p>
Thank you for taking the time to register. We will send you
information via <TMPL_VAR NAME=email>.
</td>
</tr>
EEkl
<tr>
<td align=center> <input type=submit value="Return"</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
<P>
</html>
Observe que las etiquetas se reemplazan con los valores de los campos ame
y e m a i l que introduce el usuario. Recuerde que durante la validacin de los
datos, el script actualiza el tipo de letra de los campos que rellena el usuario, de
modo que el valor que se muestra realmente, tiene el formato correcto, lo cual es
perfecto cuando se muestra informacin de vuelta al usuario. Por eso, el usuario
puede introducir c a r o l g o d s a v e en el campo ame pero la pgina de agradecimiento mostrar C a r o l G o d s a v e , lo que gustar mucho al usuario. A
continuacin tenemos un ejemplo de un archivo de datos tras cuatro envos de
formulario r e g i s t e r . h t m l .
kabir@domain.com,Mohammed J. Kabir,12345,no
carol@domain.com,Carol Godsave,958 33,yes
joegunchy007@aol.com,Joe Gunchy,07024,yes
jennygunchy007@aol.com,Jennifer Gunchy,07024,no
PMil
#
# informacin sobre los campos
#
FORM_FIELDS
d a t a _ e r r o r _ m s g = P l e a s e e n t e r m i s s i n g d a t a and r e s u b m i t .
data_directory=/feedback/data/directory
data_filename=feedback.csv
data__f i e l d _ _ s e p a r a t o r = ,
data field_order=comma separated field list goes here
Cuando el usuario introduce su nombre y la direccin del amigo o del compaero y hace clic en el botn de enviar, se llama al script / c / s . d l l / m i m e m a i l . p l , que se muestra en el listado 12.6.
Listado 12.6. /cgi-bin/mime-mail.pl
#!/usr/bin/perl -w
#
#
# Nombre: mime-mail.pl
#
# Propsito:
#
# enviar la pgina por correo electrnico
#
####################################################
use strict;
use
use
use
use
use
CGI;
MIME::Lite;
MIME::Lite::HTML;
Config::IniFiles;
File::Basename;
#
# Crea un objeto CGI
#
my $query = new CGI;
#
# Crea un objeto de configuracin cargando el archivo mimemail. ini
# desde el directorio fsico asignado en /cgi-bin/
#
my $cfg
= new Config::IniFiles -file => "mime-mail.ini";
#
# Obtiene la URL
#
my $referrerURL = $ENV{HTTP_REFERER};
#
# Obtiene el nombre de la pgina
my $pageName = get_form_name($referrerURL);
#
# Imprime la cabecera del content type para que sea text/html
#
print $query->header;
#
# Si la pgina no tiene una [section] en el archivo
# mime-mail.ini, utiliza la seccin por defecto
$pageName = Mefaults' if ($cfg->val($pageName, 'from') eq w ) ;
#
# Obtiene la direccin de correo electrnico. Si no se suminist
# muestra un mensaje de error
#
my $to = ( $query->param('email') eq w I I
! c h e c k e m a i l ( $ q u e r y - > p a r a m ( 'email') , 'email')) ?
abort('Email address is missing.') : $query>param( 'email') ;
my $senderName = ( $query->param ( 'ame' ) eq w) ?
abort('Your ame is missing.') : $query>param( 'ame') ;
$senderName = format ame($senderName) ;
#
# Crea un objeto MIME::Lite::HTML y lo inicializa
# con referrer
my $mailHTML = new MIME::Lite::HTML
From => SsenderName . '<' .
$cfg->val($pageName, 'from') . '>',
To
=> $to,
Subject => $cfg->val($pageName, 'subject');
#
# Analiza la URL referrer y crea un objeto de correo MIME
#
my $MIMEmail = $mailHTML->parse($referrerURL);
#
# envia el correo MIME
#
$MIMEmail->send;
#
# Comprueba la cadena de error para buscar errores
#
my @errors = $mailHTML->errstr;
#
# Si no encuentra error, le dice al usuario que esa pgina fue
# enviada por su amigo; en caso contrario, muestra un mensaje
error
#
if ($#errors > -1 ) {
print abort ( 'Error (s) found: ' . join(,\\n', @errors));
} else {
print abort("Page sent to $to.\\nThank you.");
1
#
# Finaliza
#
exit 0;
sub abort (
# Imprime un mensaje javascript de abandono
print sprintf("<script>alert( ' "s' ) ;history.go(-l) ;</
script>",shift);
exit 0;
(
sub get form ame {
my $referrer = shift;
# Si el HTTP tiene una cadena de consulta devuelve
# nicamente la parte de la cadena que no es de consulta
#
if ($referrer =~ A ? / ) {
($referrer, undef) = split (/\?/,$referrer) ;
}
return basename($referrer);
I
sub format_name {
my @str = ();
foreach my $part (split ( A s / , shif t) ) {
(
return join('' \ @ s t r ) ;
}
sub check email {
my $email = shift;
my SfieldName = shift;
#
#
#
#
#
#
#
Nota especial
Esta rutina de comprobacin del e-mail debera devolver
false (0) para las direcciones de e-mail raras compatibles
con RFC que no son habituales. Por ejemplo, bob&sandra@
domain.com fallar. Si quiere permitir este tipo de
e-mails "tcnicamente" vlidos, debe modificar las
expresiones regulares utilizadas en esta subrutina.
# direccin de e-mail
$email =~ /(\S+)\@([\w.-]+)/;
$email = $1 . '@' . $2;
# Almacena el valor intacto en el objeto de consulta
$query->param($fieldName, $email);
# Rompe el e-mail user@host en user y host
my ($user, $host) = split(/@/, $email);
# Devuelve false si la parte host no tiene
# formato hostname.domain.tld o domain.tld
#
return ($host !~ /("[a-zO-9. -]+\ . [a-z] (2,3 } )$/i) ? 0 : 1;
El script crea un objeto CGI llamado $ q u e r y y carga el archivo de configuracin m i m e - m a i l . i n i en otro objeto llamado $cf g. Entonces almacena la informacin de la referencia HTTP en la variable llamada
$ r e f e r r e r U R L y utiliza la subrutina g e t _ f orm_name () para determinar el nombre de la pgina que llam al script. El nombre de la pgina se
almacena en la variable $pageName.
La cabecera de contenido por defecto ( t e x t / h t m l ) se imprime utilizando el mtodo $ q u e r y - > h e a d e r . Entonces comprueba si hay una seccin en la configuracin para dicha pgina.
Utiliza
el mtodo $ c f g - > v a l ( $ p a g e N a m e ,
' f r o m ' ) para localizar
un parmetro llamado ' f r o m ' en el archivo de configuracin mimem a i l . i n i . Este parmetro debe asignarse en la seccin apropiada para
la pgina. A continuacin tenemos el archivo de configuracin mimemail . ini.
BMJ
[default]
subject = A Web page forwarded by a friend
from . = webmaster@domain.com
[mybooks.html]
subject = Check out Kabir's linux books!
From
= webmaster@domain.com
Por ejemplo, si se llam al script CGI desde una URL del tipo h t t p : / /
w w w . d o m a i n . c o m / m y b o o k s . h t m l , entonces el script asignar
$pageName a "mybooks . h t m l ' y buscar el parmetro ' f r o m ' en
la seccin [ m y b o o k s . h t m l ] utilizando la llamada al mtodo $ c f g > v a l ($pageName, ' f r o m ' ) . Si no est el parmetro porque no se
ha asignado o porque la seccin no est, se fija el $pageName en
' d e f a u l t ' , que le permite utilizar los parmetros de la seccin
f d e f a u l t ]. De ese modo, tener una seccin [ d e f a u l t ] es una buena idea si no quiere definir una seccin para cada pgina en la que mostrar
el formulario para enviar una pgina por correo electrnico.
A continuacin, el script determina si el usuario ha introducido una direccin de correo electrnico completa, y si es as, es decir, si la direccin de
correo electrnico se encuentra en el formato u s e r @ h o s t . Si no hay
direccin de correo electrnico o no es vlida, se muestra un mensaje de
error y el script termina utilizando la subrutina a b o r t () . Si la direccin
de correo electrnico es vlida, comprueba si el usuario ha introducido su
nombre en el campo ame del formulario Web. Si no hay nombre, abandona.
Si se aceptan la direccin de correo electrnico y el nombre, el script da
formato al nombre de usuario utilizando la subrutina f o r m a t _ n a m e () y
crea el objeto MIME : : L i t e : : HTML. Este objeto se inicializa con informacin From (de), To (para) y Subject (asunto). La direccin From se
compone del nombre de usuario y de la direccin de correo electrnico
ledos desde el archivo de configuracin. Por ejemplo, si un usuario llamado John Olson rellena el formulario para enviar una pgina por correo
electrnico en la pgina h t t p : / /www. domain . com/mybooks . h t m l ,
el script crear la cabecera From como J o h n O l s o n <webmaster@
domain . com>. La direccin de correo electrnico del usuario se utiliza
en el nombre para decirle al amigo o al compaero quin le est enviando
el correo. Tambin hemos recogido la direccin de correo electrnico del
usuario, de modo que podemos utilizarlo para determinar la cabecera From.
Pero recopilar la direccin de correo electrnico del usuario y del amigo o
compaero en dos pequeas cajas de texto podra ser muy confuso sin las
etiquetas adecuadas, las cuales podran variar el estado real de su pgina;
por eso, evitamos este tipo de esquemas.
El objeto $mailHTML se utiliza entonces para analizar la URL de referencia. En este momento, el script CGI realmente acta como un cliente
ScriptLog
La directiva S c r i p t L o g asigna los nombres de los archivos de registro para
los errores del programa CGI. Si el nombre del archivo de registro es relativo (es
decir, no comienza con una barra inclinada /), se toma como relativo con respecto
al directorio raz del servidor asignado por la directiva S e r v e r R o o t .
Sintaxis: S c r i p t L o g
filename
PET1
ScriptLogLength
La directiva S c r i p t L o g L e n g t h limita el tamao del archivo de registro
especificado en la directiva S c r i p t L o g . El archivo de registro puede registrar
una gran cantidad de informacin para cada error CGI, y por lo tanto, puede
crecer rpidamente. Utilizando esta directiva, puede limitar el tamao de registro
de modo que cuando el archivo alcanza el mximo tamao, no se registra ms
informacin.
Sintaxis: S c r i p t L o g L e n g t h
size
Predefinido: S c r i p t L o g L e n g t h
10385760
ScriptLogBuffer
La directiva S c r i p t L o g B u f f e r limita el tamao de los datos POST o PUT
que se registran.
Sintaxis: S c r i p t L o g B u f f e r
size
Predefinido: S c r i p t L o g B u f f e r
size
1024
BM;1
BUil
Como puede ver, el script aadi dos nmeros e imprimi los datos tal y
como se esperaba. Por lo tanto, por qu fracasa este script cuando se
ejecuta desde la Web? Bien, ha visto alguna cabecera Content-Type antes del resultado? No. Si observa el script observar esa $ q u e r y > h e a d e r ; lnea comentada. S elimina el comentario y vuelve a ejecutar
el script en el modo de lnea de comandos, ver lo siguiente:
(offline mode: enter name=value pairs on standard input)
numl=100
num2=200
Content-Type: text/html; charset=ISO-8859-l
100 + 200 = 100
BMil
my $num2 = $query->param(vnum2' ) ;
print $query->header;
if ($numl == $num2) {
# algo til
DEBUG and print STDERR "numl and num2 are same.Xn";
) elsif ($numl > $num2 ) {
# algo til
DEBUG and print STDERR "numl is greater than num2.\n";
} elsif ($numl < $num2 ) {
# algo til
DEBUG and print STDERR "numl is less than num2\n";
(
print
print
print
print
print
$query
$query
$query
$query
$query
>start_html('Calculator');
>hl("Calculator");
>p("Number 1: $ n u m l " ) ;
>p("Number 2: $ n u m 2 " ) ;
>end h t m l ;
exit0;
La parte interesante de esta lnea es que utiliza una constante llamada DEBUG,
que est asignada al comienzo del script con esta lnea:
u s e c o n s t a n t DEBUG => 1;
#imprime $query->header;
print
print
print
print
print
exit0;
He comentado la lnea $ q u e r y - > h e a d e r intencionadamente, la cual normalmente generara un mensaje de error interno del servidor en el navegador
Web. Por eso he aadido la sentencia u s e CGI : : Debug; en este script, el
script mostrar lo siguiente cuando se acceda a l como h t t p : //
w w w . d o m a i n . c o m / c / s . d l l / c g i d e b u g . p l ? n u m l = l&num2 = 2 00:
/cgi-bin/cgidebug.pl
Malformed h e a d e r !
- - Program o u t p u t b e l o w
<?xml v e r s i o n = " l . 0 " e n c o d i n g = " u t f - 8 " ? >
<!DOCTYPE h t m l
PUBLIC "-//W3C//DTD XHTML B a s i c 1 . 0 / / E N "
"http://www.w3.org/TR/xhtml-basic/xhtml-basiclO.dtd">
<html x m l n s = " h t t p : / / w w w . w 3 . o r g / 1 9 9 9 / x h t m l " l a n g = " e n US"xheadxtitle>Calculator</title>
</headXbody><hl>Calculator</hl><p>Number 1: K/pXp>Number 2:
200</px/bodyx/html>
1[1]
3[200]
Cookies
Environment
DOCUMENT_ROOT
= 15[/home/kabir/www]
GATEWAY_INTERFACE
=
7[CGI/1.1]
HTTP_ACCEPT
= 133[image/gif, image/x-xbitmap, image/jpeg,
image/pjpeg, applica]...
HTTP_ACCEPT_ENCODING = 13[gzip, deflate]
HTTP_ACCEPT_LANGUAGE =
5[en-us]
HTTP_CONNECTION
= 10[Keep-Alive]
HTTP__HOST
= 14 [rhat.nitec.com]
HTTP_USER_AGENT
= 50[Mozilla/4.0 (compatible; MSIE 5.5;
Windows NT 5.0)]
PATH
= 60 [/usr/bin:/bin:/usr/sbin:/sbin:/usr/
XllR6/bin:/home/kabir/bin]
QUERY_STRING
= 15[numl=l&num2=200]
REMOTE_ADDR
= 14[207.183.233.19]
REMOTE_PORT
=
4 [2841]
REQUEST METHOD
=
3[GET]
REQUESTJJRI
SCRIPT_FILENAME
SCRIPT_NAME
SERVER_ADDR
SERVER_ADMIN
SERVER_NAME
SERVER_PORT
SERVER_PROTOCOL
SERVER_SIGNATURE
rhat.nitec.com Port
SERVER_SOFTWARE
= 36 [ /cgi-bin/cgidebug.pl?numl = l&num2=200]
= 37[/home/kabir/www/asb2/chl2/cgidebug.pl]
= 20[/cgi-bin/cgidebug.pl]
= 14[207.183.233.20]
= 16[you@your.address]
= 14[rhat.nitec.com]
=
2[80]
=
8 [HTTP/1.1]
= 66[<ADDRESS>Apache/2.0.14 Server at
80-c/ADD] . . .
= 20[Apache/2.0.14 (Unix)]
<E0F>
Como puede ver, hay una gran cantidad de informacin que le ayudar a solucionar problemas y arreglar el script rpidamente. Por ejemplo, una lnea en el
programa anterior indica que la cabecera est mal formada.
En este captulo
1. Intentamos comprender los Server Side Includes.
2. Establecemos Apache para Server Side Includes.
3. Aplicamos Server Side Includes en pginas Web.
En el captulo 12, hemos visto que el contenido dinmico se puede crear utilizando programas CGI; sin embargo, hay tareas que no van a requerir programas
CGI a gran escala pero que siguen necesitando alguna intervencin dinmica.
Por ejemplo, imagine que quiere aadir un mensaje copyright estndar en todas sus pginas HTML; cmo implementara esta posibilidad? Tiene dos soluciones:
Aadir el contenido del mensaje copyright en cada pgina HTML.
Escribir un programa CGI que aada el mensaje en cada pgina HTML.
Ninguna de estas dos opciones resulta elegante. La primera opcin requiere
que cada vez que quiera cambiar el mensaje copyright, tenga que actualizar manualmente todos sus archivos. La segunda opcin requiere que tenga algn modo
Cliente Web
Recupera/index.html
t k
| Salida de contenido/index.html
Cliente Web
Servidor Web
GET /ndex.shtml
<
Recupera/index.shtml
J
Salida del nuevo contenido
Figura 13.1. Diagramas simplificados de ciclos de envos de una pgina HTML y una
SHTML
WUM
Como puede ver, la versin SSI de la pgina HTML es analizada primero por
los comandos SSL Estos comandos se ejecutan, y la nueva salida se enva la
navegador Web (es decir, al cliente Web).
Apache implementa SSI como un filtro INCLUDES. Antes de que pueda configurar Apache para SSI, tiene que comprobar su ejecutable actual de Apache
( h t t p d ) para asegurarse de que el mdulo m o d _ i n c l u d e est incluido. Le
mostrar cmo hacerlo en la siguiente seccin.
Ell&l
Ahora, si el directorio / w w w / m y s i t e / h t d o c s / p a r s e d tiene algn archivo any . t x t , any . h t m l o any . s h t m l en l, se analizarn estas solicitudes URL:
http://vhl.domain.com/parsed/any.txt
http://vhl.domain.com/parsed/any.html
http://vhl.domain.com/parsed/any.shtml
.shtml
wsn
DocumentRoot "/www/mysite/htdocs"
ScriptAlias /cgi-bin/ "/www/mysite/htdocs/cgi-bin/"
<Directory "/www/mysite/htdocs/parsed">
Options tlncludes
AddType text/html .shtml
<FilesMatch "\.shtml[.$]">
SetOutputFilter INCLUDES
</FilesMatch>
</Directory>
</VirtualHost>
Off
Full
Predefinido: X B i t H a c k Off
WTZM
; '""'lMWrt*j^
di- '
k
hv;
Wrffa-irlei|w^Mf%<<Mrtie-M-* **-''.' " "'''-"-'" --''-: r
^_
.:.?.<'-'y -
"'"-.
~-....
precedida por un espacio en blanco para asegurar que no se considera parte del
comando SSI.
Las siguientes secciones examinan todos los comandos SSI disponibles.
config
El comando c o n f i g le permite configurar el mensaje de error que aparece,
as como el formato que se utiliza para mostrar la informacin de tiempo y tamao. Esto se lleva a cabo con las siguientes lineas de cdigo:
config errmsg="error message"
config sizefmt=["bytes" I "abbrev"]
config timefmt=format string
BGCOLOR="white">
Embedded
commands :
<BRXBR>
<CODE>
l^i
</BODY>
</HTML>
y
<!--#config badcommand="whatever"
-->
c o n f i g s i z e f mt= [ " b y t e s " | " a b b r e v " ] le permite elegir el formato de salida para el tamao del archivo. Los especifcadores de formato aceptables son " b y t e s " o " a b b r e v " . Por ejemplo:
<!-#config
sizefmt^"bytes"
-->
muestra el tamao del archivo en bytes. Para mostrar los archivos en kilobytes
o megabytes, utilice:
<!-#config
sizefmt="abbrev"
c o n f i g timefmt = f ormat
tiempo:
-->
Los valores utilizados normalmente para la cadena de formato pueden ser los
identifcadores mostrados en la tabla 13.1.
Tabla 13.1. Identifcadores de formato para config timefmt
Identificador
Significado
%a
%A
%b
%B
%c
%d
%H
%l
%j
%m
%M
%p
%S
%w
Identificador
Significado
%x
%X
%y
%Y
%Z
%%
Un carcter %.
para el
timefmt="%c"
-->
timefmt="%m/%d/%Y"
-->
echo
El comando e c h o imprime una de las variables I n c l u d e (que se definen
ms tarde) o alguna de las variables de entorno CGI. La sintaxis es:
echo
var="variable_name"
-->
exec
El comando e x e c le permite ejecutar un programa externo. El programa externo puede ser un programa CGI o cualquier otro tipo de programa de un ejecutable, como los scripts shell o los archivos binarios de datos. La sintaxis de los
programas CGI es:
exec
cmd="path_to_other_programs"
#!/usr/bin/perl
use
-w
strict;
text/html\n\n";
print <<TABLE_ROW;
<tr><td>$color</td>
<td bgcolor="$color"> Snbsp; Snbsp; Snbsp; </td>
</tr>
TABLE ROW
print
exit
</table>';
0;
<TITLE.'
Apache
Server
Chapter
13
</TITLEX/HEAD>
command:
</P>
Utilizando el comando <! - - # e x e c c g i = " / c g i - b i n / c o l o r s . p l " - > , e x e c c g i l . s h t m l produce la salida que se muestra en la figura 13.3.
La belleza de embeber un script CGI utilizando una llamada SSI como la
anterior radica en que la pgina se ha armado utilizando tanto datos estticos y
dinmicos (es decir, contenido del script CGI).
SSI Example #2
xarnple of the SSI exec cgi command
Embedded piommnds
< '-Uey.ee c g i = " / c g i - b i n / c o l o r s . pl"
Result
black
blue
brown H
:
:>"
green
d
v^bte
yellow
Observe que si el script CGI devuelve una cabecera Location en lugar de una
salida, la cabecera se traduce a un anchor (marcador que se inserta en una pgina
Web) HTML. Por ejemplo, el listado 13.4 muestra un script CGI escrito en Perl
llamado r e l o c a t e . pl que imprime una cabecera L o c a t i o n : como salida.
Listado 13.4. relocate.pl
#!/usr/bin/perl
-w
. "\n\n";
exit 0;
Cuando un navegador Web solicita el archivo e x e c _ c g i 2 . s h t m l , mostrado en el listado 13.5, el servidor convierte la cabecera L o c a t i o n : en un anchor
HTML en lugar de redirigirel navegador al sitio h t t p : / / a p a c h e . n i t e c . com.
Listado 13.5. exec_cg2.shtml
<HTML>
<HEAD> <TITLE> Apache S e r v e r 2
<B0DY BGC0L0R="white">
<F0NT SIZE=+1 FACE="Arial">SSI
<HR SIZE=1>
- Chapter
Example
13 </T ITLEX/HEAD>
#3</F0NT>
</B0DY>
</HTML>
cgi="/cgi-bin/relocate.pl"
->
SS! Example #3
Example of the SSI exec cgi cornmand
Embedded corranands
<'-Sexec c g i = " / c g i - b m / i : e l o c a t e . p l " ->
Result
hltp /'''pache mtri: r o m
->
<BR>
<BR>
</P>
<P> Result: <BR>
<!fexec cmd="/bin/date +'f,m/sd/*y" --> <BR>
<PRE>
<!lexec cmd="/bin/ls
-1
./*.html"
-->
<BR>
</PRE>
</P>
</BODY>
</HTML>
Este archivo tiene dos llamadas cmd:
<!--#exec cmd="/bin/date +%m/*d/%y" -->
<!lexec cmd="/bin/ls -1 ./*.html" -->
BMil
->
Result
03/17/01
fsize
Este comando imprime el tamao del archivo especificado. La sintaxis que ha
de utilizar para este comando depende de si la ruta del directorio es relativa o
virtual:
fsize
fsize
file="path"
virtual="URL"
-->
Si se utiliza la segunda sintaxis, se supone que la ruta virtual es una ruta URL
(%-encoded). Si la ruta no comienza con una barra inclinada (/), entonces se
toma como relativa al documento actual. Debe acceder a un archivo normal de
este modo, pero no puede acceder a un script CGl as. De nuevo, sin embargo,
puede acceder a otro documento analizado. Por ejemplo:
<!--#fsize virtual = "/download/free_software . zip" -->
flastmod
El comando f l a s t m o d imprime la ltima fecha de modificacin del archivo
especificado. De nuevo, hay dos opciones de sintaxis, dependiendo de la ruta del
directorio:
EJ1
flastmod file="path"
flastmod virtual="URL"
-->
include
La directiva i n c l u d e inserta el texto de un documento en el documento SSI
que se est procesando. La sintaxis depende de la ruta del directorio:
Sintaxis 1: i n c l u d e f i l e = " p a t h "
Sintaxis 2: i n c l u d e v i r t u a l = "URL"
Ver el comando f s i z e para observar las diferencias entre el modo de archivo
y el virtual.
Cualquier archivo i n c l u d e d es sujeto del control de acceso habitual. Si el
directorio que contiene el archivo analizado, tiene asignado O p t i o n
IncludesNOEXEC, e incluir el documento podra dar lugar a que se ejecutase
el programa, entonces no se incluye. Esto previene la ejecucin de scripts CGI.
De lo contrario, los scripts CGI se invocan como siempre, utilizando la URL
completa dada en el comando, incluyendo cualquier cadena de consulta. Por ejemplo:
<!--#include
file="copyrights.html"
-->
file="b.shtml"
-->
file="a.shtml"
-->
entonces Apache registra y muestra una indicacin de error que advierte que se
ha detectado una inclusin recurrente.
printenv
El comando p r i n t e n v imprime una lista de todas las variables y sus valores. La sintaxis es:
printenv
Por ejemplo:
< ! --Iprintenv
-->
set
El comando s e t asigna el valor de una variable definida por el usuario. La
sintaxis es:
set
var="variable
ame"
value="value
of
the
value="ndex.shtml"
-->
variable"
Por ejemplo:
<!--#set
var="home"
Variables SSI
El mdulo SSI deja un conjunto de variables, adems de las variables de entorno CGl (captulo 12), disponibles para todos los archivos SSI. Estas variables se
llaman variables i n c l u d e . Pueden ser utilizadas por comandos ( e c h o , if,
e l i f , y otros) y por cualquier programa invocado por un comando SSI. La tabla
13.2 muestra las variables i n c l u d e .
Tabla 13.2. Variables Include
Variable
Significado
DATE_GMT
DATE_LOCAL
DOCUMENT_NAME
DOCUMENT_URI
LAST_MODIFIED
Bbfcl
argument2="$variable2"
...-
v a r = "DOCUMENT__NAME"
-->
NOTA: Si tiene que insertar el signo del dlar en el valor de una variable,
puede insertar el signo del dlar utilizando la barra inversa. Por ejemplo:
<!-#set var="passwordn value="\$cheese" >
<!#echo var="password" >
Esto imprime S c h e e s e como el valor de la variable " p a s s w o r d " .
Adems, si necesita hacer referencia al nombre de una variable en el medio de
una secuencia de caracteres que de otro modo podra considerarse un identificador
vlido, utilice un par de corchetes alrededor del nombre. Por ejemplo:
<!tset
var="uniqueid"
>
-->
Aqu se evala " t e s t e x p r e s s i o n " , y si el resultado es verdadero, entonces todo el texto hasta el comando e n d i f es incluido en la salida.
EEE1
Observe que esa segunda cadena ( s t r i n g 2 ) puede ser una expresin regular
de la forma / r e g u l a r e x p r e s s i o n p a t t e r n s / (/patrn de una expresin regular/). Ver el apndice B para obtener los detalles sobre las expresiones
regulares.
Vamos a ver un ejemplo de un string:
<!--#if expr="foobar" -->
This test is always successful.
<!--#endif -->
virtual="/cgi-bin/timecard.pl">
<!--#endif -->
la para determinar si la variable definida por el servidor REMOTE_ADDR corresponde a la direccin de red 2 0 7 . 1 8 3 . 2 3 3 . Observe que la direccin est
escrita utilizando la expresin regular / 2 0 7 \ . 1 8 3 \ . 2 3 3 / , en la que cada .
(punto) se marca utilizando una barra invertida \. Esto era necesario para deshacer el significado concreto del punto en las expresiones regulares. Ver el apndice
C para obtener ms detalles sobre las expresiones regulares.
La segunda subexpresin, $ { DOCUMENT_NAME } = / t i m e s h e e t / , se
evala para determinar si el archivo SSI actual que se est procesando, tiene un
nombre que corresponda a la cadena t i m e s h e e t . Y, finalmente, el && (el Y en
lgica) exige que las dos subexpresiones sean ciertas para que la expresin sea
cierta. Si la expresin final es cierta, entonces se ejecuta el script / c g i - b i n /
t i m e c a r d . p l utilizando el comando virtual i n c l u d e .
Otras operaciones lgicas que puede realizaren l a t e s t _ e x p r e s s i o n son:
<!--#if expr="! test expression" -->
This is printed only when the test expression is false.
<!--#endif -->
y
<!--#if expr = "test__expressionl I | test_expression2" -->
This is printed when at least one of the test_expressions is
t ru .
<!--#endif -->
!= ($profit = yes)"
-->
-->
<!--#else
-->
Do s o m e t h i n g as d e f a u l t .
<!--#endif
-->
-->
Aqu, se comprueba la variable HTTP_USER_AGENT para determinar si contiene el string MSIE (un string utilizado por el navegador Microsoft Internet
Explorer). Si contiene este string, entonces la variable del navegador se fija con el
valor M i c r o s o f t I E , y un archivo llamado mypage . a s p se inserta en el documento. Sin embargo, si HTTP_USER_AGENT no contiene el string MSIE,
supone que se trata de otro navegador (como Netscape Navigator, Lynx), y por lo
tanto, la variable del navegador toma el valor O t h e r s y se inserta el archivo
mypage . h t m l en el documento. Utilizando la construccin i f - t h e n - e l s e ,
este ejemplo asigna un valor distinto a la misma variable y carga distintos archivos.
fEl Configurar
Apache para
FastCGI
En este captulo
1. Explicamos FastCGI.
2. Describimos la arquitectura bsica de una aplicacin FastCGI.
3. Compilamos e instalamos el mdulo FastCGI para Apache.
4. Configuramos h t t p d . c o n f para que ejecute aplicaciones FastCGI.
Este captulo discute FastCGI y resuelve los problemas de rendimiento inherentes a CGI, sin introducir la sobrecarga y la complejidad de los API propietarios. FastCGI es rpido, abierto y sostenible. Ofrece caractersticas como caching
en memoria, conexiones persistentes y arquitectura distribuida. La migracin desde
CGI a FastCGI es adems razonablemente simple.
FastCGI
En general, una aplicacin FastCGI acta como una aplicacin de servidor
llamada demonio en el mundo Unix. A diferencia de un script CGI, una aplicacin
MbhM
FastCGI es persistente y sirve todas las solicitudes entrantes utilizando una nica
instancia, eliminando as, la sobrecarga inherente al hecho de iniciar un nuevo
proceso para cada solicitud, como ocurre en la versin CGI. Por ejemplo, si tiene
que generar un conjunto de pginas dinmicas utilizando contenido de una base
de datos, un script CGI tiene que conectar con la base de datos cada vez que
ejecuta una solicitud. Sin embargo, una aplicacin FastCGI puede conectar una
vez y mantener la conexin viva para todas las solicitudes siguientes, lo que da
lugar a un alto rendimiento. Por eso, FastCGI se considera una alternativa al CGI
de alto rendimiento a la hora de escribir aplicaciones para un servidor Web en
distintos lenguajes, incluidos Perl, C, C++, Java y Python.
La existencia de CGI, FastCGI y de Server API crea una gran confusin en los
desarrolladores y en los administradores de sistemas. Para aclarar estos conceptos, la tabla 14.1 proporciona una comparacin entre estas tecnologas con respecto a una serie de caractersticas claves.
Tabla 1 4 . 1 . Comparar CGI, Server API y FastCGI
Caracterstica
Server API
FastCGI
Dependencia del
lenguaje de programacin
Es independiente del
lenguaje. Las aplicaciones CGI se pueden
escribir en prcticamente cualquier lenguaje de programacin (normalmente C/
C++).
Las aplicaciones se
tienen que escribir en
un lenguaje que soporte el lenguaje de programacin del fabricante del API.
Aislamiento del
proceso
Procesos separados
para las aplicaciones;
las aplicaciones de
depuracin no pueden
hacer quebrar el servidor Web o acceder
al estado interno privado y comprometer la
seguridad. Los errores en el servidor central pueden corromper
las aplicaciones.
Tipo de estndar
Estndar abierto. En
cada servidor Web se
implementa algn formulario CGI.
No propietario, propuesto
para estndar abierto. El
soporte se encuentra bajo
el desarrollo de otros servidores Web, incluidos
servidores comerciales de
Microsoft y Netscape.
Apache actualmente soporta FastCGI como mdulo de terceras partes.
BkU
Caracterstica
CGI
Server API
FastCGl
Dependencia de plataforma
Se encuentra atada a
la arquitectura del servidor. Las aplicaciones
API tienen que compartir la misma arquitectura que el servidor.
Si el servidor Web es
multihilo, la aplicacin
tiene que ser asegurar
los hilos. Si el servidor
Web tiene procesos
de un solo hilo, las
aplicaciones multihilo
no tendrn ventajas de
rendimiento.
Rendimiento
Se crea un nuevo proceso para cada solicitud y la lanza si se realiza la solicitud; poca
eficacia.
Las aplicaciones se
ejecutan en el proceso del servidor y son
persistentes a lo largo
de las solicitudes. No
existe el problema del
arranque e iniciacin
del CGI.
Complejidad
Fcil de entender.
Arquitectura distribuida
gEn
El ritmo de FastCGI
Los desarrolladores de FastCGI realizaren pruebas utilizando tres versiones de una aplicacin (basadas en CGI, FastCGI y en una especificacin
API basada en servidores Web muy conocida) que interaccionaban con un
servidor de una base de datos. Los desarrolladores vieron que cuando la
v0rai6n.Fas$GGJ.4ciUtflBl^aj:t^i> utUizaj^Cflcbing en memoria y conexiones persistentes con la base de datos, superaba con mucho el rendimiento de
las versiones COI y de tas apcacanes basadas en API.
Cuando ee desactivaba-*J oaob mmemotia en la aplicacin FastCGI, y se"
utijizaba na* opa$xioa peesistente-.para la aplicacin basada en AP.I4
aplicacin basada A P I tenaun rendimiento UgRrametae superior que la
varetn.FastC4*L flfc sigftiSca que solo cuando se utiliza el nyel bswg
Internet
Conexin
TCP/IP
Sistema FastCGI
fcgi.nitec.com
Figura 14.1. FastCGI en una mquina remota
BEE1
que liberan al servidor Web para lo que sabe hacer mejor, servir solicitudes Web.
El servidor o los servidores Web pueden ser adaptados para realizar mejores
servicios Web y, al mismo tiempo, el servidor de la aplicacin FastCGI puede ser
adaptado para ejecutar aplicaciones de forma eficaz. El administrador Web nunca tendr que preocuparse de cmo equilibrar los requisitos de recursos del
servidor Web y las aplicaciones en la misma mquina. Esto proporciona una
configuracin ms flexible en el lado del servidor Web al tiempo que del lado de
la aplicacin.
Muchas organizaciones quieren proporcionar acceso a bases de datos en sus
sitios Web. Debido a las limitaciones del CGI y de los API, sin embargo, deben
replicar una versin limitada de la base de datos en el servidor Web para proporcionar este servicio. Esto da lugar a un trabajo considerable para el administrador. Con FastCGI remoto, las aplicaciones se pueden ejecutar en la red interna,
simplificando el trabajo del administrador. Cuando se utiliza con una configuracin apropiada del firewall y bajo una auditoria, esta aproximacin proporciona
un modo de ofrecer datos y aplicaciones internas a Internet seguro, de alto rendimiento y escalable.
Las conexiones FastCGI remotas tienen dos procesos de seguridad: autentificacin y privacidad. Las aplicaciones FastCGI deberan aceptar nicamente conexiones desde servidores Web en los que confiasen (la librera de aplicaciones
incluye soporte para validacin de direcciones IP). Las futuras versiones del protocolo podran incluir soporte para aplicaciones de autentifcacin de servidores
Web, as como para ejecutar conexiones remotas con protocolos de seguridad
como Secured Socket Layer (SSL).
ElEl
Cliente
(1)
Solicitud
Servid
c
ervidorWebf
-<(2) Ejecuta
(3) Salida
rograma C G |
Cliente
Clie
| -<-
(5)
Respuesta
-feervidor Web|
(4) Sale
Efcfcl
Servidor Web f
rama FastCC
|M
l i e n t e
Solicitud
^ e r v i d o r Web |
fOgrama FastCGf
m-. Cliente
(4)
irvidor Web
(3)
Sograma FastCC
Figura 14.3. Modelo de procesamiento de una solicitud con FastCGI
Cdigo de iniciacin
Loop de respuesta
Cuerpo del cdigo
EkVJ
Filtros: puede crear una aplicacin filtro FastCGI para procesar un archivo solicitado antes de devolverlo al cliente. Por ejemplo, imagine que quiere aplicar un conjunto estndar de cabeceras y pies de pgina para cada
pgina HTML ( . h t m l ) devuelta por el servidor Web. Esto es posible
utilizando una aplicacin de filtro FastCGI. Cuando llega una solicitud de
un archivo . h t m l al servidor, enva el archivo solicitado al filtro FastCGI
responsable de aadir la cabecera y el pie de pgina. La aplicacin FastCGI
devuelve la pgina HTML resultante al servidor, el cual la transmite al
cliente. Las aplicaciones de filtro FastCGI pueden suponer un importante
incremento del rendimiento mediante el caching de los resultados filtrados
(el servidor proporciona el momento de modificacin en la informacin
solicitada, de modo que la aplicacin puede descargar el cach cuando no
se modifica el archivo). Las aplicaciones de filtro son tiles en el desarrollo de analizadores de pginas HTML con sentencias SQL embebidas, en
los convertidores de formato al vuelo, y similares.
EEE1
Hay que tener cuidado cuando una aplicacin CGI que ha migrado, tiene
cdigo que puede interferir con una segunda ejecucin del cdigo del cuerpo, es necesario arreglar esto. La solucin a este problema podra ser tan
sencilla como aadir cdigo para reiniciar algunas variables, arrays, y
similares. La aplicacin debe asegurar que cualquier estado que se crea en
el proceso de una solicitud, tiene un efecto intencionado en solicitudes
posteriores.
Hay una prctica comn entre los desarrolladores CGI, que es subdividir
una gran aplicacin en pequeos applets CGI, para compensar la desventaja asociada a la inicializacin, con las aplicaciones CGI. Con FastCGI,
es mejor tener la funcionalidad relacionada en un solo ejecutable de modo
que haya menos procesos que manejar y las aplicaciones puedan sacar partido de la comparticin de la informacin cacheada entre las funciones.
Para migrar con facilidad a FastCGI, los ejecutables construidos con el
mdulo FCGI pueden ejecutar programas CGI o programas FastCGI, dependiendo de cmo se invoquen. El mdulo detecta el entorno de ejecucin
y automticamente selecciona FastCGI o rutinas I/O, dependiendo de lo
que sea apropiado.
Muchas aplicaciones CGI estn escritas de modo que no puedan intentar
realizar ninguna operacin en la memoria. Esto es consecuencia de aplicaciones CGI que existen tras la ejecucin. Y en la mayora de los casos, el
sistema operativo es capaz de restablecer la memoria para otros usos. Por
encima de esto, muchas aplicaciones CGI ni siquiera intentan cerrar, ya
que la responsabilidad se pasa al sistema operativo.
En este caso, es muy importante que este tipo de aplicaciones se fijen durante
la migracin a la versin FastCGI. Recuerde que las aplicaciones FastCGI residen en memoria hasta que el servidor Web o el administrador las eliminan. Si una
aplicacin CGI que filtra memoria, se convierte en FastCGI sin nadie que se
ocupe del problema, la versin FastCGI podra seguir filtrando memoria, causando a la larga un fallo de recursos. Evite largos fines de semana en la oficina
solucionando con anticipacin el problema. Si la aplicacin CGI es muy complicada, y fijarla adecuadamente resulta muy caro en trminos de tiempo y esfuerzo,
hay otra solucin disponible.
Puede mantener la cuenta de cuntas veces esta aplicacin de filtrado de memoria ha servido solicitudes y las ha eliminado. El listado 14.1 muestra un sencillo ejemplo de cmo se mantiene una cuenta de procesamiento de solicitudes en
liMil
-w
# Variables
EH
my SMAX = 10;
my $i;
# Cabecera de contenido
print "Content-type: text/html\n\n";
# loop principal
for ($i=0; $i < $MAX; $i + + ){
print "<FONT SIZE = $i>Font Size = $i</FONTXBR>" ;
exit 0;
S i * =0
Fort S i * = 1
FontSne-2
Font Size =3
Font Size =4
Font Size =5
Font Size =6
Font Size =7
Font Size =8
Font Size =9
Figura 14.5. Salida del script fontsize.cgi
Ahora vamos a convertir esto en una aplicacin FastCGI. Lo primero que tiene
que hacer es asegurarse de que tiene instalado el mdulo FCGI desde el sitio
Comprehensive Perl Archive Network (CPAN) para seguir los pasos siguientes:
1. Como raz, desde la lnea de comando ejecute el comando siguiente:
perl
-MCPAN - e
shell
FCGI;
Esta lnea le dice a Perl que cargue el mdulo FCGI cuando ejecute el
script.
4. Identifique el bloque de inicio de la aplicacin CGI. Para este script, el
bloque de inicio consiste en dos declaraciones de variables:
my $MAX = 1 0 ;
my $ i ;
>= 0)
# Cdigo d e l c u e r p o
0;
FastCGI
1AM
exit 0;
apachectl.
EfiEl
Directiva AppCIass
Esta directiva le permite iniciar aplicaciones FastCGI.
Sintaxis: A p p C I a s s p a t h _ _ t o _ F a s t C G I _ a p p l i c a t i o n
[p r o c e s s e s N]
[ - l i s t e n - q u e u e - d e p t h N]
[-restartd e l a y N] [ - p r i o r i t y N] [ - p o r t N] [ - s o c k e t sock-name]
[ - i n i t i a l - e n v key=value]
[ - r e s t a r t - d e l a y N]
[p r i o r i t y N] [ - p o r t N] [ - s o c k e t sock-name] [ - i n i t i a l env k e y = v a l u e ]
Contexto: configuracin del servidor
Por ejemplo, la siguiente directiva permite a modfastcgi cargar /www/
development/fcgi-devel-kit/echo.fcg FastCGI applicationV
AppCIass
/www/development/fcgi-devel-kit/echo.fcg
-port
9000
HiU
P r i o r i t y : esta opcin determina la prioridad de procesos de una aplicacin FastCGI. El valor por defecto le permite a la aplicacin FastCGI
tener la misma prioridad que el servidor Apache. La llamada al sistema
s e t p r i o r i t y del sistema operativo define otros valores apropiados. En
un sistema Red Hat Linux, la llamada al sistema s e t p r i o r i t y permite
un valor entre -20 y 20. Cuanto menor es el nmero, ms favorable es el
esquema utilizado para el proceso. Sin embargo, mod_f a s t c g i no permite valores negativos, lo que significa que no puede establecer que un
proceso FastCGI tenga mayor prioridad que el servidor Apache. Por eso,
todo lo que puede hacer es utilizar un nmero entero positivo para reducir
la prioridad de la aplicacin. El valor por defecto es el 0.
Directiva ExternalAppClass
Utilice esta directiva cuando tenga una aplicacin FastCGI ejecutndose en
otro sistema.
Sintaxis: E x t e r n a l A p p C l a s s F a s t C G I _ a p p l i c a t i o n _ n a m e
host host:port]
f - s o c k e t sock_name]
[-
ejecucin de la aplicacin en el host remoto, de modo que puede ser el nombre que
quiera. Asegrese de que elige un nombre que no se est utilizando en otra directiva A p p C l a s s o E x t e r n a l A p p C l a s s s .
ExternalAppClass echo.fcg
-host
fcgi.nitec.com:9090
Directiva FastCgilpcDir
Esta directiva especifica la ruta por defecto para los socket del dominio Unix
creados por el mdulo. La localizacin por defecto / tmp es perfecta siempre que
no tenga trabajos c r o n establecidos para limpieza de su directorio / t m p cada
cierto tiempo.
Sintaxis: F a s t C g i l p c D i r
path_to_UNIX_domain_socket
Predefinido: F a s t C g i l p c D i r
/tmp
KiVJ
un puerto TCP. La diferencia entre las dos directivas es que una sola directiva
A p p C l a s s inicia una aplicacin y establece la asociacin para comunicarse con
ella, mientras que E x t e r n a l A p p C l a s s slo define la asociacin. En el caso
de A p p C l a s s , el nombre de la ruta utilizado en la asociacin siempre es el
nombre de la ruta del ejecutable de la aplicacin; con E x t e r n a l A p p C l a s s , el
nombre de la ruta es arbitrario.
Para que m o d _ f a s t c g i procese una solicitud HTTP, el manejador de solicitudes debe ser f a s t c g i - s c r i p t y el tipo MIME de las solicitudes deben ser
a p p l i c a t i o n / x - h t t p d - f c g i . Apache proporciona varias formas de asignar el manejador y el tipo MIME para una solicitud:
AddType se puede asociar el tipo MIME a p p l i c a t i o n / x - h t t p d f c g i con archivos basados en una extensin de archivos.
liftkl
cado que esta configuracin funciona, fusione los aspectos especficos de FastCGI
de esta configuracin con su propia configuracin.
Listado 14.4. Ejemplo de un archivo de configuracin httpd.conf
# httpd.conf-minimal for mod fastcgi
Port 80
# Deberla reemplazar la directiva User/Group con el nombre
# user/group apropiado
User $HTTP_USER
Group $HTTP_GROUP
# Configure slo un proceso hijo desocupado,
# para simplificar la depuracin
StartServers 1
MinSpareServers 1
MaxSpareServers 1
# digale a httpd donde deberla residir,
# activa el registro de acceso y de error
ServerRoot
$APACHE
ErrorLog
logs/error.log
TransferLog
logs/access.log
ScoreBoardFile logs/httpd.scoreboard
# digale a http de donde obtener los documentos
#
DocumentRoot $FASTCGI
# Este es el modo en el que deberla colocar los archivos socket
# Unix del dominio Unix en el directorio de registros (tendr
# que crear un subdirectorio para ellos.)
# No lo haga a no ser que compruebe que todo funciona con los
# archivos socket almacenados localmente, en /tmp!
# FastCgilpcDir $APACHE/logs
# Inicie el echo app
#
AppClass $FASTCGI/examples/echo -initial-env SOMETHING=NOTHING
# Tiene solicitudes manejadas por mod_fastcgi para este echo
# app (si no, el servidor devolver el binario de app como un
# archivo! )
#
CLocation /examples/echo>
SetHandler fastcgi-script
</Location>
# Inicia una aplicacin FastCGI que es accesible desde otras
# mquinas
AppClass $FastCGI/examples/echo.fcg -port 8978
E3
<Location
/examples/echo.fcg>
SetHandler fastcgi-script
</Location>
#
#
#
#
#
remote-echo
-host
1 ocalhost:8978
<Location
/examples/rernote-echo>
SetHandler fastcgi-script
</Location>
# Deberla manejar de este modo cualquier
# para un archivo con la extensin .fcg:
AddHandler fastcgi-script fcg
# Final
de
solicitud
httpd.conf
Palabra clave
Se reemplaza con
$APACHE
$FASTCGI
$HTTP_USER
$HTTP_GROUP
EH
na PHP
y Apache
En este captulo
1. Trabajamos con PHP.
2. Compilamos e instalamos PHP.
3. Configuramos PHP con el archivo p h p . i n i .
4. Configuramos Apache para PHP.
5. Creamos un script PHP en lnea de comandos.
6. Creamos scripts PHP.
7. Indexamos directorios con PHP.
8. Gestionamos pginas desaparecidas con PHP.
9. Manejamos sesiones de usuario con scripts PHP.
10. Accedemos a bases de datos MySQL con PHP.
1 1. Aseguramos archivos include PHP.
12. Autentificamos usuarios con PHP y con la base de datos MySQL.
Hace slo unos aos, PHP, el procesador de hipertexto PHP, comenz a ser un
macro lenguaje para HTML. Hoy se distribuye en un alto tanto por 100 del
mundo de los sitios Web y es, de hecho, el mtodo que hace de script del lado del
cliente en las conexiones a las bases de datos. PHP es un lenguaje de programacin en toda regla que se centra en aplicaciones Web dinmicas. Puede ejecutarse
como un script independiente para realizar tareas de administracin del sistema,
de forma parecida a Perl y a otros lenguajes de programacin shell, pero su
objetivo principal son las pginas Web dinmicas que rinden datos desde una
base de datos relacional como MySQL, Postgres, Oracle, DB2 y MS SQL Server.
Aunque PHP compite con ASP de Microsoft, Cold Fusin de Allaire, JSP de
Sun, e incluso un primo de cdigo fuente abierto llamadomod p e r 1, realmente
se encuentra por encima de prcticamente todos sus competidores por al menos un
ao. Como PHP es fcil de distribuir y de usar, tiene soporte en la mayora de las
plataformas y conectividad nativa a bases de datos, tiene el record ms alto por
ser fcil de aprender e implementar.
En este captulo, aprender a compilar, a instalar y a configurar Apache para
utilizar m o d p h p , el mdulo PHP para Apache. Tambin aprender a asegurar
PHP y a utilizar varias aplicaciones PHP.
Si est utilizando Apache en Windows, le mostrar cmo ejecutar scripts PHP
en Apache para Windows en los siguientes captulos.
BU
presentacin resulta muy errneo. Sin embargo, esto no les preocupa a millones
de usuarios de PHP. Los que se oponen al PHP argumentan que mezclar cdigo en
la presentacin dificulta el trabajo del experto en presentacin. En el rea de la
Web, el experto en presentacin es realmente un diseador HTML o de grficos
que, probablemente, carece de conocimientos de programacin. Por ese motivo,
embeber scripts en pginas HTML hara la vida difcil a los diseadores HTML.
Sin embargo, PHP ofrece una gran variedad de libreras que funcionan con plantillas para resolver este problema, ofreciendo una metodologa de desarrollo eficaz y un proceso sencillo de mantenimiento. De este modo, los desarroUadores se
centran en la lgica de negocio, y los diseadores de pginas pueden cambiar la
distribucin de una pgina dinmica sin afectar al desarrollo o interferir con el
cdigo PHP. Ms de tres millones de sitios Web consideran que vale la pena
utilizarlo, y han convertido PHP en una plataforma de desarrollo de aplicacin
rpida (Rapid Application -Development, RAD).
PHP se utiliza exclusivamente para el desarrollo Web. Se puede compilar
tambin como un intrprete de script independiente, y puede manejar tareas sencillas de administracin. La ltima versin de PHP (versin 4) tiene la ingeniera de
lenguaje central, el analizador Zend, lo suficientemente abstracta como para que
sea considerada por otras tecnologas, en las que PHP puede ser el lenguaje embebido en la plataforma como VBA se utiliza con Microsoft Office.
PHP en su compaa
Aunque los software de cdigo abierto como Linux, MySQL y Perl se estn
haciendo ms habituales en los entornos corporativos, sigue siendo, a menudo,
necesario vender este tipo de tecnologa para gestiones de alto nivel. Cuando PHP
cumple los requisitos, pero la gestin necesita una larga lista de razones, PHP
puede ser la solucin correcta, por los motivos siguientes:
Desarrollo Web rpido: organizar y ejecutar scripts PHP es muy rpido.
Escribir una aplicacin de integracin de una Web y una base de datos en
PHP es una cuestin de horas o de das, mientras que los lenguajes de
programacin como C/C++ y Java pueden llevarnos meses. A diferencia
de los lenguajes de propsito general, PHP es un lenguaje de script, con
una afinidad particular por el desarrollo de pginas Web dinmicas.
Transportable a la mayora de las plataformas de sistemas operativos:
PHP se ejecuta en todos los sistemas operativos importantes, incluidos
Unix, Linux, Windows, OS/2 y Mac OS.
Transportable a la mayora de las plataformas de servidores Web: en
PHP 4.0, la interfaz del servidor Web (Server API o SAPI) es abstracta, lo
que le permite integrar perfectamente con servidores Web distintos, incluido Apache, US, iPlanet/Netscape Enterprise Server y Zeus.
E3
MAVM
--enable-discard-path
--prefix=/usr/local/web/apache
--with-apache=../httpd-version
--with-mysql=/usr
Aqu la opcin - - w i t h - m y s q l est asignada a / u s r porque los paquetes RPM de MySQL instalan los archivos i n c l u d e en el directorio /
u s r / i n c l u d e / m y s q l . Si su sistema tiene i n c l u d e s de MySQL en
una localizacin distinta, debera utilizar un nombre distinto para el directorio. Puede descubrir dnde se guardan los i n c l u d e s MySQL utilizando el comando l c a t e m y s q l . h, que est disponible en la mayora de
los sistemas Unix con la caracterstica l c a t e de las bases de datos.
ldl:l
--prefix=/usr/local/apache\
--activate-module= modules/php4/libphp4.a
Puede aadir cualquier otra opcin en la linea de comandos anterior. Ejecute el comando . / c o n f i g u r e - - h e l p para obtener informacin sobre otras opciones.
6. Ejecutemake && make i n s t a l l para compilar e instalar Apache con
soporte PHP.
7. Ejecute el comando / u s r / 1 o c a l / a p a c h e / b i n / a p a c h e c t l
r e s t a r t para reiniciar (o iniciar) Apache.
--prefix=/usr/local/apache
--enable-so
IdEl
./configure
--with-apxs2=/usr/local/apache/bin/apxs
--with-mysql=/usr
Aqu, la opcin - - w i t h - m y s q l est asignada a /usr porque los paquetes RPM de MySQL instalan los archivos i n c l u d e en el directorio /
u s r / i n c l u d e / m y s q l . Si su sistema tiene inclusiones (archivos include)
de MySQL en una localizacin distinta, debera utilizar un nombre distinto
para el directorio. Puede descubrir dnde se guardan los i n c l u d e s
MySQL utilizando el comando l c a t e m y s q l . h, que est disponible
en la mayora de los sistemas Unix con la caracterstica lcate de las bases
de datos.
2. Ahora ejecute make && make i n s t a l l para compilar e instalar la
versin DSO del mdulo PHP para Apache.
3. Ejecute el comando / u s r / l o c a l / a p a c h e / b i n / a p a c h e c t l para
reiniciar (o iniciar) Apache.
php4_module
m o d u l e s / l i b p h p 4 . so
Esto le indica a Apache que cualquier archivo con la extensin . php debe
tratarse como un script PHP y procesarse utilizando los filtros de entrada y
salida de PHP.
TRUCO: No hay razn paca utilizar una extensin diferente para los scripts
PHP. Por ejemplo, puede asignar la directiva AddType a AddType
a p p l i c a t i o n / x - h t t p d - p h p . html y tener todas sus pginas HTML
tratadas como un script PHP. No recomiendo utilizar la extensin . html
porque hay posibilidad d que muchas de sus pginas HTML no sean scripts
PHP, y no querr que el servidor Web se haga ms lento al tener que
analizar cada pgina buscando scripts PHP.
1231
Of f
ame v a l u
EH
php_flag
La directiva p h p _ f l a g le permite asignar un valor boleando (On o Of f) a
un parmetro de configuracin.
Sintaxis: p h p _ f l a g ame On
Of f
php_value
La directiva p h p _ v a l u e le permite asignar un valor a un parmetro de configuracin.
Sintaxis: p h p _ v a l u e ame v a l u
Contexto: configuracin del servidor, host virtual, directorio, mbito de
directorio ( . h t a c c e s s )
Por ejemplo:
php__value e r r o r _ r e p o r t i n g 15
auto_append_file
La directiva a u t o _ p r e p e n d _ f i l e le permite asignar un pie de pgina de
documento a cada pgina analizada por PHP.
Sintaxis: a u t o _ p r e p e n d _ f i l e
filename
auto_prepend_file
La directiva a u t o _ p r e p e n d _ f i l e le permite asignar una cabecera de documento a cada pgina analizada por PHP.
Sintaxis: a u t o p r e p e n d
file
filename
preload.php
defaultcharset
La directiva d e f a u l t _ c h a r s e t determina el conjunto de caracteres por
defecto.
Sintaxis: d e f a u l t _ c h a r s e t
char_set
disablefunctions
La directiva d i s a b l e _ f u n c t i o n s le permite desactivar una o ms funciones por razones de seguridad.
Sintaxis: d i s a b l e _ f u n c t i o n s
ame]
function
ame
[function_
Puede especificar una lista, delimitada por comas, de funciones PHP, tal y
como se muestra a continuacin:
disable_functions = fopen, fwrite, popen
En este caso, la funcin responsable de abrir y escribir archivos o pipes (tuberas) est desactivada.
:-\- ,
'
displayerrors
La directiva d i s p l a y _ e r r o r s activa o desactiva la impresin de un mensaje de error en la pantalla. Se recomienda nicamente utilizarla en sistemas de
desarrollo y no para los servidores de produccin. Para los sistemas de produccin, debe utilizar l o g _ e r r o r s junto con e r r o r _ l o g para registrar mensajes de error a archivos o a un servidor s y s l o g .
Sintaxis: d i s p l a y _ e r r o r s On
Of f
enable di
La directiva e n a b l e _ d l activa o desactiva la capacidad de cargar
dinmicamente una extensin PHP.
Sintaxis: e n a b l e _ d l On | Of f
Predefinido: e n a b l e _ _ d l On
error_append_string
La directiva e r r o r _ a p p e n d _ s t r i n g asigna el string que se adjunta al
mensaje de error. Ver la directiva e r r o r _ p r e p e n d _ s t r i n g .
Sintaxis: e r r o r _ a p p e n d _ s t r i n g
string
errorjog
La directiva e r r o r l o g asigna la ruta de registro de error PHP. Puede
especificar un nombre de ruta completo del archivo de registro, o puede especificar la palabra clave s y s l o g en sistemas Unix para registrar utilizando la facilidad s y s l o g . En los sistemas Windows, asignar esta directiva a s y s l o g escribe
entradas de registro en el registro de eventos de Windows.
Sintaxis: e r r o r _ l o g
fqpn
error_prepend_string
La directiva e r r o r p r e p e n d s t r i n g asigna el string que est adjunto a
un mensaje de error. Esta directiva se utiliza con e r r o r _ a p p e n d s t r i n g .
Sintaxis: e r r o r _ p r e p e n d _ s t r i n g s t r i n g
Los mensajes de error se muestran en la pantalla. Por ejemplo, utilizando estas
dos directivas, puede imprimir mensajes de error en color rojo:
error_prepend_string = "<font color=red>"
error_append_string = "</font>"
error_reporting
La directiva e r r o r _ r e p o r t i n g le permite especificar un campo de bit
para especificar un nivel de informe de errores. El campo de bit se puede construir
utilizando las constantes predefinidas mostradas en la tabla 15.1.
Sintaxis: e r r o r _ r e p o r t i n g
constant]
[bit
field]
[predefined_
Significado
E_ALL
EERROR
E_WARNING
Constante
Significado
E_PARSE
E_NOTICE
E_CORE_ERROR
E CORE WARNING
ECOMPILEERROR
E_USER_WARNING
E USER NOTICE
Puede utilizar operadores de tratamientos de bits como ~ (invierte), & (operador de tratamientos de bits que significa "AND"), y | (operador de tratamientos de
bits que significa "OR") para crear un nivel de informe de errores personalizado.
Por ejemplo:
Error_reporting = E_ALL & ~E_WARNING & ~E_NOTICE
Esto le dice a la ingeniera PHP que muestre todos los errores excepto las
advertencias y las noticias. No se recomienda desplegar mensajes de error en un
servidor de produccin. Debera desplegar errores nicamente en su sistema de
desarrollo o durante la fase de desarrollo del servidor de produccin. En un servidor de produccin, utilice las directivas l o g _ e r r o r s y e r r o r _ l o g para escribir registros en los archivos o en la utilidad s y s l o g .
extensin
La directiva e x t e n s i n le permite cargar un mdulo de extensin para el
propio PHP.
Sintaxis: e x t e n s i n
module_name
gd.dll
extension_dir
La directiva e x t e n s i o n _ d i r define el directorio en el que se almacenan los
mdulos PHP que se cargan dinmicamente. El valor por defecto es adecuado
para la mayora de las instalaciones PHP.
Sintaxis: e x t e n s i n
dir
Predefinido: e x t e n s i n
directory
dir
./
implicitflush
La directiva i m p l i c i t _ f l u s h activa o desactiva la descarga implcita de
la salida del script al igual que utiliza p r i n t , e c h o y los bloques HTML para
las salidas. Cuando est activada, esta directiva emitir una llamada
f l u s h () despus de cada salida p r i n t () , e c h o o de un bloque HTML. Esto
resulta verdaderamente til para propsitos de depuracin, pero tambin una disminucin en el rendimiento en el entorno de produccin. Slo se recomienda para
sistemas de desarrollo.
Sintaxis: i m p l i c i t _ _ f l u s h On
Predefinido: i m p l i c i t _ f l u s h
Of f
Of f
include_path
La directiva i n c l u d e _ p a t h asigna la ruta para las funciones i n c l u d e () y
r e q u i r e () . Puede realizar una lista con varios directorios.
Unix: i n c l u d e _ p a t h
path[:path]
Sintaxis Windows: i n c l u d e _ p a t h p a t h [ ; p a t h ]
Por ejemplo, las siguientes lneas determinan que PHP debe buscar los archivos i n c l u d e primero en el directorio / u s r / l o c a l / l i b / p h p y despus en
el directorio actual:
include_path = /usr/local/lib/php:.
/usr/local/lib/php;.
log_errors
La directiva l o g e r r o r s activa o desactiva el registro de errores PHP.
Debe utilizar la directiva e r r o r l o g para especificar una ruta de registro o un
archivo s y s l o g .
Sintaxis: l o g ^ e r r o r s On | Of f
magic_quotes_gpc
La d i r e c t i v a m a g i c _ q u o t e s _ g p c activa o desactiva las comillas de escape
(los caracteres comillas, dobles comillas, nulo y la barra inversa) para los datos
GET, POST y cookie.
Sintaxis: m a g i c _ q u o t e s g p c On
Of f
Predefinido: m a g i c q u o t e s g p c On
magic_quotes_runtime
La directiva m a g i c _ q u o t e s _ r u n t i m e activa o desactiva las comillas de
los textos generados internamente. En otras palabras, si recupera un registro de
una base de datos que tiene una etiqueta del tipo <?php a n y t h i n g g o e s
h e r e ?> embebida en l, no se procesar y no se tratar como cdigo PHP el
contenido que se encuentra en el interior de las etiquetas (que forma parte de los
datos).
Sintaxis: m a g i c _ q u o t e s _ r u n t i m e On
Of f
Predefinido: m a g i c _ q u o t e s _ r u n t i m e = Of f
max_execution_time
La directiva m a x _ e x e c u t i o n _ t i m e determina el tiempo mximo que se
puede ejecutar un script para producir una salida. Una vez que el script ha tomado un tiempo determinado, PHP finaliza el script. A no ser que tenga pensado
ejecutar scripts PHP que lleven mucho tiempo, el valor por defecto debera ser
suficiente para la mayor parte de las situaciones.
Sintaxis: m a x _ e x e c u t i o n _ t i m e
seconds
Predefinido: m a x _ e x e c u t i o n _ t i m e
30
memoryjimit
La directivamemory_limit determina la cantidad mxima de RAM que un
script PHP puede consumir. El valor por defecto, 8MB, debera ser suficiente
para scripts PHP pequeos o medianos. Tambin puede especificarlo en bytes.
Sintaxis: m e m o r y ^ l i m i t b y t e s
Predefinido: memory l i m i t 8M
[nM]
output_buffering
La directiva o u t p u t _ b u f f e r i n g le permite activar o desactivar el buffering
(seleccin de datos para editarlos o procesarlos antes de llevarlos a un archivo o
bases de datos) de salidas. Cuando tiene el valor On, puede imprimir cabeceras
HTTP en cualquier parte de un script PHP. Ser capaz de sacar una cabecera en la
mitad de un script, incluso tras imprimir otro contenido, significa que un script
puede mostrar una pgina de error incluso si tuvo cierto xito anteriormente.
Sintaxis: o u t p u t _ b u f f e r i n g On
Off
Predefinido: o u t p u t _ b u f f e r i n g On
Adems, puede utilizar las directivas integradas o b _ s t a r t ( ) y
o b _ e n d _ f l u s h () para iniciar y finalizar la descarga de contenido directamente. Por ejemplo:
<?php
ob_start();
safe_mode
La directiva s a f e_mode determina el modo de seguridad para PHP cuando
se utiliza como una solucin CGI. Cuando tiene el valor On, esta directiva asegura que los scripts PHP ejecutados por el intrprete PHP en el modo CGI, no
permiten ningn acceso ms all del directorio de documentos del sitio Web.
Sintaxis: s a f e _ m o d e On
Off
Predefinido: s a f e _ m o d e Off
safe_mode_allowed_env_vars
La directiva s a f e _ m o d e _ a l l o w e d _ e n v _ v a r s le permite determinar un
prefijo para todas las variables de entorno que un usuario puede cambiar utilizan-
EH3
p r e f ix
Predefinido: s a f e _ m o d e _ a l l o w e d _ _ e n v _ v a r s
PHP_
safe_mode_protected_env_vars
La variable s a f e _ _ m o d e _ p r o t e c t e d _ e n v _ v a r s le permite determinar
una lista, delimitada por comas, de variables de entorno que no se pueden cambiar
por ningn script PHP que utilice la funcin p u t e n v () .
Sintaxis: s a f e mode p r o t e c t e d e n v _ v a r s
v a r i a b l e [ e n v i r o n m e n t _ v a r i a b l e ...]
environment_
Predefinido: s a f e _ m o d e _ p r o t e c t e d _ e n v _ v a r s = LD_LIBRARY_
PATH
Si quiere proteger todas las variables de entorno que empiecen con el prefijo
HTTP_, puede utilizar:
safe_mode_protected_env_vars = HTTP_
track_errors
La directiva t r a c k _ e r r o r s activa o desactiva el almacenaje de mensajes
de error en un variable PHP llamada $ p h p _ e r r o r m s g .
Sintaxis: t r a c k _ e r r o r s On
Of f
upload_max_filesze
La directiva u p l o a d _ m a x _ f i l e s i z e determina el tamao mximo de un
archivo que se puede descargar mediante PHP. El lmite por defecto es 2MB
(2M). Tambin puede especificar el nmero en kilobytes.
Sintaxis: u p l o a d m a x _ f i l e s i z e
kilobytes
Predefinido: u p l o a d _ m a x _ f i l e s i z e 2M
Por ejemplo, las dos lneas siguientes son equivalentes:
upload_max_filesize = 2M
upload_max_filesize = 2097152
upload_tmp_dir
La directiva l o a d _ t m p _ d i r define la localizacin temporal del directorio
para los archivos descargados mediante PHP: es habitual asignar el valor / t m p
en los sistemas Unix; en los sistemas Windows, lo normal es asignar / temp o sin
dejarlo sin asignar, en cuyo caso, PHP utiliza el valor por defecto.
Sintaxis: l o a d tmp d i r
directory
"Welcome
to
the
PHP
WorldXn";
?>
Puede ejecutar este script desde la lnea de comandos utilizando / u s r / l o c a l / b i n / p h p t e s t . php, o puede cambiar el permiso de archivo utilizando
chmod +x t e s t . p h p y ejecutndolo utilizando . / t e s t . p h p del directorio
del script. La opcin -q que se utiliza aqu le dice a PHP que suprima el contenttype de las cabeceras HTTP, que se imprime para hacer compatible la salida
Web.
ESIil
World
Seript</title>
<?php echo
?>
</body>
</html>
Seriptv/titlo
<?php
phpinfo();
?>
</body>
</html>
Esta pgina llama a una funcin PHP llamada p h p i n f o () para que muestre
una gran cantidad de opciones PHP tal y como se han configurado utilizando
php . i n i .
virtual="/path/script
ame.php"-->
Por ejemplo:
< ! --#include virtual = "/phpssi/t. est . php"-->
Aqu el script PHP llamado / p h p s s s i / t e s t , php se cargar desde la pgina que utiliza las llamadas SSI anteriores. Para que funcionen los scripts PHP
con SSI, debe hacer lo siguiente:
"/www/mysite/htdocs"
"/www/mysite/htdocs/parsed">
+Includes
AddType
text/html
.shtml
"/www/mysite/htdocs/php">
tExecCGI
<Files *.php>
SetOutputFilter PHP
SetlnputFilter PHP
</Files>
</Directory>
virtual="/php/script_name.php"-->
index.html
index.php
Sin embargo, si quiere utilizar scripts PHP como la pgina index por defecto,
entonces tiene que invertir el orden de los nombres de archivo para que la pgina
i n d e x . php se encuentre colocada antes que el resto. Por ejemplo:
Directorylndex
index.php
index.html
Resource</hl>
incluae('/www/mysite/htdocs/global/copyright.php');
?>
current
year
is:
2001
/missing.html
/missing.php
un script PHP. El listado 15.4 muestra un formulario Web sencillo que tiene un
solo campo de datos llamado k e y w o r d s .
Listado 15.4. simple_form.html
<html>
<headxtitle>Simple
</head>
HTML
Form</title>
<body>
<form action="form.php">
<input type="text" name="keywords" size=30>
<input type=submit>
</form>
</body>
</html>
Este sencillo script PHP imprime las palabras claves introducidas en el campo
keywords del formulario HTML llamado f o r m . h t m l .
Para la solicitud siguiente:
http://www.domain.com/form.php?keywords=makesite
el script imprime:
You have entered makesite as keyword(s).
ESI
method="POST">
type=submit>
</form>
</body>
</html>
1AH
-') >
<html>
< h e a d > < t i 11 e >?, t a r t Se s s i on< /1 i 11 e>
</head>
<body bgcolor="Red">
<?php echo
"You h a v e v s i t e d t h i s p a g e
Scount
time(s).";
?>
<p>
<a href="/next_page.php">Next</a>
</body>
</html>
En el listado puede ver dos scripts PHP. El primer script crea una sesin
llamando a la funcin s e s s i o n s t a r t () . Adems registra una variable de
sesin llamada c o u n t utilizando la funcin s e s s i o n _ r e g i s t e r ( ) e
incrementa la variable en uno. Observe que este script se mantiene fuera de la
etiqueta < h t m l > . Esto es necesario porque el script asigna la cookie de sesin,
que es una cabecera HTTP que debe aparecer antes que cualquier contenido. La
pgina PHP anterior, supone que tiene o u t p u t _ b u f f e r i n g con el valor Of f
en php . i n i . Esta es la asignacin por defecto porque el buffering de la salida
da lugar a que las pginas PHP sean ms lentas. Si activa el buffering de las
salidas asignando o u t p u t _ b u f f e r i n g = On en php . i n i , puede situar los
scripts PHP en cualquier posicin de la pgina.
El segundo script simplemente imprime el valor d e $ c o u n t . A continuacin,
si carga esta pgina por primera vez, utilizando un navegador Web, la funcin
s e s s i o n s t a r t () crear una nueva sesin basada en una cookie HTTP. La
cookie enviada a su navegador Web tendr atributos parecidos a los siguientes:
11:1
Cookie ame:
Domain
:
Path
:
Expires
:
Securc
:
Data
:
PHPSESSID
192.168.1.100
/
End of session
No
3de4aalf73e33dd8f2c8b8d9f69e442e
PHPSESSID
Puede cambiarlo a otro nombre si quiere. Por defecto, la cookie es vlida para
nicamente el servidor Web en s. El ejemplo de la cookie anterior muestra que el
campo de dominio de la cookie est asignado a la direccin IP del servidor Web.
Si quiere que una cookie de sesin sea vlida a lo largo de varios servidores Web
dentro de su dominio, puede asignarle a la directiva s e s s i o n . c o o k i e domain
en el archivo php . i n i , el nombre del dominio de mximo nivel de sus sitios
Web.
Por ejemplo, si tiene tres sitios Web, c o r p . domain . com, www . domain .
com y e x t r a n e t . domain . com, y le gustara que la cookie de sesin fuese
vlida para los tres sitios, puede asignarle el siguiente valor a la directiva
s e s s i o n . c o o k i e domain:
sess ion . cookie domain = .domain.com
Variables</title>
<?php
session_start();
$count++;
echo "You have visited this page $count time(s).";
?>
</body>
</html>
Cada vez que quiera utilizar una sesin actual en una pgina, debe utilizar el
mtodo s e s s i o n _ s t a r t () . Esto resulta algo complicado porque podra dar
lugar a que piense que est creando una sesin nueva. En realidad,
s e s s i o n _ s t a r t () detecta la sesin existente y la utiliza. Las variables de
sesin se vuelven disponibles una vez que ha realizado la llamada a la funcin
s e s s i o n _ s t a r t () . Observe que en esta pgina, no situamos el script antes
del contenido. En otras palabras, no situamos el script antes de la etiqueta <html>
porque no vamos a seguir editando una nueva sesin, por lo que no tenemos que
fijar una nueva cookie. Sin embargo, esto supone que tiene ya una sesin. Para
ser capaz de crear una sesin nueva sin que ya exista una, mueva el script fuera
del contenido como en la pgina s t a r t . php o active o u t p u t b u f f er i n g
en php . i n i . Adems, si ha pensado permitir la creacin de una sesin en cualquier pgina, tiene que utilizar el mtodo s e s s i o n r e g i s t e r () para registrar variables tal y como se muestra en s t a r t . php.
En cualquier pgina en la que quiera utilizar s e s s i o n _ s t a r t () para seleccionar la sesin actual, puede utilizar tambin s e s s i o n _ r e g i s t e r () para
aadir nuevas variables a la sesin de usuario.
EETl
s t a r t ();
session_register('count');
$count++;
?>
<html>
<head><title>Session
</head>
<body bgcolor="Red">
Management</title>
<P>
<?php echo "You have visited this page $count time(s)."; ?>
<P>
<a href="/next_page.php?<?=SID?>">Next
</body>
</html>
Page</a>
Observe el enlace Next Page. Cuando un usuario hace clic en este enlace, el
navegador solicita / n e x t p a g e . php y se pasa una cadena de consulta llamada P H P S E S S I D = s e s s i o n _ i d e n t i f i e r al servidor Web. Por ejemplo:
http://207.183.233.21/
next_page.php?PHPSESSID=6b2cee3152 83160 80ff88fe81f8 0 0bf8
Esto permite que el script PHP ( n e x t p a g e . php) sepa a qu sesin pertenece el usuario y que evite la utilizacin de cookies HTTP. Si quiere mantener la
sesin utilizando este mtodo, todos los enlaces de pgina PHP tienen la etiqueta
<? = SID?> adjunta a ellos; de otro modo, la sesin no estara disponible en cada
pgina PHP.
?>
<html>
<headxtitle>Simple
<body>
<table border-l>
<trxth>Name</th>
Query
S c r i p X /titlex/heai>
<th>Password</thx/tr>
<?php
$result - mysql query("SELECT * from $r.able", O d b h ) ;
while ($myRow = mysql fetch i ow ( $ resu 1 t ) ) {
print f ("<t r><td> ' s-'/tdxtd> s< /1 d ></:. r X, OmyRow [0 | ,
$myRow[1 j ) ;
}
r
? >
</table>
</body>
</html>
Query
Script</title></head>
<th>Password</thx/tr>
<trxtd>kabir</tdxtd>mysecretl</tdx/trxtrxtd>esmith</
tdxtd>sale007</tdx/tr>
</table>
</body>
</html>
8. Como puede ver, se analiza el script PHP embebido, y el usuario del lado
del cliente no sabe qu base de datos o qu usuario/ contrasea se ha
utilizado para producir esta pgina.
Si tiene muchas pginas en las que utiliza la misma base de datos MySQL para
mostrar elementos de datos utilizando varias consultas, debera utilizar la funcin
i n c l u d e () para simplificar la gestin de tareas. Por ejemplo, el listado 15.12
muestra una versin modificada del script s i m p l e _ q u e r y . php que incluye la
funcin i n c l u d e () .
Listado 15.12. simple_query2.php
<?php
include(' /usr/local/apache/secrets/mysql/header.inc');
<html>
<headxtitle>Simple
<body>
<table border=l>
<trxth>Name</th>
Query
Script</title></head>
<th>Password</thx/tr>
<?php
$sth = mysql_query("SELECT * from $table", $dbh);
while ($myRow = mysql_fetch_row($sth)) {
printf ("<trxtd>%s</tdxtd>%s</tdx/tr>", $myRow[0] ,
$myRow[1]);
)
?>
</table>
</body>
</html>
?>
$dbh);
?>
No olvide reemplazar / p a t h / t o / i n c l u d e _ f i l e s con la ruta del directorio real de los archivos i n c l u d e . Si mantiene sus archivos i n c l u d e en todo
E3
el sitio Web, puede seguir desactivando el acceso Web a ellos utilizando el siguiente segmento de configuracin en h t t p d . conf:
<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>
"Restricted Section")
query("SELECT
if
($success[0]
==
")
show challenge ( ) ;
} else {
echo
"<P>You're
authorized!</p>";
# haz algo ms
(
}
ob end flush ( ) ;
?>
$user,
$passwd) ;
mysql_select_db($database_name,
$dbh);
?>
Aqu, la base de datos MySQL llamada www est en host local, y un usuario
llamado h t t p d puede acceder a ella utilizando n o l s e c r e t como contrasea.
La base de datos www tiene una tabla llamada u s e r s . Puede cambiar estos
parmetros para conectar con la base de datos adecuada en el host local o en un
servidor de bases de datos MySQL remoto. Este archivo i n c l u d e abre una
conexin con dicha base de datos en el host apropiado y devolver un manejador de
conexiones llamado $dbh, que est disponible para a u t h . php.
En el script a u t h . php, observe esta lnea:
$sth = mysql_query("SELECT 1 from $table
WHERE username = ' $PHP_AUTH_USER' and
passwd = ,$PHP_AUTH_PW' ",
$dbh);
Esta lnea realiza una consulta SQL que devuelve un 1 si las credenciales del
usuario (almacenado en $PHP_AUTH_USER y en $PHP_AUTH_PW de forma
automtica por PHP) corresponden a los campos del nombre de usuario y contrasea, respectivamente, en la tabla ( u s e r s ) .
t\ Utilizar Perl
con Apache
En este captulo
1. Compilamos e instalamos m o d _ p e r l .
2. Ejecutamos scripts CGI mediante m o d _ p e r l .
3. Escribimos un mdulo mod p e r l .
4. Precargamos mdulos.
5. Compartimos memoria.
6. Escribimos una aplicacin de bases de datos en m o d p e r l .
El logro ms importante del proyecto de integracin de Apache y Perl fue
traer todo el poder del lenguaje de programacin Perl al servidor Apache. El
resultado fue el desarrollo de m o d _ p e r l , que puede compilar y enlazar juntos
Apache y Perl para proporcionar una interfaz Perl orientada a objetos al API del
lenguaje C del servidor. Esto le permite a los programadores de Perl, escribir
mdulos Apache en Perl. Un mdulo Apache-Perl podra funcionar durante las
fases de manejador, analizador de cabeceras, traduccin URL, autentificacin,
autorizacin, acceso, comprobacin de escritura, ajustes, registro y limpieza de
una solicitud.
local/src.
3. Cambie al directorio / u s r / l o c a l / s r c / m o d _ p e r l - v e r s i o n y ejecute:
P e r l Makefile.PL APACHE_SRC=../apache-versin
DO_HTTPD=l \
USE_APACHE=1 \
PERL_MARK_WHERE=1 \
EVERYTHING=1
/apps/
"/www/mysite/cgi-bin"
Asegrese de cambiar / w w w / m y s i t e / c g i - b i n al lugar donde est situado el directorio de scripts CGI en su sistema.
2. Dgale a Apache que cargue el mdulo A p a c h e : : R e g i s t r y durante el
arranque aadiendo la siguiente lnea en h t t p d . conf:
PerlModule
Apache::Registry
MyModule;
-le
join("\n",
@INC)'
/usr/lib/perl5/site_perl/5.6.0/i38 6-linux
/usr/lib/perl5/site_perl/5.6.0
/usr/lib/perl5/site__perl
Si utiliza una versin de Perl distinta a 5.6.0, entonces la ruta debe reflejarlo.
Cuando m o d p e r l encuentra la primera solicitud para un mdulo, busca en los
directorios para localizar el mdulo. Como no es una buena idea mezclar sus
mdulos personalizados con los mdulos estndar proporcionados con Perl y con
m o d _ p e r l , tiene que crear un directorio nuevo llamado D e v e l o p m e n t en /
u s r / l i b / p e r l 5 / s i t e _ p e r l y guardar sus mdulos personalizados en este
directorio. Esto permite a m o d _ p e r l encontrar sus mdulos personalizados en
el directorio / u s r / l i b / p e r l 5 / s i t e _ p e r l / D e v e l o p m e n t cuando se
necesitan. Adems, asegrese de asignar permisos de archivos para este directorio nuevo de modo que el usuario Apache (asignado por la directiva U s e r en
h t t p d . c o n f ) pueda leer este directorio y los archivos que se encuentran en l.
Puede utilizar los comandos siguientes para crear el directorio y asignar los permisos de archivo:
mkdir -p /usr/lib/perl5/site_perl/Development
chown -R Apache_User:Apache Group /usr/lib/per15/site perl/
Development
chmod -R 750 /usr/lib/per15/site_perl/Develpoment
package
use
Development::SimpleAPI;
strict;
MMM
1;
s e n d _ h t t p _ h e a d e r ().
El mtodo h a n d l e r () imprime un documento HTML mnimo, que muestra el P r o c e s s ID ($$) del proceso hijo de Apache y solicita un contador, utilizando la variable $ c a l l C o u n t e r . La variable $ c a l l C o u n t e r
se incrementa despus. El mtodo vuelve con un estado OK y finaliza el
proceso de la solicitud.
La lnea final 1; es necesaria para los mdulos Perl, que deben devolver
un nmero distinto de cero para reunir los requisitos de un mdulo.
Los siguientes pasos le muestran como puede ejecutar el mdulo
S i m p l e A P I . pm.
1. Primero, aada el siguiente segmento de configuracin al archivo
httpd.conf:
# Configuracin para ejecutar los mdulos mod perl
PerlModule Development::SimpleAPI
cLocation /firstone>
SetHandler perl-script
PerlHandler Development::SimpleAPI
</Location>
che/bin/apachectl
restart.
1AH:1
return OK;
}
sub method_one {
# somethig useful
t
sub method_two {
# somethig useful
(
Development::SimpleAPIUsingCGI;
use strict;
use Apache::Constants qw ( :common) ;
use CGI (-compile: all);
my $callCounter = 0;
sub handler {
my $query = new CGI;
print $query->header;
print $query->start_html('Simple Perl API Example Using CGl.pm'),
$query->hl('Simple Perl API Example Using CGl.pm Module'),
$query->hr,
$query->p("Process ID: $$"),
$query->p{"Request count: $callCounter" ) ,
$query->hr,
$query->end html;
$callCounter++;
return OK;
}
1;
l.iM'1
Iddl
Apache. Por ejemplo, si utiliza los mdulos estndar CGI, DBI y D i g e s t : :MD5
en uno o ms de sus mdulos m o d _ p e r l , puede precargar estos mdulos colocando las siguientes directivas en h t t p d . conf:
PerlModule CGI
PerlModule DBI
PerlModue Digest::MD5
/usr/local/apache/apps/startup.pl
Cada una de las lneas m o d u l e _ n a m e () utilizadas, cargan un mdulo determinado. Los parntesis vacos garantizan que esa importacin por defecto de
smbolos desde estos mdulos no se est realizando, lo que ahorra algo de memoria.
NOTA: Si utiliza todas las caractersticas del modulo CGI. pm puede aadir C G I - > c o n i p i l e (* : a i i ' ) al script s t a r t u p . p l para compilarlo, lo que ahorrar tiempo durante el proceso de solicitudes.
Adems, asegrese de que el usuario Apache (asignado utilizando la directiva
U s e r en el archivo h t t p d . c o n f ) puede acceder y ejecutar el script
s t a r t u p . pl.
los mdulos cargados y obtener mucha informacin sobre ellos. Para hacerlo,
siga los pasos siguientes:
1. Como raz, debe instalar el mdulo D e v e l : : Symdump de un sitio mirrow
CPAN utilizando este comando:
perl
-MCPAN
-e
'install
Devel:Symdump'
Apache::Status
<Location
/perl-status>
SetHandler
perl-script
PerlHandler Apache::Status
</Location>
Utilizando m o d _ p e r l con el mdulo A p a c h e : : ASP CPAN puede crear pginas ASP que embeban scripts ASP basados en Perl. A continuacin tiene cmo:
1. Como raz, ejecute el comando siguiente:
perl
-MCPAN
-e
'install
Apache::ASP'
Example</1 it le></head>
$Application->Lock();
$Application->{Count}+=l;
$Application->UnLock () ;
%>
<hl> ASP Page </hl>
<hr>
<p>
This page has been called <%=$Application->{Count}%> times.
</body>
</html>
/asp/
"/www/mysite/htdocs/asp"
<Location / a s p / >
SetHandler p e r l - s c r i p t
PerlHandler Apache::ASP
PerlSetVar Global /tmp
</Location>
lit!
NOTA: Para aprender ms cosas sobre cmo escribir scripts ASP en Perl,
visite el sitio Web ASP en www. a p a c h e - a s p . org.
Idsfcl
EQ Ejecutar
servlets de Java
y pginas JSP
con Tomcat
En este captulo
1. Instalamos JDK.
2. Instalamos Tomcat.
3. Instalamos el mdulo mod_j k para Apache.
4. Configuramos Tomcat para Apache.
5. Configuramos servlets para Apache.
6. Configuramos nuestros propios servlets o pginas JSP.
7. Configuramos Tomcat para utilizar Java Security Manager.
8. Ejecutamos servlets Java mediante Tomcat.
9. Desactivamos el servicio HTTP Tomcat.
En los ltimos aos, Java se he convertido en el lder de las plataformas de
aplicaciones Web para las necesidades de desarrollo en el mbito de empresa.
Muchas grandes compaas rechazan la idea de utilizar otra plataforma que no
sea Java. Afortunadamente, Apache puede funcionar muy bien con Java. Utilizan-
IHiVJ
Utilizar servlets
Las ventajas de ejecutar servlets con respecto a los scripts CGI, o incluso
aplicaciones m o d _ p e r l o FastCGI, son:
Los servlets son realmente independientes de plataforma y por lo tanto
muy transportables. Todas las plataformas modernas de servidores sopor-
1M:1
tan Java. Por lo tanto, desplegar servlets en una red hbrida es mucho ms
fcil que cualquier otra plataforma de aplicaciones Web.
Instalar Tomcat
Para instalar Tomcat en su servidor, tiene que tener un Java Run-time
Environment (JRE), y si ha pensado desarrollar servlets, entonces necesitar tambin el Java Development Kit (JDK). Adems, para utilizar Tomcat con Apache
necesita el mdulo mod j k. En esta seccin veremos cmo instalar estos componentes para crear un entorno Tomcat.
.-!*
1. Baje la ltima versin de JDK (es decir, SDK) del sitio Web oficial de
Java. En el momento en el que se escribi este libro, la ltima versin era
1.3 y se ofreca como un script de shell de auto extraccin que creaba un
paquete RPM bi nario. Puede bajar el j 2 s d k - l 3 0 0 2 - l i n u x rpm . b i n (o la ltima versin disponible) en un directorio.
2. Como raz, ejecute:
sh
j2sdk-version-linux-rpm.bin
j2sdk-l
02-linux-rpm.bin
Cuando este script se ejecuta muestra una licencia, que tiene que confirmar. El script desempaqueta y crea un paquete RPM llamado j 2 s d k v e r s i o n - 1 i n u x . rpm (para JDK 1.3 es j 2 s d k - 1 _ _ 3 _ 0 _ 0 2 l i n u x . rpm).
3. Ejecute rpm - i v h j 2 s d k - v e r s i o n - l i n u x . rpm para instalar el
JDK. Por ejemplo, para instalar el JDK 1.3, ejecute el comando rpm ivh
j2sdk-l_3_0_02-linux.rpm.
4. El JDK se instala en el directorio / u s r / j a v a / j d k v e r s i o n . Por ejemplo, el 1.3 JDK est instalado en el directorio / u s r / j a v a /
j d k l . 3 . 0_0 2. Este es el directorio JAVA_HOME. Debera establecer
una variable de entorno llamada $ JAVA_HOME para sealar a este directorio. Si utiliza el shell b a s h , puede asignarlo en su archivo ~/ . b a s h r c
del siguiente modo:
export
JAVA HOME=/usr/java/jdkversion
Por ejemplo:
export
JAVA_HOME=/usr/java/jdkl.3.0_02
PATH=$(PATH}:${JAVA_HOME}/bin
Esta lnea debe seguir la lnea JAVA HOME discutida en el ltimo paso.
-versin.
TOMCAT_HOME=/var/tomcat
Configurar Tomcat
En esta seccin veremos cmo se configura Tomcat para Apache y cmo gestionar seguridad para Tomcat utilizando la herramienta Java Security Manager.
workers.tomcat_home = c : \ j a k a r t a - t o m c a t
w o r k e r s . j ava_home = c : \ j d k l . 2 . 2
ps = \
worker.Iist = ajpl2 , ajpl3
worker.ajpl2.port=8007
worker.ajpl2.host=localhost
worker.ajpl2.type=ajpl2
worker.ajpl2.lbfactor=l
worker.ajpl3.port=8009
worker.ajpl3.host=localhost
worker.ajpl3.type=ajpl3
worker.ajpl3.lbfactor=l
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers = ajpl2 , ajpl 3
worker.inprocess.type=jni
worker.inprocess.class_path=$(workers.tomcat_horne)$(ps)class
worker.inprocess.class_path=$(workers.tomcat_horne)$(ps)
lib$ (ps)j axp.j ar
worker.inprocess.class path = $ (workers.tomcat_home)$(ps)
lib$(ps)parser.jar
worker.inprocess.class_path=$(workers.tomcat_horne)$(ps)lib$
(ps)j asper.j ar
worker.inprocess.class_path=$(workers.tomcat_horne)$(ps)lib$
(ps)servlet.j ar
worker.inprocess.class path=$(workers.tomcat home)$(ps)lib$
(ps)webserver.jar
worker.inprocess.class_path = $(workers.j ava_home)$(ps)lib$
(ps)tools.jar
worker.inprocess.cmd_line=-config
worker.inprocess.cmd_line=$(workers.tomcat_home)/conf/
jni^server.xml
worker.inprocess.cmd_line=-home
worker.inprocess.cmd_line=$(workers.tomcat_home)
worker.inprocess.jvm_lib=$(workers.java_home)5(ps)jre$(ps)bi
(ps)classic$(ps)jvm.dll
worker.inprocess.stdout = $(workers.tomcat home)$ (ps)
inprocess.stdout
worker.inprocess.stderr=$(workers.tomcat_home)$(ps)
inprocess.stderr
worker.inprocess.sysprops = tomcat.home = $ (workers.tomcat home)
Descripcin
ajp12
Este worker utiliza el protocolo ajpv12 para dirigir solicitudes a workers Tomcat fuera de proceso que estn utilizando el protocolo ajpv12.
ajp13
Este worker utiliza el protocolo ajpv13 para dirigir solicitudes a workers Tomcat fuera de proceso que estn utilizando el protocolo ajpvl 2. Como ajpvl 3 es un protocolo
ms nuevo que ajpv12, el tipo ajp13 de worker puede
alcanzar mayor rendimiento que el worker ajp12. Adems, ajp13 ofrece soporte SSL.
jm
Ib
La siguiente lnea le dice a Tomcat qu separador utilizar para separar elementos de directorio. El valor por defecto \ funciona en los sistemas Windows, porque
los nombres de directorios en las plataformas Windows se separan utilizando \.
En los sistemas UNIX, debera ser /. Por eso, asigne esta lnea como se muestra a
continuacin:
ps = /
La primera lnea asigna el nmero de puerto, que utiliza el worker ajp 12 para
escuchar solicitudes; la segunda define el nombre del host en el que este worker
est escuchando conexiones y la tercera define el tipo de worker. Considero una
decisin equivocada nombrar al worker como ajp 12, ya que tambin es del tipo
ajp 12. Puede nombrar un worker como quiera siempre que consista en letras y
nmeros.
La cuarta lnea le dice al worker cul es la carga media para propsitos de
equilibrio de carga. Un nmero alto indica una mquina potente y cuando hay
muchas mquinas implicadas en un escenario de equilibrio de carga, ser el worker
del equilibrio de carga el que elija el worker, el cual tendr el mayor lbfactor.
En las siguientes cuatro lneas se definen las mismas propiedades para el worker
ajp 13 en el archivo w o r k e r s . p r o p e r t i e s .
Las siguientes dos lneas definen un worker llamado l o a d b a l a n c e r , que es
del tipo Ib y el cual equilibra los workers ajp 12 y ajp 13 utilizando un esquema de
retorno al punto de origen. Estas dos lneas son:
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers = ajpl2, a jpl3
Las siguientes seis lneas aaden seis archivos de libreras a la ruta class:
worker.inprocess.class_path=$(workers.torneat_horne)$(ps)1ib$
(ps)jaxp.jar
WflM
worker.inprocess.class_path=$(workers.torneat_home)$(ps)lib$
(ps)parser . j ar
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$
(ps)j asper.j ar
worker.inprocess.class_path=$(workers.tomcat home)$(ps)lib$
(ps)servlet.j ar
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$
(ps)webserver.jar
worker.inprocess.class_path=$(workers.j ava_home)$(ps)lib$
(ps)tools.jar
Las siguientes cuatro lneas definen un conjunto de opciones de lnea de comando para el worker i n p r o c e s s :
worker.inprocess.cmd line=-config
worker.inprocess.cmd_line=$ (workers.tomcat h o m e ) / c o n f /
j ni server.xml
worker.inprocess.cmd_line=-home
worker.inprocess.cmd_line=$(workers.tomcat home)
home)$(ps)jre$(ps)lib$
Las siguientes dos lneas definen los nombres de archivo que se estn utilizando para escribir el STDOUT y el STDERR para el worker i n p r o c e s s :
worker.inprocess.stdout=$(workers.tomcat_home)$(ps)
inprocess.stdout
worker.inprocess.stderr=$(workers.tomcat_horne)$(ps)
inprocess.stderr
WrlM
La lnea final define una propiedad del sistema para el worker inprocess. La
propiedad por defecto asignada por la siguiente lnea es tomcat.home con el valor
/ v a r / t o m c a t en Linux:
worker.inprocess.sysprops=tomcat.home=$(workers.tomeatinme)
Significado
java.til.PropertyPermission
java.lang.RuntimePermission
java.io.FilePermission
java.net.SocketPermission
java.net.NetPermission
java.lang.reflect.ReflectPermission
java.security.SecurityPermission
java.security. AllPermission
action list]]
Por defecto, Java Security Manager est desactivado para Tomcat. Debe activarlo del siguiente modo:
1. En el archivo / v a r / t o m c a t / c o n f / s e r v e r . xml debe encontrar lo
siguiente:
<!-- Uncomment out if you have JDK1.2 and want to use policy
<ContextInterceptor
className="org.apache.tomcat.context.PolicyInterceptor"
/>
/>
W5IM
/var/tomcat/conf/mod jk.conf-auto
En lugar de dirigirlo al archivo / v a r / t o m c a t / c o n f / m o d _ j k . c o n f a u t o utilizando la directiva I n c l u d e , puede copiar este archivo con
otro nombre (por ejemplo, mod_j k . con f) y utilizar:
Include
/var/tomcat/conf/mod_jk.conf
jk_module
/usr/lib/apache/mod_jk.so
La directiva LoadModule carga el mdulo DSOmod_j k . so que le permite a Apache interaccionar con Tomcat.
JkWorkersFile
/var/tomcat/conf/workers.properties
/var/tomcat/logs/mod jk.log
error
La lnea anterior asigna el nivel de registro para los errores registrados en los
archivos de registro. Los niveles posibles de registro son d e b u g , warn, e r r o r
y emerg, pero warn debera ser su eleccin por defecto.
JkMount /*.jsp ajpl2
JkMount /servlet/* ajpl2
<Location
"/examples/META-INF/">
AllowOverride None
deny from all
</Location>
/admin/servlet/* ajpl2
/admin/*.jsp ajpl2
<Location
"/admin/WEB-INF/">
AllowOverride None
deny from all
</Location>
<Location " /admin/META-INF/ ">
AllowOverride None
deny from all
</Location>
/test/servlet/* ajpl2
/test/*.jsp ajpl2
<Location "/test/WEB-INF/">
AllowOverride None
deny from all
</Location>
<Location " /test/META-INF/">
AllowOverride None
deny from all
</Location>
1A8I
Con este usuario, puede ver los contextos mediante la interfaz Web si activa
t r u s t e d = t r u e para el contexto admin como se muestra a continuacin:
<Context path-"/admin"
docBase="webapps/admin"
crossContext-"true"
debug="0"
reloadable="true"
trusted="tru" >
</Context>
La configuracin por defecto del contexto admin, tiene el atributo trusted con
el valor false. Si le asigna el valor true para poder crear, eliminar o ver contextos
mediante la interfaz Web, debe reiniciar Tomcat para que los cambios tengan
efecto. Adems observe que nunca debe dejar el atributo trusted con el valor true
despus de usarlo. Dejando esta asignacin en trusted, tendr su servidor abierto
a grandes riesgos de seguridad. Por ejemplo, cuando el contexto admin es de
confianza (asignando t r u s t e d = " t r u e " ) puede crear un contexto mediante
h t t p : / / y o u r _ s e r v e r _ h o s t n a m e / a d m i n que expone a la Web su sistema completo de archivos.
Para aprovecharse de esto, el intruso necesita que un sistema Tomcat con
contexto admin, est asignado a trusted y que el archivo XML de texto / v a r /
t o m c a t / c o n f / t o m c a t - u s e r s . xml tenga un nombre de usuario y una contrasea admin. El mejor modo de enfrentarse a todo esto es eliminar completamente el contexto admin, o al menos asegurarse de que lo ha asignado para que
no sea de confianza (es decir, t r u s t e d = " f a l s e " ) .
E3
JAVA_HOME=/usr/java/jdk$VERSION
PATH=${PATH}:${JAVA_HOME}/bin
TOMCAT_HOME=/var/tomcat
/usr/bin/tomcat $1
#
fin
PATH=$PATH:/opt/IBMJava2-13/bin:/opt/IBMJava2-13/jre/bin
JAVA_HOME=/opt/IBMJava2-13
Estas parecen ser las asignaciones del propio desarrollo RPM. Si sigui mis
instrucciones anteriores para bajar el JDK desde el sitio Web de Sun Microsystems,
su ruta de instalacin para el JDK ser distinta. De modo que asegrese de modificar estas dos asignaciones en el script / e t c / r c . d / i n i t . d / t o m c a t . Por
ejemplo, los valores correctos son:
export PATH=$PATH:/usr/java/jdkl.3.0_02/bin:/usr/java/
jdkl . 3.0__02/jre/bin
export JAVA_HOME=/usr/java/jdkl.3.0_02
lAU
firchivo
j Q Atrs
Edidn
-
J)
Ver
favoritos
j]
l ; ,
Herramientas
Bsqueda
Ayuda
Favoritos
_T.
j> Mutmedia
$<
Tomcat
Versin 3.2.1
</path/to/tomcat>/webpages/ndex.html
Included within ttiis relase are fnconal examples with associated source code,
API documentation for servlets and JSP, a R E A D M E , a techmcal FAQ on this
relase and an assortment of j a r files which are pre-requisites for connued
development of web technologies including JSP and Servlets
Examples
* JSP Examples
Servlet Examples
Documentation
jj-
] Internet
bgcolor="white">
Todos los
class = 'dates.JspCalendar'
<font size=4>
<ul>
<li>
Day of month: is
<jsp:getProperty name="clock"
property="dayOfMonth"/>
<li>
Year: is
<jsp:getProperty name="clock"
property="year"/>
<li>
Month: is
<jsp:getProperty name="clock"
property="month"/>
<]i>
Time: is
<jsp:getProperty name^"clock"
property = "time"/>
<li>
Date: is
<jsp:getProperty name="clock"
property="date"/>
<li>
Day: is
<jsp:getProperty name-"clock" property~"day"/>
<li>
Day Of Year: is
<jsp:getProperty name="clock"
property="dayOfYear"/>
<li>
Week Of Year: is
<jsp:getProperty name="clock"
property="weekOfYear"/>
<li>
era: is
<jsp:getProperty namc-"clock" property="era"/>
<li>
DST Offset: is
<jsp:getProperty name="clock"
property="DSTOffset"/>
<li>
Zone Offset: is
<jsp:getProperty name="clock"
property="zoneOffset"/>
</ul>
</f ont>
</body>
</html>
-I Microsoft Internet Explorer
A/chivo
(fcin
1er
j ^ Atrs * j - __K]
2j
^Jfl|xj
Bfc<v
Favoritos
: t,-
Herramientas
Ayyda
Bsqueda
~3
Direccin } http:/,f|ncalhost/exampies/jsp/ndex.htrnl
Nurnberguess
Execute
Date
i Execute
Snoop
i Ere cute
ErrorPage
Execute
Carts
Execute
Checkbox
Ejecute
Color
Calendar
Include
%
%
%
|QI
Execute
Execute
Execute
Forward
"W Execute
Plnoin
^ 1 Pvprntp
S
S
zJ
Internet
W5TM
-lalxi
j
Archivo
Bidn
Yer
favoritos
1^1
Herramientas
j i
>
Ayyda
Bsqueda
Vnculos "*
j Direccin | ^ ) http://localhost/examples/jsp/dates/da^J CJ Ir
Day of month: is 15
Year: is 2001
Month: is May
Time: is 16:48:24
Date: is 5/15/2001
Day: is Tuesday
Day Of Year: is 135
Week Of Year: is 20
era: is 1
DST Offset: is 1
Zone Offset: is -8
il
//.
: # Internet
Puede ver que el cdigo JSP est embebido en HTML utilizando las etiquetas
<jsp:getProperty name="name" property="property ame""/
>.
Si vuelve al inicio de la pgina y hace clic en el enlace Servlet Examples ver
una pgina como la que se muestra en la figura 17.4.
I Microsoft I n t e r n e t Explorer
Archivo
QAtrs
Edfcin
jer
, l n l x|
Favoritos
- J - d
:l\
Herramientas
Bsqueda
Ayuda
Favoritos
* j f Mukimeda
f*
Ifl'
Diresdn t] http://207.183.233.21
demo.
Helio World
Ejecute
Request Info
Request Headers
E::ecute
Request Parameters
*j|Exeaite
Cookies
*%|Execute
Sessions
*V|Ezecute
A
A
A
A
A
Note' The source code for these examples does not contain all of the source code
that is actually n the example, only the important secons of code Code not
important to understand the example has been removed for clanty
zl
W
j t f Internet
Haga clic en el enlace Execute para el servlet Helio World y ver la pgina de
la figura 17.5.
^^^^^^
firchtvo
Edicin
Ver
Eavoritos
>!:. JT
tjBrramlentas
Bsqueda
BW^'**'.
jJDlxl
dH
Ir
Ayuda
, , Favonios
<* MuUmda
>
L>
A l J "
<fo^
Helio World!
l 1 1 !
Internet
|dd6n
Ver
favoritos
O Atrs - J - ) |
Herramientas
Bsqueda
A)vla
Favoritos
J MuMmeda
<J
HHj
Zl
ir
I Internet
E3
/myapp
"/var/tomcat/webapps/myapp"
<Directory
"/var/tomcat/webapps/myapp">
O p t i o n s I n d e x e s FollowSymLinks
</Directory>
JkMount
JkMount
/myapp/servlet/* ajp!2
/myapp/*.jsp ajpl2
Parte IV
Asegurar
su sitio Web
E3
in Seguridad
Web
En este captulo
1. Entendemos el concepto de seguridad Web.
2. Conocemos los puntos de control de seguridad.
3. Elegimos una poltica de seguridad administrativa.
4. Reconocemos y minimizamos los riesgos de seguridad en CGI y en SSL
5. Protegemos su contenido Web.
Los administradores novatos no son lo suficientemente conscientes de la necesidad de seguridad. Muchos administradores no piensan en la seguridad hasta que
no tiene lugar un problema en ese sentido, y entonces es demasiado tarde. Este
captulo proporciona una idea de los riesgos ocultos que convierten el tema de
seguridad en algo realmente importante.
E3
lAIil
mente servan pginas HTML estticas, que eran menos propensas a los riesgos
de seguridad. El nico modo en el que un intruso poda piratear en ese tipo de
sitios Web era forzando el servidor con un acceso ilegal. Esto se llevaba a cabo
normalmente utilizando una contrasea ambigua o engaando a otro software
(servidor) demonio. Sin embargo, la mayora de los sitios Web no sirven pginas
HTML estticas; sirven contenido dinmico, normalmente personalizado, para
proporcionar una grata experiencia al usuario. Muchos sitios Web estn ligados a
aplicaciones para proporcionar servicios de calidad al cliente o para realizar actividades de comercio electrnico. Aqu es donde los riesgos empiezan a aumentar.
Las aplicaciones Web son el corazn de los problemas de seguridad en la Web. La
mayora de los sitios Web que han sido atacados por vndalos, no tuvieron problemas con el software del servidor Web. Fueron pirateados debido a uno o ms
agujeros en la aplicacin o en el script que ejecutaba el servidor Web.
Hay varios puntos de control que tiene que revisar para mejorar la seguridad
de su servidor Web pblico. La figura 18.1 muestra el diagrama general de puntos de control. Este diagrama identifica los puntos de control de seguridad que se
deben examinar cuidadosamente antes de considerar segura una red conectada
con Internet.
Hay tres puntos principales de control:
Su red: este es el punto de control que tiene que ser ms estricto, ya que se
trata de un punto de entrada principal. Su red conecta con Internet mediante un router, un sistema firewall o un servidor gateway. Por lo tanto, su red
es un punto de control principal. Su primera preocupacin debera ser
asegurar su red.
Internet
Red
Host del servidor Web
Sistema operativo
Servidor Web
CGI
SSI
Contenido
lifefcl
HA*T^|
Su red
Hostl
HostN
A
>k
TCP/IP
>r
TCP/IP
TCP/IP
Router
HUB
TCP/IP
Y
Servidor Web
lAkl
en la mquina de su servidor Web, enel que se ejecuta ese sistema operativo (OS). Por ejemplo, si no necesita los servicios de correo SMTP/POP o
los servicios FTP, desactvelos o elimnelos completamente de su sistema.
Si no necesita alguna de las utilidades del sistema, elimnelas. Asegrese de
que su servidorWeb es slo un servidor Web y que slo tiene los servicios
que necesita.
Puede leer sobre las vulnerabilidades que existen en su plataforma operativa,
navegando en www . c e r t . o r g . CERT (Computer Emergency Response Team)
que trabaja con la comunidad de Internet para facilitar conocimientos y respuestas a las cuestiones de seguridad. La organizacin tambin dirige investigaciones
enfocadas a la mejora de la seguridad de los sistemas de computadores.
l=M'l
IdiE!
programas funcionan de forma normal en apariencia, pero incluyen puertas de atrs para los intrusos. Los vndalos tambin modifican archivos de
registro para eliminar las pistas de sus actividades. Incluso crean nuevos
archivos en su sistema.
Para evitarlo, por lo tanto, es una buena idea comparar los atributos y los
contenidos de los archivos y de los directorios con la copia completa. Si ha
creado sumas de comprobaciones criptogrficas para los archivos, puede
comparar estas sumas entre las copias actual y completa, para determinar
si existe alguna diferencia. Debera buscaren Tripwire, en www. t r i p w i r e
. com, para obtener detalles sobre el modo de mantener el contenido a
salvo utilizando sumas de comprobacin.
Utilice MD5 para comprobar la integridad del contenido de los archivos: el programa MD5 genera un nico valor de 128 bits para la digestin
del mensaje criptogrfico derivado del contenido de un archivo. Este valor
se considera una huella digital realmente fiable, que se puede utilizar para
comprobar la integridad del contenido del archivo. Slo con que est modificado el valor de un solo bit, la suma de comprobacin MD5 cambiar
para este archivo. Es muy difcil falsificar un archivo de modo que el MD5
produzca el mismo resultado que en el archivo original. Un conjunto de
sumas de comprobacin MD5 para sistemas, aplicaciones y archivos de
datos proporciona un modo conciso de almacenar informacin para utilizarla en comprobaciones peridicas de integridad de estos archivos. Si hay
algn cambio que no se pueda atribuir a actividades autorizadas, debera
pensar que su sistema est comprometido y debera tomar las medidas
necesarias. En el caso de que los cambios sean razonables, vuelva a realizar una copia completa y a realizar las sumas de comprobacin.
Idifcl
preocuparse por las directivas U s e r y Group. Si ejecuta Apache como un servicio independiente, tiene que crear un usuario y un grupo especializados para
Apache.
No utilice el usuario n o b o d y o el grupo n o g r o u p , sobre todo si su sistema
ya los ha definido. Es probable que existan otros servicios u otros sitios en los que
su sistema los est utilizando. Esto podra derivar en grandes quebraderos de
cabeza para el administrador. Tiene que crear un nuevo usuario un nuevo grupo
para Apache, y utilizarlos con las directivas mencionadas.
Cuando utiliza un usuario y un grupo especializados para Apache, la administracin especfica de permisos para su contenido Web resulta ms sencilla. Todo
lo que necesita, es crear un directorio en el que algunos script CGI puedan escribir datos, tiene que escribir permisos slo para el usuario Apache.
/
I
I
+
I
I
I
home
I
+
httpd
WWW
I
I
I
I
|
+
I
+
+
(ServerRoot)
htdocs
(DocumentRoot)
cgi-bin
(ScriptAlias)
logs
La estructura de directorios anterior es segura en muchos sentidos. Para entender por qu, observe primero la configuracin de Apache en h t t p d . c o n f para
la estructura de directorio anterior.
ServerRoot
DocumentRoot
ScriptAlias
CustomLog
ErrorLog
" /home/httpd"
"/www/htdocs"
/cgi-bin/
"/www/cgi-bin/"
/www/logs/access.log common
/www/logs/error.log
webteam
ES3
3. Cambie el propietario de todas las directivas DocumentRoot (y de todos los subdirectorios bajo l):
chown -R httpd.webteam /www/htdocs
Este comando determina que el propietario del directorio sea Apache (es
decir, el usuario h t t p d ) y el propietario del grupo sea webteam, que
incluye el usuario h t m l g u r u . En otras palabras, tanto Apache como
h t m l g u r u tendrn acceso al rbol de documentos.
4. Cambie el permiso del directorio D o c u m e n t R o o t (y de todos sus
subdirectorios) del siguiente modo:
chmod -R 2570
/www/htdocs
Este comando garantiza que el usuario Apache puede leer y ejecutar los
archivos y los subdirectorios bajo el DocumentRoot y que el grupo
webteam puede leer, escribir y ejecutarlo todo. Adems garantiza que
cada vez que se crea un nuevo archivo o directorio en el rbol de documentos, el grupo webteam podr acceder a l.
La gran ventaja de este mtodo es que aadir nuevos usuarios a webteam es
tan fcil como ejecutar el comando siguiente:
usermod -G webteam new_username
Del mismo modo, si quiere eliminar un usuario existente del grupo webteam,
simplemente ejecute:
usermod -G username [groupl,group2 , group3, . . . ]
TRUCO: Puede averiguar a qu grupo o grupos pertenece un usuario ejecutando el comando group username.
El directorio especificado por S c r i p t A l i a s debera ser accesible nicamente a los desarroUadores de CGI y al usuario Apache, que se ha especificado
utilizando la directiva U s e r en h t t p d . conf. Le recomiendo que cree un nuevo grupo llamado webdev para el desarrollador o los desarroUadores. Aunque el
grupo del desarrollador (como webdev) necesite acceso de lectura, escritura y
ejecucin para el directorio, el usuario Apache slo necesita acceso de lectura y
ejecucin. No permita que el usuario Apache escriba archivos en este directorio.
/cgi-bin/
"/www/cgi-bin/"
IMJ
Si puede leer este archivo en el directorio solicitado, se muestra el contenido del archivo. En el caso de que no exista ese tipo de archivo, Apache
comprueba si puede crear una lista dinmica para el directorio. Si est
permitida la creacin de una lista dinmica, la crea y muestra el contenido
del directorio al usuario.
Como una lista de directorios generada por Apache dinmicamente, puede
proporcionar pistas sobre la estructura de su directorio, no debera permitir este
tipo de listas. El modo ms fcil de evitarlas es crear un archivo con el nombre de
archivo especificado en la directiva D i r e c t o r y l n d e x . Por ejemplo, si tiene
la siguiente directiva D i r e c t o r y l n d e x :
Directorylndex
index.html
index.htm
index.html
ES3
if
($curDir ne V ) {
print redirect($AUTO_REDIRECT_URL);
Este script se ejecuta cuando Apache falla la bsqueda de los archivos index
( i n d e x . h t m l o i n d e x . htm) en los directorios. El script simplemente redirige
un usuario, cuya URL se dirige a un directorio que no tiene archivo index, a la
pgina de inicio del sitio Web.
Cambie / c g i - b i n / desde la ruta de la directiva anterior si utiliza un alias
distinto. Si no quiere mostrar ninguna lista de directorios, puede simplemente
desactivarlas con la siguiente configuracin:
<Directory />
Options -Indexes
</Directory >
Mtfcl
Esto desactiva los accesos. Ahora, si tiene que permitir el acceso a un directorio en concreto, utilice el contenedor < D i r e c t o r y . . . > de nuevo, para
abrir ese directorio. Por ejemplo, si quiere permitir el acceso a / w w w / h t d o c s ,
aada la configuracin siguiente:
<Directory "/www/htdocs">
Order deny,allow
Allow from all
</Di rectory>
Este mtodo, que consiste en abrir nicamente lo que necesita, es una medida
preventiva de seguridad y la recomiendo encarecidamente. Adems, no debera
permitir a los usuarios cambiar las opciones de configuracin de ningn directorio utilizando el archivo de configuracin del nivel de directorios (. h t a c c e s s )
en directorios abiertos al acceso.
None
EII
del cordero
<
Servidor Web
TCP/IP
Firewall
>'
HUB
_J
>'
TCP/IP
Hostl
...
HostN
LAN interna
Figura 18.3. Configuracin del "cordero del sacrificio"
El intruso no puede alcanzar host internos, ni obtener informacin detallada sobre ellos.
La configuracin del "cordero del sacrificio" protege contra esos dos tipos de
sucesos y mantiene el servidor Web aislado de la red externa y de su trfico.
TRUCO: En esta configuracin, es sabio desactivar el enrutamiento de
fuente del router. De este modo, no se puede utilizar el host del servidor
Web para dirigir paquetes a los hosts de la red interna.
ADVERTENCIA: Algunas personas prefieren situar el servidor Web detrs del firewall. En esta configuracin, el firewall se convierte en el puente
para la LAN interna y para el trfico Web, y la configuracin del firewall
se hace ms compleja. Considero que esta complejidad puede dar lugar a
agujeros de seguridad en el firewall, con el consiguiente fracaso de su propsito.
La configuracin paranoica
Esta configuracin es para los administradores Apache que estn paranoicos
respecto a la seguridad. Es la configuracin ms restrictiva de todas las configu-
IM1
No permite informacin de estado mediante la Web. Apache proporciona un mdulo de estado que ofrece valiosa informacin de estado sobre el
servidor mediante la Web. Esta informacin puede dar pistas a los intrusos
si tienen acceso a ella. La configuracin paranoica se asegura de no permitir el acceso a este tipo de informacin careciendo de este mdulo.
La configuracin paranoica se puede alcanzar utilizando el siguiente comando:
./configure --prefix=/home/apache \
--disable-module=include \
--disable-module=cgi \
--disable-module=userdir \
--disable-module=status
Cualquier archivo temporal creado por los generadores de contenido dinmico, como aplicaciones CGI, deberan residir en un nico subdirectorio
en el que tengan acceso de escritura los generadores. Este directorio debe
mantenerse fuera del rea de contenido para garantizar que un error en la
aplicacin no destruya de manera equivocada ningn archivo de contenido.
En otras palabras, no tenga un directorio en el que pueda escribir el servidor Web dentro de su rbol de documentos. Esto garantiza que un error en
el script no escribir accidentalmente sobre un archivo del rbol de documentos.
KH
po, sera intil utilizar un robot que est tratando de indexar pginas HTML para
un gran archivo de imgenes bitmap. Servir estos archivos al robot supone un uso
innecesario de recursos tanto de su servidor como de su robot.
El actual protocolo Robot Exclusin es voluntario, y su etiqueta est evolucionando para los desabolladores de robots a medida que se obtiene experiencia en
el desarrollo de estos robots. El protocolo soporta la mayora de los buscadores
ms conocidos.
Cuando un robot visita un sitio llamado www. s o m e s i t e . com, primero comprueba la existencia de l a U R L h t t p : //www. s o m e s i t e . c o m / r o b o t s . t x t .
Si esta URL existe, el robot analiza su contenido buscando directivas que
instruyan al robot sobre el modo de indexar el sitio. Como administrador Web,
puede crear directivas que tengan sentido para su sitio. Observe que slo puede
haber un / r o b o t s . t x t en un sitio. Este archivo contiene registros que seran
del siguiente tipo:
User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /~sam/
La primera directiva, U s e r - a g e n t , le dice al robot que las siguientes directivas deberan ser consideradas por cualquier robot. Las siguientes tres directivas, D i s a l l o w , le dicen al robot que no acceda a los directorios mencionados es
estas directivas. Observe que tiene que separar la lnea D i s a l l o w de cada prefijo URL que quiera excluir, es decir, no puede utilizar lo siguiente:
Disallow: /cgi-bin/ /tmp/ /~sam/
/tmp/*
Disallow:
*.gif
MU
Registro y seguridad
Los buenos administradores Web controlan cuidadosamente el registro en sus
servidores, lo que proporciona pistas sobre patrones de acceso inusuales. En esta
seccin veremos el modo de proteger sus archivos de registro de accesos no auto-
E3
rizados y tambin lo que hay que hacer cuando detecta accesos inusuales en sus
archivos de registro.
ADVERTENCIA: Los registros son muy tiles, pero ti s vndalos {Hieden modificarlos, se vuelven intiles; Por l o l t a f l t o ^ t f a e ^ ^ i ^ ^ t e j
sus archivos. Le recoitiiendo fikttteftrlbS tt^^^t^^^i dO?piitps
particin, en la que k ^ t t t e ^ g < * C c & J ^ ^ ^
los cambios necesarios,:, ,-. . .; ....':.-,'.,'" ..^;O^C^|^vo^V s /':"
CustomLog y ErrorLog
Utilizando las directivas CustomLog y E r r o r L o g (que se describen en el
captulo 8), Apache le permite registrar solicitudes de acceso que han tenido xito
y solicitudes de acceso que han dado lugar a un error, en archivos de registro
separados.
Por ejemplo:
CustomLog /logs/access.log
ErrorLog /logs/error.log
common
/logs
E31
/ext/
"/some/path/to/cgi/scripts/"
Reemplace 192.168.1.100 con la direccin IPdel vndalo. Esta configuracin ejecutar su script como siempre para cualquier usuario excepto para
el usuario con la direccin IP que se ha metido en la directiva Deny. Sin
embargo, si la direccin IP del vndalo utiliza asignacin dinmica de
direcciones IP para sus clientes, entonces bloquear la direccin IP en cuestin no ser efectivo porque el vndalo puede volver con una direccin IP
distinta. En ese caso, considere bloquear la red IP completa. Por ejemplo,
si la ISP utiliza la red 192.168.1.0, eliminamos el .100 de la directiva
Deny de la lnea, para bloquear la ISP completa. Esta medida es una
medida drstica y podra bloquear a muchos usuarios inocentes de la ISP.
Tenga cuidado cuando considere si bloquea o no a toda una ISP.
8. Espere unos cuantos das la respuesta de la ISP. Si no recibe respuesta,
trate de contactar con ellos mediante su sitio Web. Si el problema persiste,
contacte con su departamento legal para determinar qu acciones legales
se pueden tomar para exigir una accin por parte de la ISP.
En
N01Afcl^^
se utilizan indistinta-
1;VU
La llamada al sistema ejecuta el programa de correo / b i n / m a i l y le suministra el valor de la variable $ s u b j e c t como Asunto: cabecera, el valor de la
variable S e m a i l A d d r e s s como la direccin de correo electrnico del usuario,
y redirige el contenido de dicho archivo en la variable $thankYouMsg. Esto
funciona correctamente y nadie debera saber, normalmente, que su aplicacin
utiliza este tipo de llamadas al sistema. Sin embargo los vndalos siempre estn
intentando estropear las cosas, de modo que si estn interesados en introducirse
en su sitio Web podran intentar introducir valores irregulares en su formulario
Web. Por ejemplo, si un vndalo introduce v a n d a l @ e m a i l a d d r < / e t c /
p a s s w d ; como direccin de correo, engaar al script mandando el archivo /
e t c / p a s s w d a la direccin de correo especificada por el vndalo.
TRUCO: Si utiliza la funcin s y s t e m () en su scriptCG, debera utilizar la opcin -T en la lnea #! / p a t h / t o / p e r l para activar el modo de
comprobacin de corrupcin de Perl. Debera asigngr tambin el PATH
(variable de entorno) utiliapand<>|aasigncijn$Bj$t$$pW) . * / p a t h /
t o / c o m m a n d s / y o u / c a i l / v i a / s y s V e ^ * ; pW'umear la seguridad.
; ''"'- ': > *::
mi
#!/usr/bin/perl -w
#
# Propsito: demostrar los riesgos asociados a
# un script CGI mal escrito.
#
# Obtiene el nombre del dominio desde la cadena de consulta
# de la variable de entorno.
#
my $domain = $ENV{ VQUERY_STRING');
# Imprime el content type apropiado.
# Como la salida whois es todo texto,
# decidimos utilizar text/plain como content-type.
#
print "Content-type: text/plain\n\n";
# A continuacin tenemos la llamada errnea al sistema:
system("/usr/bin/whois $domain");
#
#
#
#
#
#
e x i t 0;
value="dataValue">
Por ejemplo:
<input type=hidden name="state" value="CA">
Aqu las etiquetas ocultas almacenan " s t a t e = C A , " que se puede recuperar
con la misma aplicacin en una llamada posterior. Las etiquetas ocultas suelen
encontrarse en aplicaciones Web de varias pantallas. Como el usuario puede cambiar manualmente las etiquetas ocultas, no deberan revelarse. Hay dos modos de
protegerse contra la alteracin de datos: el desarrollador puede comprobar el dato
oculto despus de cada uso, o el desarrollador puede utilizar un esquema de seguridad para garantizar que el dato no ha sido alterado por el usuario. El script CGI
que se muestra en el listado 18.2, contempla la utilizacin del algoritmo MD5 de
digestin de mensajes RSA Data Security para proteger los datos.
NOTA: Los detalles sobre el algoritmo MD5 estn definidos en RFC 1321.
liVJtl
use strict;
use CGI qw(:standard);
use Digest::MD5;
my $query = new CGI;
# Llama a la subrutina handler para procesar los datos del usuario
Shandler;
# Termina
exit 0;
sub handler{
#
# Propsito: determinar qu pantalla se muestra
#
y llamar a la subrutina apropiada para
#
desplegarla.
#
#
#
#
#
my $name
my $err,ail
= param('ame');
= param ( 'emai 1' ) ;
sub screenl(
#
# Propsito: imprimir un formulario HTML que le pida a
# usuario que introduzca su nombre.
#
print h2("Screen 1"),
hr({-size=>0,-color = >'black' } ),
start form,
'Enter ame: ',
textfield(-ame => 'ame', -size=>30),
submit(-valu => ' Next ') ,
end form;
sub screen2{
#
# Propsito: imprimir un formulario HTML que le pida a
# usuario que introduzca su email. Tambin almacena
# el nombre introducido en la pantalla anterior.
#
# Obtiene el nombre
my $name = shift;
# Crea un mensaje de digestin MD5 para el nombre
my $digest = &create_message_digest($name);
# Inserta la digestin como un nuevo parmetro CGI de
# que podemos almacenarla utilizando la subrutina
# hiddenO de CGI.pm .
param('digest' , $digest) ;
# Ahora imprime la segunda pantalla e inserta los
# valores $name y Sdigest como datos ocultos.
print h2("Screen 2"),
hr({-size=>0,-color=>'black'}),
start form,
'Enter email: ',
textfield(-ame => 'email', -size=>30),
hidden('ame' ) ,
hidden('digest' ) ,
submit (-valu => ' Next ' ) ,
end form;
sub screen3{
#
# Propsito: imprime un mensaje basado en el dato
# recogido en la pantalla 2.
# Sin embargo, imprime el mensaje nicamente si
# el dato introducido no se ha alterado.
#
# Obtiene el nombre y la direccin de email
my ($name, $email) = @_;
# Obtiene la digestin del valor $name
my $oldDigest = param('digest' ) ;
# Crea una digestin nueva del valor de la variable $name
my $newDigest = &create_message_digest($name) ;
# Si las digestiones son distintas entonces se ha alterado
# el dato en la pantalla 2. En este caso, muestra un
# mensaje de alerta y para el procesamiento.
if ($oldDigest ne $newDigest){
return (0, alertf'Data altered. Aborted! ' ) ) ;
sub
create_message_digest{
#
# Propsito: crear una digestin de mensajes para el dato dado.
#
Para conseguir que el vndalo no pueda
#
reproducir la digestin, esta subrutina
#
utiliza una clave secreta.
#
my $data = shift;
my $secret = 'IDlOt' ; # Cambie esta clave si quiere.
# Necesitamos la linea siguiente para decirle a Perl
# que queremos utilizar el mdulo Digest::MD5.
use Digest::MD5;
# Crea un nuevo objeto MD5
my $ctx = Digest::MD5->new;
# Aade datos
$ctx->add($data);
El listado 18.2 es un script CGI de varias pantallas que le pide al usuario que
introduzca un nombre en la primera pantalla, despus le pide que introduzca una
direccin de correo electrnico en la pantalla siguiente, y finalmente imprime un
mensaje. Cuando el usuario pasa de una pantalla a otra, el dato de la pantalla
anterior pasa a la pantalla siguiente utilizando etiquetas ocultas. Este script funciona tal y como podemos leer en los siguientes prrafos.
Al comienzo del script, se utilizan dos mdulos externos, CGI y
D i g e s t : :MD5. El primero es el mdulo CGI ms conocido y su funcin es
escribir scripts CGI en Perl de un modo muy sencillo. El segundo mdulo nos
proporciona una interfaz para el algoritmo MD5.
El primer script crea un objeto CGI llamado $ q u e r y . Entonces llama a la
subrutina h a n d l e r () para cada solicitud. La subrutina h a n d l e r () es el driver del script. Si mira en el interior de la subrutina h a n d l e r () ver que asigna
los campos del nombre completo de usuario y de la direccin de correo electrnico (recogidos de un formulario Web) a $name y $ e m a i l , respectivamente.
Entonces imprime un mensaje cabecera Content-Type utilizando el mtodo
TYPE="hidden"
NAME="name"
1^1
VALUE="Cynthia">
<INPUT TYPE="hidden"
NAME="digest"
VALUE="IzrSJlLrsWlYHNfshrKw/A">
TRUCO: Puede bajar e instalar la ltima versin de D i g e s t : : MD5 desde CPAN utilizando el comando p e r 1 -MCPAN -e she 11 seguido del
comando i n s t a l l D i g e s t : :MD5 en el prompt shell CPAN.
1AM
Definir una lista de los caracteres aceptables y reemplazar o eliminar cualquier carcter que no sea aceptable. La lista de los valores de las entradas
vlidos normalmente es un conjunto de tamao manejable, predecible y
bien definido.
|l
#
# my $ o u t p u t =
' / u s r / b i n / w h o i s $domain';
#
# imprime
exit
$output;
0;
La variable $DOMAIN_CHAR_SET contiene el conjunto aceptable de caracteres, y la variable $domain busca todo lo que no pertenezca al conjunto. Los
caracteres inaceptables se eliminan.
La mejor forma de abordar las entradas del usuario es establecer reglas para
cada entrada (es decir, lo que espera recibir y cmo puede determinar que lo que
est recibiendo es aceptable). Por ejemplo, si est esperando una direccin de
correo electrnico como entrada (en lugar de analizarla a ciegas buscando meta
caracteres shell), utilice una expresin regular como la siguiente, para detectar la
validez de la entrada como una direccin posible de correo electrnico:
$email = param('email-addr');
if ($email=~ /"[\w-\.]+\@[\w-\.]+$/)
print "Possibly valid address."
}
else (
print "Invalid email address.";
(
Pero sanear las entradas del usuario no es suficiente. Tiene que ser cuidadoso
con la forma de invocar programas externos (por ejemplo, hay muchos modos en
los que puede invocar programas externos en Perl). Algunos de estos mtodos
incluyen el uso de las comillas simples de shell para capturar la salida de un
programa externo:
$list =
Vbin/ls
-1
/etc';
(FP,
"
/usr/bin/sort");
"/usr/bin/lpr
data.dat";
"/usr/bin/sort
<
data.dat";
Todas estas construcciones son arriesgadas si implican que la entrada del usuario
pueda contener meta caracteres shell. Para s y s t e m () y e x e c () , hay caracte-
rstica sintctica algo oscura que le permite llamar programas externos en lugar
de hacerlo a travs de un shell. Si pasa los argumentos a un programa externo
como elementos separados en una lista en lugar de en una gran cadena, Perl no
atravesar el shell y los meta caracteres del shell no producirn efectos indeseados.
Por ejemplo:
system
"/usr/bin/sort","data.dat";
Puede sacar partido de esta caracterstica de abrir una tubera sin atravesar el
shell. Llamando a la secuencia de caracteres - | se separa una copia de Perl y se
abre una tubera a la copia. Entonces, la copia hija inmediatamente separa otro
programa utilizando el primer argumento de la llamada a la funcin e x e c .
Para leer desde una tubera sin abrir un shell, puede hacer algo parecido con la
secuencia- | :
open(GREP,"-|") || exec "/usr/bin/grep",$userpattern,$fi leame;
while (<GREP>) {
print "match: $_";
}
cise GREP;
$real_name
"fake_name","argumentl","argument2"
/tmp/shopping.cart.txt") ;
"/tmp/shopping.cart.txt ";
Si tiene que depender de la variable PATH, determnela usted mismo al principio de su script CGI, del siguiente modo:
$ENV{ 'PATH' }="bin:/usr/bin:/usr/local/bin";
Incluso si no depende de la variable PATH cuando invoca un programa externo, hay una posibilidad de que invoque al programa; por lo tanto, tiene que incluir
USI
suEXEC
Apache tiene una aplicacin de soporte llamada suEXEC que proporciona a
los usuarios de Apache la posibilidad de ejecutar programas CGI y SSI bajo UID
diferentes de la UID de Apache. suEXEC es un programa wrapper setuid, que es
llamado cuando se realiza una solicitud HTTP de un programa CGI o SSI, para el
que el administrador ha determinado que se ejecute con una UID distinta a la del
servidor Apache. Cuando se realiza este tipo de solicitud, Apache proporciona el
wrapper suEXEC con el nombre del programa y el UID y el GID. suEXEC ejecuta el programa utilizando dichas UID y GID.
Antes de ejecutar los comandos CGI o SSI, el wrapper suEXEC realiza una
serie de pruebas para garantizar que las solicitudes son vlidas. Junto con otras
cosas, estas pruebas aseguran que el script CGI pertenece al usuario que tiene
permiso para ejecutar el wrapper y que nicamente el dueo puede escribir en el
directorio CGI o en el script CGI. Si estas comprobaciones de seguridad tienen
WMM
rango elegido no incluye grupos de la cuenta del sistema en la que normalmente las GID son inferiores a 100.
#
--suexec-safepath="/usr/local/bin:/usr/bin:/bin":
define la variable de entorno PATH que ejecuta suEXEC para scripts CGI
y comandos SSI.
.pl
#
# Asegrese de que la lnea anterior est dirigida a la
# localizacin correcta. Algunas personas guardan perl en
# /usr/local/bin.
my ($key,$value);
print "Content-type: text/html\n\n";
print "<hl>Test of suEXEC<hl>";
foreach $key (sort keys %ENV){
$value = $ENV{$key};
print "$key = $value <br>";
(
exit 0;
root
test.pl
Si tiene hosts virtuales y quiere ejecutar los programas CGI y/ o los comandos
SSI utilizando suEXEC, debe utilizar las directivas U s e r y Group dentro del
contenedor < V i r t u a l H o s t . . . >. Asigne estas directivas con las ID de
usuario y grupo distintas de aquellas que est utilizando el servidor Apache. Si
solo una, o ninguna, de estas directivas es especfica para el contenedor
< V i r t u a l H o s t > , se supone que hay que utilizar las ID de grupo y usuario del
servidor.
Por razones de seguridad y de eficacia, todas sus solicitudes suEXEC deben
permanecer dentro de la raz de documentos de mximo nivel para solicitudes del
1AVJ
host virtual o en la raz de documentos personal de mximo nivel para las solicitudes userdir. Por ejemplo, si tiene configurados cuatro host virtuales, tiene que
estructurar todas las races de documentos de los host virtuales fuera de la jerarqua de documentos principal de Apache para sacar partido de suEXEC para los
host virtuales.
CGIWrap
CGIWrap es parecido al programa suEXEC en tanto que permite a los usuarios utilizar scripts CGI sin comprometer la seguridad del servidor Web. Los
programas CGI se ejecutan con el permiso del dueo del archivo. Adems,
CGIWrap realiza varias comprobaciones de seguridad en el script CGI y no se
ejecuta si falla alguna de las comprobaciones. Nathan Neulinger escribi CGIWrap;
la ltima versin de CGIWrap est disponible en el sitio FTP principal en f tp : /
/f tp . ce . umr . e d u / p u b / c g i / c g i w r a p / . CGIWrap se utiliza mediante
una URL en un documento HTML. CGIWrap se configura para ejecutar scripts
de usuario que estn localizados en el directorio ~ / p u b l i c _ h t m l / c g i - b i n / .
Configurar e instalar CGIWrap
CGIWrap se distribuye como un archivo tar comprimido gzip. Puede
descomprimirlo utilizando gzip y extrayndolo utilizando la utilidad t a r .
Ejecute el script C o n f i g u r e , que le pide que responda a varias preguntas.
La mayora de estas preguntas se responden por s mismas. Adems observe que
hay una caracterstica en este wrapper que es distinta de suEXEC. Le permite
crear archivos a l l o w y d e n y que se pueden utilizar para restringir el acceso a
sus scripts CGI. Ambos archivos tienen el mismo formato, tal y como se muestra
a continuacin:
User ID
mailto:Userame@subneti/maskl,subnet2/mask2.
los hosts que pertenecen a la red 192.168.1.0, con una mscara de red
255.255.255.0, tienen permiso para ejecutar los scripts CGI del usuario kabir.
Tras ejecutar el script C o n f i g u r e , debe ejecutar la utilidad make para
crear el ejecutable CGIWrap.
Activar CGIWrap
Para utilizar la aplicacin wrapper, copie el ejecutable CGIWrap en el directorio e g i - b i n del usuario. Este directorio debe coincidir con el directorio que ha
especificado en el proceso de configuracin. El modo ms sencillo de que funcionen las cosas es guardar el tipo ~ u s e r n a m e / p u b l i c _ h t m l / c g i - b i n en la
estructura de directorios para el directorio de scripts CGI.
Una vez que ha copiado el ejecutable CGIWrap, cambie el propietario y los
permisos del siguiente modo:
chown root CGIWrap
chmod 4755 CGIWrap
Tiene que crear enlaces de hardware o enlaces simblicos llamados n p h c g i w r a p , n p h - c g i w r a p d y c g i w r a p d para CGIWrap en el diectorio c g i bin:
ln
ln
ln
1M
/cgi-bin/
"/path/to/real/cgi/directory/"
Pero slo algunas personas se dan cuenta de que se puede utilizar cualquier
cosa para crear un alias como este. Por ejemplo:
ScriptAlias
/apps/
"/path/to/real/cgi/directory/"
Ahora, el a p p s en una URL tiene la misma funcin que cgi-bin. Por eso, si
utiliza algo parecido a:
ScriptAlias
/dcon/
"/path/to/real/cgi/directory/"
puede confundir a algunos vndalos debido a la utilizacin de dcon, o cualquier alias no estndar que utilice. Adems recuerde que muchos vndalos utilizan programas automticos para escanear los sitios Web buscando pistas. Un
alias de script no estndar como el anterior, es bastante improbable que se incorpore a un programa automtico.
proporciona dos pistas sobre el sitio. La primera es que indica que el sitio
soporta scripts CGI, y la segunda es que el sitio ejecuta scripts Perl como scripts
CGI. Si el sitio anterior utilizase:
http://www.domain.com/ext/show-catalog
igfl
cgichk.pl
Este es un sencillo escner CGI escrito en Perl. Puede bajar la fuente de
w w w . p a c k e t s t o r m . s e c u r i f y . com. Cuando ejecutamos desde la lnea de
comandos utilizando el comando p e r l c g i c h k . p l , le pedir que introduzca
el nombre del host del servidor Web que quiera escanear y un nmero de puerto
(80 por defecto). Tambin puede decidir registrar los resultados en un archivo.
c g i c h k . p l primero comprueba la versin del protocolo HTTP que est
utilizando el servidor Web. Por ejemplo, la siguiente sesin muestra que
c g i c h k . pl est escaneando un host llamado r h a t . n i t e c . com.
CGI scanner
[in Perl]
vi.1
Host: rhat.nitec.com
HTTP Port [80] :
Log Session?(y/n)y
Log File [ rhat.nitec.com.sean] :
Press [enter] to check the httpd versin...
HTTP/1.1 200 OK
Date: Tue, 27 Mar 2001 04:50:47 GMT
Server: Apache/2.0.14 (Unix)
Last-Modified: Mon, 26 Mar 2001 20:23:13 GMT
ETag: " Iba42-1000-c65eee40"
Connection: cise
Content-Type: text/html; charset=ISO-8859-l
f or
for
f or
for
for
for
for
for
for
for
for
for
for
for
for
for
for
UnlG - backdoor
THC - backdoor
phf
Count.egi
test-cgi
nph-test-cgi
nph-publish
php.egi
handler
webgais
websendmai1
webdist.egi
faxsurvey
htmlscript
pfdisplay
perl.exe
wwwboard.pl
Not
Not
Not
Not
Not
Not
Not
Not
Not
Not
Not
Not
Not
Not
Not
Not
Not
Found
Found
Found
Found
Found
Found
Found
Found
Found
Found
Found
Found
Found
Found
Found
Found
Found
En
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
Searching
f or www-sql
for view-source
f or campas
for aglimpse
for glimpse
for man.sh
for AT-admin.cgi
for filemail.pl
for maillist.pl
: Not F ound
:
:
:
:
:
:
:
:
:
:
:
:
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
for j j
Not Found
for info2www
Not Found
for files.pl
Not Found
for finger
Not Found
for bnbform.cgi
Not Found
for survey.cgi
Not Found
for AnyForm2
: Not Found
for textcounter.pl
Not Found
for classifields.cgi
Not Found
for environ.cgi
Not Found
for wrap
Not Found
for cgiwrap
Not Found
for guestbook.cgi
Not Found
for edit.pl
Not Found
for perlshop.cgi
Not Found
for anyboard.cgi
Not Found
for webbbs.cgi
Found!
for environ.cgi
Not Found
for whois raw.cgi
Not Found
for vti mf.html
Not Found
for service.pwd
Not Found
for users.pwd
Not Found
for authors.pwd
Not Found
for administrators
Not Found
for shtml.dll
Not Found
for shtml.exe
Not Found
for args.bat
Not Found
for uploader.exe
Not Found
for rguest.exe
Not Found
for wguest.exe
Not Found
for bdir - samples
Not Found
for CGImail.exe
Not Found
for newdsn.exe
Not Found
for fpcount.exe
Not Found
for counter.exe
Not Found
for visadmin.exe
Not Found
for openfile.cfm
Not Found
for exprcalc.cfm
Not Found
for dispopenedfile
: Not Found
for sendmail.cfm
: Not Found
for codebrws.asp
: Not Found
for codebrws.asp 2
: Not Found
for showcode.asp
: Not Found
: Not Found
for search97.vts
Whisker
Whisker es un escner CGI basado en Perl que me gusta mucho. Puede bajar la
distribucin fuente de www. f i l e s e a r c h . r u . Una vez que lo ha bajado, extraiga la fuente en un directorio y ejecute el script w h i s k e r . p l como
whisker.pl
- h h o s t n a m e . E l comando p e r l w h i s k e r
-h
r h a t . n i t e c . com ejecuta el escner en el servidor Web Apache Web ejecutando dicho host. El resultado se muestra a continuacin:
= Host: rhat.nitec.com
= Server: Apache/2.0.14
(Unix)
El resultado del escner utiliza cdigos de estado HTTP como 200, 303, 403 y
404 para indicar riesgos de seguridad. Por ejemplo, el resultado anterior muestra
que hay tres riesgos potenciales (200) en el servidor. Si quiere ms informacin,
ejecute el whisker con las opciones -i y - v . Por ejemplo, el comando p e r l
whisker.pl
-h
www.domain.com
-i
- v s e ejecuta e n
www . domain . com. A continuacin tiene un ejemplo de una salida de un escner:
= Host: www.domain.com
- Directory index: /
= Server: Apache/1.3.12 (Unix) mod_oas/5.1/
+
+
+
+
+
+
+
www.apache.org
302 Found: GET /scripts/
403 Forbidden: GET /cgi-bin/
200 OK: HEAD /cgi-bin/upload.pl
403 Forbidden: HEAD /-root/
403 Forbidden: HEAD /apps/
200 OK: HEAD /shop/
200 OK: HEAD /store/
Observe que hay algunas lneas 200 OK que significan que existe aprovechamiento de recursos; estado 403 que significa que se ha denegado el acceso a un
ItEU
recurso aprovechable pero que sigue existiendo, esto es bueno y malo al mismo
tiempo. Es bueno porque tal y como est configurado el servidor, el recurso aprovechable no se encuentra accesible pero, si en el futuro cambia la configuracin,
el recurso aprovechable se hara disponible y por eso 403 es al mismo tiempo
bueno y malo. La lnea 302 indica falsos positivos. Esto ocurre porque muchos
servidores estn configurados para responder con un mensaje de error personalizado cuando se pierde una URL solicitada, lo que genera un cdigo de estado
HTTP 302.
Tambin puede utilizar la opcin -I n (donde n = de 0 a 9) para activar el
modo evasivo y evitar Intrusin Detection System (IDS) en el servidor Web. Si
est utilizando cualquier solucin IDS, puede probar tambin la efectividad de su
IDS.
Por ejemplo, si su IDS es consciente de / c g i - b i n / p h f (un riesgo CGI
conocido), entonces, utilizando -1 1 intentar engaar a su IDS utilizando codificacin de URL de modo que la solicitud / c g i - b i n / p h f se envia a una URL
codificada en lugar de utilizar directamente / c g i - b i n / p h f en la solicitud. Del
mismo modo, -I 2 tratar de confundir a IDS utilizando un patrn /. / extra en
la URL. Para obtener ms detalles, ejecute whisker sin ningn argumento.
IS1
-->
muestra todas las variables de entorno disponibles para el servidor Web. Mostrando este tipo de informacin en una pgina accesible al pblico le estamos
ofreciendo pistas a los gamberros. De modo que tiene que utilizar este comando
slo cuando est depurando llamadas SSI y nunca en un entorno de produccin.
Tiene que tomar una gran cantidad de decisiones (qu permitir y qu no permitir) sobre configuracin y poltica de seguridad para asegurar su servidor Web.
Muchas personas se frustrarn despus de implementar un conjunto de medidas
de seguridad porque no sabrn qu ms necesitan para aumentar la seguridad.
Una vez que ha implementado un conjunto de medidas como las que se realizan
con las solicitudes CGI y SSI, debera centrar sus esfuerzos en el registro.
E3
El Asegurar
Apache
con SSL
En este captulo
1. Entendemos cmo funciona SSL.
2. Establecemos OpenSSL.
3. Compilamos e instalamos m o d _ s s l para Apache.
4. Compilamos e instalamos Apache-SSL para Apache.
5. Obtenemos certificados para los servidores.
6. Creamos una autoridad certificada privada.
Hasta hace apenas hace unos aos, Internet continuaba siendo lo que fue en
sus inicios, una red mundial para cientficos e ingenieros. Sin embargo, gracias a
la Web, Internet se ha convertido en una red para todos. Parece que todo el mundo
y todo las cosas estn ahora en Internet. Adems se trata de una nueva frontera
econmica, miles de negocios, grandes y pequeos, se han establecido en sitios de
comercio electrnico para abrir sus puertas al mundo. Sin embargo, los clientes
son cautelosos, porque saben que no todo es seguro en Internet. Para eliminar la
sensacin de inseguridad en esta nueva frontera, Netscape Communications (aho-
FSEFM
Introduccin a SSL
Utilizando esquemas asimtricos y simtricos de encriptacin (que se describen en la seccin "Entender la encriptacin"), Netscape desarroll el protocolo
abierto no propietario llamado Secured Socket Layer (SSL) para proporcionar
encriptacin de datos, autentificacin del servidor, integridad de datos y autentificacin de clientes para comunicacin basada en TCP/IP. La figura 19.1 muestra
cmo interacciona SSL con las aplicaciones.
Aplicaciones
| Netscape Navigator
'
LDAP
FTP
IMAP
SMTP
>k
>r
SSL
t
>'
TCP/IP
Figura 19.1. Interacciones de SSL con las aplicaciones
E3
El protocolo SSL se ejecuta por encima de TCP/IP y por debajo del mximo
nivel de aplicacin, es decir, los protocolos de la capa de aplicacin como HTTP,
FTP, IMAP, y similares. TCP/IP utiliza en parte los protocolos de la capa de
aplicacin, y en el proceso, activa un servidor que activa SSL para autentificarse
a s mismo en el servidor, permitiendo que ambas mquinas establezcan una conexin de encriptacin. La siguiente seccin proporciona un resumen del funcionamiento de SSL.
Entender la encriptacin
Cuando los datos viajan de un punto a otro de Internet, atraviesan una gran
cantidad de computadoras como routers, gateways, y otros dispositivos de red.
Por ejemplo, cuando un visitante del sitio Web www . n i t e c . com introduce el
nmero de su tarjeta de crdito en un formulario HTML, es muy posible que la
informacin siga un camino parecido al que se muestra en la figura 19.2.
Como puede ver en la figura, los datos deben atravesar varios nodos, de modo
que hay una posibilidad de que sean interceptados por alguien. Aunque los paquetes de datos viajan a alta velocidad (normalmente milisegundos), la intercepcin
sigue siendo posible. Este es el motivo por el que necesitamos un mecanismo
seguro para intercambiar datos confidenciales. Esta seguridad se alcanza con la
encriptacin. Tcnicamente hablando, la encriptacin es un esquema de codificacin matemtica que garantiza que nicamente el recipiente propuesto puede acceder a los datos; oculta los datos a los curiosos. Los esquemas de encriptacin se
utilizan mucho para restringir el acceso a los recursos. Por ejemplo, si se registra
en un sistema Unix o Windows 2000/NT, las contraseas o claves que utilizar se
almacenarn en el servidor con formato encriptado. En la mayora de los sistemas
Unix, se encripta una contrasea del usuario y se hace corresponder con la contrasea encriptada almacenada en el archivo / e t c / p a s s w d . Si la comparacin
tiene xito, el usuario obtiene permiso para acceder al recurso solicitado. Hay dos
esquemas de encriptacin disponibles:
ggEl
Servidor
DNS
Servidor
terminal
~\J- 1
Router
ISPdel
usuariu
Address
Email
Credit Card
VISA
Kea
Card Num
Expiration
|
Nitec
mml
SUBMIT~1
yy i
1 Router
Servidor
Web
1
LAN %
Servidor
DNS
Como se utiliza una sola clave, todas las partes implicadas deben conocer
qu es lo que va a hacer esta clave para que este esquema funcione.
Encriptacin asimtrica: la encriptacin asimtrica funciona de un modo
un poco distinto de la encriptacin simtrica, tal y como sugiere su nombre. Con este esquema, hay dos claves: la clave pblica y la clave privada.
La clave extra es la clave pblica, por eso este esquema tambin se conoce
con el nombre de encriptacin de clave pblica. La figura 19.4 muestra un
ejemplo del funcionamiento de este esquema.
Como se muestra en la figura, cuando se encripta un dato con la clave
pblica, slo se puede desencriptar con la clave privada, y al contrario. A
diferencia de la encriptacin simtrica, este esquema no necesita que el
remitente conozca la clave privada que necesita el destinatario para des-
Destinatario
Clave
Clave
123456
Dato
Hola
123456
Y
Algoritmo de
desencriptacin
Algoritmo de
encriptacin
->
Hola
*>
Zola
lo
Dato encriptado
- /- "f ^
"^ "" V^ _
Zola
Dato encriptado
Remitente
Dato
Hola
Destinatario
Clave privada propia
>r
->
'
Algoritmo de
desencriptacin
Algoritmo de
encriptacin
- >
Hola
>k
>r
Zola
Red
~
Datoen criptac 0
\
V
Zola
Datoer criptado
EEE1
certificado. El emisor del certificado se conoce con el nombre de Autoridad certificadora (CA). El certificado puede contener otra informacin, como es el nmero
de serie, el perodo de tiempo de validez del certificado, y similares; lo que ayuda
a la CA a gestionar certificados. Utilizando un navegador Web compatible con
SSL, como Netscape Navigator y Microsoft Internet Explorer, puede ver un certificado de servidor fcilmente. La entidad que se identifica en un certificado se
representa utilizando campos DN (distinguished ame), que se definen en el estndar
X509. La tabla 19.1 muestra estos campos.
Tabla 19.1. Campos DN
Campo DN:
Abreviatura
Significado
Common ame
CN
Organizaron/ Company
Organizational Unit
OU
City/ Locality
State/Province
ST
Country
-H Servidor
Cliente
Servidor
El servidor responde con:
1. Certificado del servidor CA firmado
2. Datos de identificacin (ID) en todo texto
3. Digestin del mensaje de datos ID
encriptado con la clave privada del servidor
Cliente
(Digestiones coincidentes)
El servidor es quien
dice ser
(Digestiones no coincidentes)
Uso fraudulento de la clave
pblica de otra entidad
l&fcl
conocida. En este caso, cuando el navegador Web recibe el certificado del servidor, puede desencriptar la informacin del certificado utilizando la clave pblica
de la CA. Esto garantiza que el certificado del servidor es autntico. El navegador
Web puede comprobar entonces que el nombre del dominio que se utiliza en el
certificado autntico es el mismo que el nombre del dominio con el que se quiere
conectar.
Del mismo modo, si necesita garantizar que el cliente es realmente quien dice
ser, podra imponer una restriccin de certificado del lado del cliente, lo que le
permitira realizar toda la transaccin dentro de bucle cerrado de seguridad.
La idea es que si cada parte tiene un certificado que valida la identidad del
otro, confirma la clave pblica, y est firmada por una agencia de confianza,
ambos saben que se estn comunicando con las personas con las que creen que se
estn comunicando. Hay dos tipos de Autoridades de certificacin: CA comerciales y CA privadas de auto certificacin.
CA comerciales
El principal trabajo de una CA es verificar a otras compaas comerciales o
sin nimo de lucro que quieren establecer su autenticidad en Internet. Una vez que
una CA comprueba la autenticidad de la compaa comprobando determinados
registros legales, como los documentos oficiales de registro de la compaa o los
contratos, letras oficiales del director de la compaa, y similares, la CA puede
firmar el certificado. Hay slo unas cuantas CA comerciales. Verisign
(www . v e r i s i g n . com) y Thawte (www . t h a w t e . com) son las ms conocidas. Verisign ha adquirido Thawte Consulting.
CA privadas de auto certificacin
Una CA privada es como la raz de una CA comercial. Est auto certificada.
Sin embargo, una CA privada se utiliza normalmente en un entorno LAN o WAN,
o en experimentaciones con SSL. Por ejemplo, una universidad con una WAN que
interconecta departamentos podra utilizar una CA privada en lugar de una comercial. Siempre que no espere que usuarios desconocidos confen en su CA
privada, puede utilizarla. En la seccin siguiente, le mostrar cmo crear una CA
privada para su organizacin. Despus, le ensear a obtener un certificado de
una CA comercial o a crear su propia CA para certificar sus servidores y clientes.
Opciones SSL
El proyecto OpenSSL es una colaboracin de una comunidad de cdigo abierto que desarrolla SSL, Transport Layer Security (TLS), y paquetes de una librera criptogrfica de propsito general. La implementacin actual de SSL tambin
se llama OpenSSL. OpenSSL est basado en la librera SSLeay, desarrollada por
Eric A. Young y Tim J. Hudson. La licencia del paquete de software OpenSSL
permite que se utilice, de forma gratuita, el software tanto para propsitos comerciales como no comerciales.
Hay dos paquetes OpenSSL disponibles de forma gratuita para utilizar con
Apache:
Establecer OpenSSL
El paquete OpenSSL, que encontramos en www. o p e n s s l . o r g , es necesario para que las soluciones Apache-SSL y m o d _ s s l sean capaces de aportar
SSL al servidor Web de Apache. En esta seccin, aprender a establecer OpenSSL
en su sistema Unix.
Voy a utilizar un sistema Linux para aclararlo. El sitio Web OpenSSL ofrece
el cdigo OpenSSL en un archivo tar comprimido en gzip. La ltima versin es
openssl-O.9.6.tar.gz.
Obtener OpenSSL
SSL ha estado disponible en el software comercial Linux como Stronghold, y
el servidor Web comercial basado en Apache durante muchos aos. Sin embargo,
debido a algunas patentes y a restricciones de exportacin en U.S., no ha habido
versiones de SSL de cdigo abierto para Linux durante mucho tiempo. El proyecto Open SSL proporciona una versin para Linux de SSL, que puede bajar del
sitio Web oficial de OpenSSL en www . o p e n s s l . o r g / s o u r c e .
--prefix=/opt/security
Propsito
--prefix=DIR
-openssldir=DIR
Rsaref
no-threads
threads
no-shared
Shared
Opciones de configuracin
Propsito
no-asm
386
no-<cipher>
r s a y sha. Si no quiere incluir un cifrado determinado en los binarios compilados, utilice esta opcin.
-Dxxx, -Ixxx, -Lxxx, -fxxx, -Kxxx
im
Por lo tanto, tiene que saber lo que est haciendo cuando utiliza determinadas
opciones. Si sigue sin resolver el problema, intente realizar una bsqueda en la
pgina FAQ de OpenSSL en www . o p e n s s l . o r g / s u p p o r t / f aq . h t m l para
encontrar una solucin. O, simplemente instale el paquete RPM binario para
OpenSSL.
--with-apache=../httpd_2.0.19
IsMl
TRUCO: Si ha pensado utilizar mod_ssl como mdulo compartido, entonces utilicewith-apxs e n a b l e - s h a r e d = s s l - e n a b l e so en lugar de enable-modle=*ssl con el seript onf i g u r e .
5. Compile e instale el servidor Apache con soporte mod_s s 1 utilizando el
comando make.
6. Si no tiene un certificado del servidor, puede crear un certificado de ensayo
utilizando el comando make c e r t i f c a t e TYPE=dummy.
7. Ejecutemake i n s t a l 1 para instalar el servidor Apache compatible con
m o d _ s s l . Si ha creado el certificado del servidor en el paso 6, se copiar
en el subdirectorio c o n f de la ruta de la instalacin de su servidor Apache.
8. Si se est estableciendo Apache, prelo utilizando el comando / u s r /
l o c a l / b i n / a p a c h e c t l s t o p y reinicie Apache con soporte para
HTTPS utilizando el comando / u s r / l o c a l / b i n / a p a c h e c t l
sslstart
startssl.
ssl_module
modules/ssl/libssl.soa
Este contenedor < I f Def i n e > le dice a Apache que considere las directivas encerradas slo si Apache se inicio con la opcin -DSSL o si se utiliz
a p a c h e c t l s s l s t a r t s t a r t s s l . En el modo SSL, se le pide a
B&EI
5. Tiene que crear una configuracin por defecto del host virtual
h t t p d . conf, tal y como se observa a continuacin:
<IfDefine SSL>
<VirtualHost _default_:443>
DocumentRoot path_to_ssl_document_root
ServerName ssl_server_hostname
SSLEngine on
Ea
en
SSLCipherSuite
ALL:!ADH:!EXP0RT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:
+SSLv2:+EXP:+eNULL
SSLCertificateFile conf/ssl.crt/server.crt
SSLCertificateKeyFile
conf/ssl.key/server.key
</VirtualHost>
</IfDefine>
Este host virtual _ d e f a u l t _ impide que el servidor principal sirva ninguna solicitud SSL (en el puerto 443). Atrapa todas las solicitudes SSL
que no se pueden integrar con ningn otro host virtual definido en
httpd.conf.
Debera cambiar p a t h _ t o _ s s l _ d o c u m e n t _ r o o t a la raz de documentos apropiada para el servidor SSL. Puede utilizar la misma raz de
documentos que utiliz para su sitio HTTP (puerto 80).
El nombre del servidor s s l _ s e r v e r _ h o s t n a m e tiene que ser el apropiado. Puede utilizar el mismo nombre de host para HTTP y para HTTPS.
La directiva S S L E n g i n e activa el mdulo SSL para este host virtual.
S S L C i p h e r S u i t e define el cifrado criptogrfico que se puede utilizar
en este host virtual.
La directiva S S L C e r t i f i c a t e F i l e define la ruta del archivo de certificado del servidor. Asegrese de que la ruta es correcta para su sitio.
S S L C e r t i f i c a t e K e y F i l e define el archivo clave para el certificado.
De nuevo, asegrese de que ha definido la ruta adecuada.
6. Si ejecuta scripts m o d _ p e r l , scripts CGI, SSI, o pginas PHP, y quiere
tener acceso a las variables de entorno estndar relacionadas con SSL/
TLS (prefijadas por S S L ) , entonces debe instruir explcitamente a Apache para que cree estas variables para solicitudes m o d p e r l , CGI, SSI,
o PHP. Utilice S S L O p t i o n s + S t d E n v V a r s para decirle a Apache
que genere las variables de entorno SSL_* para estas solicitudes. Sin
embargo, es una buena idea activar esta opcin en el contenedor < F i 1 e>,
tal y como se muestra a continuacin:
<Files ~ "\.(pl| cgiIshtml|php)$">
SSLOptions +StdEnvVars
</Files>
1JA1
Asegrese de r e e m p l a z a r p h y s i c a l _ p a t h _ t o _ c g i _ b i n _ d i r e c t o r y
con la ruta real del directorio CGI.
8. Inicie Apache utilizando el comando / u s r / l o c a l / a p a c h e / b i n /
apachectl
sslstartstartssl.
I&fcl
443
2. Aada las lneas siguientes para decirle a Apache cmo generar datos al
azar necesarios para las conexiones SSL encriptadas:
SSLRandomFile file /dev/urandom 1024
SSLRandomFilePerConnection file /dev/urandom 1024
5. Por defecto, el servidor cach utilizado por Apache con SSL, se crea en el
directorio s r c / m o d u l e s / s s l de la distribucin fuente de Apache. Determine este directorio del siguiente modo:
SSLCacheServerPath \
/path/to/apache_version/src/modules/ssl/gcache
6. Aada las siguientes directivas para activar los valores del puerto del servidor cach y del tiempo de expiracin del temporizador del cach:
SSLCacheServerPort logs/gcache_port
SSLSessionCacheTimeout 15
7. Ahora tiene que decirle a Apache dnde est guardando el archivo del
certificado. Si cre el certificado del servidor siguiendo las instrucciones
de instalacin de OpenSSL, el certificado del servidor debera estar en el
directorio / u s r / l o c a l / s s l / c e r t s . Sin embargo, si decidi utilizar
temporalmente el certificado de prueba (que se cre utilizando el comando
make c e r t i f c a t e ) , entonces su certificado de prueba estar en el
directorio / p a t h / t o / a p a c h e _ v e r s i o n / S S L c o n f / c o n f y se llamar h t t p s d . pem. Asigne la directiva siguiente a la ruta completa del
certificado de su servidor, tal y como se muestra a continuacin:
SSLCertificateFile \
/path/to/apache__version/SSLconf/conf/httpsd.pem
lifcfcl
(normalmente desplegado por un pequeo icono que representa una cerradura en la barra de estado de los navegadores Web).
Obtener un certificado
Antes de que pueda utilizar Apache con SSL (mediante mod_s s 1 o mediante
Apache-SSL), debe crear el certificado apropiado para el servidor. Puede obtener
un certificado para el servidor de una autoridad de certificacin comercial o puede crear su propia autoridad de certificacin y entonces crear certificados para
sus propios servidores y para sus clientes. El ltimo mtodo se utiliza normalmente en grandes organizaciones que quieren gestionar certificados entre sus distintos campos, de forma interna.
M&l
Cuando ejecute este comando, le pedir que introduzca una frase de paso (es
decir, una contrasea) para encriptar la clave privada. Como la clave privada se
encripta utilizando el cifrador d e s 3 , le pedir que introduzca una frase de paso
cada vez que se inicie su servidor. Si esto no le gusta, puede crear una versin sin
encriptar de la clave privada eliminando la opcin - d e s 3 de la lnea de comandos. Le recomiendo que utilice una clave privada encriptada para garantizar un
alto nivel de seguridad, despus de todo, no querr que nadie que pueda entrar en
su servidor sea capaz de ver su clave privada. El listado 19.1 muestra el contenido
del archivo www. domain . com. key.
Listado 19.1. El contenido del archivo www.domain.com.key
BEGIN RSA PRVATE KEY
Proc-Type: 4,ENCRYPTED
DEK-Info:
DES-EDE3-CBC,C48E9F2F597AF968
47f4qGkVrfFfTNEygEs/uyaPOeAqksOnALtKUvADHKL7BhaB+8BrT/
Haa7MHwEzU
jjaRdlXFlklEj3qH6d/
Z10AwVfYiAYvOlH3wQB2pllSuxui2sm7ZRkYUOpRMjxZI
/srHn/
DU+dUqllpH3vJRw2hHNVjHUB0cuCszZ8GOhICa5MFGsZxDR+cKP0T2Uvf5
jlGyiMroBzN0QF0v8sqwZoSOsuKHU9ZKdA/
Pcbu+fwyDWFzNfr8HPNTImlaMjGEt
i9LWZikzBW2mmaw7 9Pq6xSyqL+7dKXmiQL6d/
bYiH0ZUYHjMkJtqUplfNXxJd4T6
kB8xVbvjPivolAyvYK0qmmVQp7WDnEyrrYUZVyRu0a+lO50aTG2GnfSy32YGuNTY
lMB3PH5BuocSRp+9SsKKTVoW0a01n0RtgVk/
EZT02Eo94qPcsZes6YyAwY4fFVAw
gG/G3ZJCPdjBI2YLmvhua3bvp9duc5CXmKDx004 9VvjbEB/
yvi9pLbuj8KuAt4ht
fZcZB9 4wxrR/EMGODs2xgNhH+SwEf5Pc/bPUMRCq/0t6F/
HJ4 7jVnUf17tdtoTT7
UbQQVyAsr9tKSFzsRKMOGB04VoenkD5CzUUF3iO/NaXSs/
EFu9HGlctWRKZEVIp/
MSJBe3jYDXbmeGdQGNJUExpY64hvlXoNd0pAJk0E622o2allraFusl2PotNvWYdI
TShgoIHSmNgQQLCfssJH5TABKyLejsgQy5Rz/
Vp3kDzkWhwEC0hI42p0S8sr4GhM
6YEdASb51uP3ftn2ivKshueZHpFOvSlpCGjnEYAEdY4QLJkreznM8w==
END RSA PRVATE KEY
Generar un CSR
Tiene que generar el CSR utilizando su clave privada:
openssl req -new -key www.domain.com.key -out www.domain.com.csr
Id&l
ItWiM
im
cado de prueba o un certificado firmado por una CA, el navegador Web mostrar
un mensaje de advertencia indicando que el certificado no se puede verificar. Esto
es normal porque ninguna CA conocida ha firmado el certificado. Debera aceptar
el certificado y navegar por el sitio Web compatible con SSL.
Parte V
Ejecutar
Apache
en Win32
FTil Instalar
y ejecutar
Apache
para Windows
En este captulo
1. Nombramos los requisitos del sistema para ejecutar Apache en Windows.
2. Instalamos Apache en Windows.
3. Iniciamos, paramos y reiniciamos Apache.
Aunque Apache se ha estado trasladado a la plataforma Windows durante
mucho tiempo, Apache 2.0 es la primera versin que puede sacar partido de las
llamadas al sistema Windows nativas. Todas las versiones anteriores de Apache
utilizaban una capa de abstraccin POSIX que disminua el rendimiento cuando
se ejecutaba Apache en Windows. Ahora Apache puede, por fin, competir con
otros servidores nativos de Web como el servidor Microsoft US y el servidor
Netscape Enterprise.
En este captulo, conocer los requisitos del sistema para ejecutar Apache bajo
plataformas Windows conocidas, como son Windows XP, Windows 2000,
Windows NT y Windows 9x/ME; tambin aprender a instalar Apache y a configurarlo de modo que pueda prepralo y ejecutarlo rpidamente.
W&M
E2Z1
cgack
jext:
Cfcot
W5TM
ma de instalacin determina los nombre basndose en las opciones actuales de Windows. Modifique los valores por defecto por los valores adecuados. No cambie el nombre del servidor o el nombre del dominio sin tener
realmente la configuracin de DNS y de red apropiadas para el host. En
otras palabras, no puede elegir de forma arbitraria un nombre de dominio o
el nombre del host del servidor. Esta informacin debe ser vlida para el
host en el que ha instalado Apache. Haga clic en Next para continuar.
IS* Apache httpd Server - Installation Wizard
Read This First
Read this Before Running Apache on Windows.
What is it?
Apache is an HTTP server, originally designed for Unix systems. This is Ihe versin
of Apache for Microsoft Windows 2000, NT, 98, and 95 systems. Like the Unix
versin, itincludes manyfrequently requested newfeatures, and has an APIthat
allows itto be extended to meet users'needs more easily. Italso allows limited
support for ISAPI extensions
The Latest Versin
Details ofthe latest versin can nefound on the Apache HTTP server projectpage
under http ffhttod.apache ora/.
Docurnentation
The docurnentation availahle as ofthe date ofthis relase is also included, in
UThill fnrmal in tho htrinrcmQm IQI Hirortrm/ Fnr tho rr.nct i in-ln.Hato
e*
ICZJsSZZl
Cancel
<Back
rjext>
Cancel
4. Decida si quiere instalar Apache utilizando la instalacin Complete (o completa, con todas las caractersticas del programa instaladas, utilizando
mucho espacio en el disco) o Custom (personalizado, en el que se seleccionan los programas y archivos que se instalan), tal y como muestra en la
figura 20.4. Le recomiendo que elija la instalacin personalizada porque le
permite saber lo que se va a instalar. Siempre tiene la opcin de elegirlo
todo en la instalacin personalizada hasta llegar a la completa.
complete
JE3
[jgB
J E S Choose which program f satures you want Instalad and where they
fESw
wi be Instalad. Recanmended for advanced users.
InstaHSWd
.
<Back
ext>
Cancel
E3
Ckkonanlconhthelstbelowtochangehowafeatureisinstaled.
-Feature Descnpbon
Apache Runtime
Apache Documentation
Qiange...
InrtaBhteld
Space
belp
<Back
fjext>
Cancel
i j A p a c h e httpd Server
Installation W i z a r d
Custom Setup
Select the program Features you want installed.
r-Feature Description
i - r i . . A__<J.- L I A . J l i l . L . r,
Insta! b.
ijefe
Qiange.,,
3ce
:Back
ext>
Cancel
El programa de instalacin muestra una pantalla que indica que est preparado para instalar Apache. Haga clic en Next y espere mientras se instala Apache. Cuando se completa la instalacin, haga clic en Finish para que
termine el programa de instalacin.
Por defecto, el programa de instalacin inicia Apache, por lo que debe ser
capaz de ver el sitio Web por defecto de su sistema, utilizando un navegador
rehivo
OAtrs
Edfctn
-O
'
Ser
L]
Esvortos
)
-lalxi
Rfr'.
Bsqueda
Ayuda
. ? Favoritos *f Mutoneda
#"<
IB'
If you can see this, t means that the nstallaon of the Apache web server software on this
system was successful You may now add content to this directory and replace this page
zJ
sr
Figura 20.7. El sitio Web por defecto instalado en su sistema Windows
I Internet
Ejecutar Apache
Ejecutamos Apache bajo Windows desde la lnea de comandos en una ventana
de consola, o como un servicio bajo los sistemas Windows 2000 o Windows NT.
En los sistemas Windows 2000 o NT, debera ejecutar Apache como un servicio
autnomo. De hecho, la instalacin por defecto detectar su Windows y decidir
instalarlo como un servicio para estas dos plataformas.
IsMl
lona
ifclSleff BJlhSjJ/.
Tiee |
% Sarvices (Local)
ame
'
I Descripton
II t
1 Status
1 Startup Tvoe
! LoaOnAs
^jAleiter
Notifies sele.
Stacted
Automatic
LocaISystem
^Application Manage
%AtiHotKeyPollei
*^ CltpBook
^ j C O M * Event System
*&* rrimn. itot Btni*itPi
Piovides so
Started
Suppotts Q. .
Piovides au
M*ir>l*ni *
Staited
Manual
Automatic
Manual
M anual
nrnmshr
LocaISystem
LocaISystem
LocaISystem
LocaISystem
i
t
-1
2. Haga doble clic en el nombre del servicio "Apache" y aparecer una caja
de dilogo, como la que se muestra en la figura 20.9.
es (Local Computer)
Geneja)|LogOn| Reoovy| Dependencia|
Servicename:
Apache
DaelWDamac
Apache
Qeactvfon:
Pafttomiacutabl:
.
"C:\Piogram nes\pache GrajfMpache\Apache ee" -otnvice~
~B
SUrfcpIype;
Service status:
Siatt
J Manual
Disabled
9w
You c i pecfyttie stert paswtett Ihet app^ whert ju Uvt (he service
fccueheto.
p#
6. Bajo Windows 2000 Advanced Server, para definir una accin cuando
falla el servicio Apache, seleccione la pestaa Recovery y elija las acciones apropiadas para el primer fallo, el segundo y los siguientes. Por ejemplo, puede elegir reiniciar el servicio o reiniciar la mquina automticamente
cuando falla el servicio Apache, o incluso ejecutar un programa externo
para que haga algo til como por ejemplo el papel de administrativo. La
figura 20.10 muestra que cuando falla la ejecucin del primer servicio
Apache, se reinicia automticamente el servicio, en el segundo fallo del
servidor se reinicia la mquina automticamente y para los siguientes fallos un programa asume el papel de administrador.
7. Cuando est configurado el servicio, haga clic en Apply para finalizar la
instalacin.
Puede tambin iniciar o parar el servicio Apache en cualquier momento
desde la consola utilizando los comandos n e t s t a r t a p a c h e o n e t
s t o p a p a c h e , respectivamente.
NOTA: A diferencia de muchos servicios Windows, Apache registra sus
- errores en su propio archivo de registro de errores. El archivo por defecto
es. l o g s / e r r o r . l o g , que se encuentra en el directorio por defecto
E3
econdfaiure:
SjjbMquantMiu:
|RunaFile
RntWQuHlaftar
|o
das
RnMaaoeicaaflK
|1
nenia
d
d
d
*
IcAadminVpagei -host nano -s apache
'J2MMM
r
W/t.
|MfMWWIb
gfowtft.
A|iendllcarttoir)olcoo<Mndlie^a**1)
0K
Cncd
wt>
Para parar Apache, ejecute A p a c h e -k s t o p desde el directorio Apache, que es, por defecto, el C : \ P r o g r a m
Files\Apache
G r o u p \ A p a c h e . Tambin puede utilizar el comando A p a c h e
shutdown.
"path to httpd.conf"
Por ejemplo, puede crear dos servicios Apache principales, uno que responda
al puerto 80 y otro que responda al puerto 8080, creando dos archivos
h t t p d . conf. Puede ejecutar cada uno de estos servicios utilizando el comando
anterior. Sin embargo, en los sistemas Windows 2000 o NT, est instalado un
I&U
servicio Apache por defecto, de modo que simplemente tiene que modificar
C:\Program
Files\Apache
Group\Apache\conf\httpd.conf
para reflejar el cambio de puerto y guardarlo como otro archivo. Entonces slo
tiene que ejecutar una instancia Apache utilizando el comando anterior. La configuracin Apache por defecto puede seguir ejecutndose en el puerto 80.
Para crear un nuevo servicio Apache, ejecute el siguiente comando desde el
directorio binario de Apache (por defecto es: C : \ P r o g r a m F i l e s \ A p a c h e
Group\Apache):
Apache -n new service_name -f "path^to httpd.conf" -k install
ItMJ
FU Configurar
Apache
para Windows
En este captulo
1. Vemos las diferencias e n t r e h t t p d . c o n f en Windows y h t t p d . c o n f
en Unix.
2. Ajustamos Apache para que funcione.
3. Probamos la configuracin de Apache.
4. Gestionamos Apache con Comanche.
5. Configuramos Apache para scripts CGI basados en Perl.
6. Vemos cmo se utiliza m o d p e r l en Windows.
7. Vemos cmo se utiliza PHP en Windows.
8. Vemos cmo utilizar extensiones ISAPI con Apache.
9. Vemos cmo utilizar U s e r D i r en Windows.
La mayor parte de la informacin que encontramos en los captulos anteriores
se aplica a Apache en Windows. Sin embargo, hay ciertas diferencias entre Apache para Windows y Apache para Unix debido a las marcadas diferencias entre el
modo en el que los sistemas Unix y los sistemas Windows funcionan. Ese captulo
discute esas diferencias.
E3
con el cdigo fuente, debera ser capaz de asignar un nmero mximo de 4096
hilos para el mdulo w i n n t MPM. Probablemente, un nmero por debajo de 256
es ms apropiado para la mayora de los sitios Web.
La directiva M a x R e q u e s t s P e r C h i l d limita el nmero de solicitudes que
puede manejar un proceso hijo (remtase al captulo 4 para obtener detalles sobre
esta directiva). Como un solo proceso hijo procesa todas las solicitudes mediante
hilos bajo Windows, esta directiva debera asignarse a un nmero muy alto o a 0,
lo que significa que el proceso hijo nunca abandona.
-t
Tambin puede elegir la opcin Start>Programs>Apache httpd Server>Configure Apache Server>Test Configuration, para producir lo mismo.
Si encuentra un error, puede arreglarlo antes de reiniciar el servidor con el
comando Apache - k r e s t a r t .
EH
;
Comanche 3.0beta
Comanche Help
Comanche
Configuring nano
^S
1 Apache Apache/unknown
~ - y l Server rnanagement
O * Module rnanagement
^
Information
S? Logs
H Q l Conliguration files
-i"
Gongguring nano
E]?Lcgs
E3E^ Configuraron files
ca
^ '- .rpiOCTim Fsj/Apaclvs Gioup,'A pite lie.fr t do-
13
Locatioiu
-r-iL
Figura 21.3. La configuracin por defecto del servidor Web
.^J
Haciendo clic en el enlace de propiedades por defecto del sitio Web, obtenemos la pantalla de configuracin real.
Aqu puede realizar la configuracin utilizando las opciones Basic configuration
(configuracin bsica), Module management (gestin de mdulos), Server
identification (identificacin del servidor), Server options (opciones del servidor),
Environment (entorno), Indexing (indexacin), Proxy, Apache Jserv Settings (opciones para Apache Jserv), Alias o CGI Settings (opciones de CGI) del rbol del
men.
Por ejemplo, para cambiar la directiva P o r t a un valor distinto del valor por
defecto (es decir, que no sea el 80) puede desplegar la subopcin Basic
Configuration y hacer clic en la opcin L i s t e n i n g para asignarle un valor
como 8080, tal y como se muestra en la figura 21.4.
Properties configuration
Bas c Configuralior -H
&
Logging
Port 1808(]
Module managerne
E ^ Server identificatioi
Q t Server options
Al avaable addtesses
(~
Spoctfc addres^domain-name
[ ] ^ / Environment
0 0
Indexing
0 C | Proxy
O Apache JServ Sett
^i
_ J .d V
Ok
Cancel
Help
Del mismo modo, para crear un alias para el script CGI llamado / c g i - b i n /
, apuntando al directorio " C : / P r o g r a m F i l e s / A p a c h e G r o u p / A p a c h e / c g i - b i n / " , puede desplegar el rbol de opciones de A l i a s , hacer clic
en la opcin CGI y utilizar el botn Add para aadir el alias, tal y como se
muestra en la figura 21.5. El nuevo alias creado aparece en la pantalla CGI Alias
principal.
Lt&fcl
herramienta para gestionar Apache desde una GUI. Sin embargo, no olvide que
Comanche es un trabajo que sigue en experimentacin. Utilcelo y mantngase al
tanto de la aparicin de nuevas versiones.
IJ.I.I.UIJIJIJ.UJ.I
031 Scripts Directoy Alas
-Normal ABas
UH/Path
|cg-bn
Destjnation Url
I cVProgram Files/Apache
y j | j
|
[""
Ok
~]
Cancel
Information
0 & Logs
S ^ Configuiaion Mes
V-
Figura 21.6. Atajo para configurar por defecto un servidor Web o un host virtual
1E1
Esta lnea se llama s h e b a n g . Por ejemplo, si ha instalado Perl en el directorio c : \ p e r l \ b i n , puede crear scripts de Perl con la primera lnea asignada en:
# ! c:/perl/bin
Hay otro modo en el que puede invocar Perl para scripts CGI. Por defecto Perl
registra extensiones . pl con el Windows Registry para ejecutarlas en el intrprete de Perl. Si asigna la directiva S c r i p t l n t e r p r e t e r S o u r c e r e g i s t r y
en la parte de la configuracin del servidor de h t t p d . conf, puede ejecutar
cualquier script con la extensin . p l adecuadamente. Apache obtendr la ruta
del intrprete desde Windows Registry en lugar de la primera lnea s h e b a n g .
En captulos anteriores podr obtener detalles de otros asuntos relacionados
con CGI, que siguen siendo aplicables a Apache en una plataforma Windows.
http://theoryx5.uwinnipeg.ca/ppmpackages/mod_perl-
Durante el proceso de instalacin le pedirn que introduzca el nombre completo de la ruta, incluido el dominio, del directorio de los mdulos Apache. La salida
que muestra el proceso de instalacin es la siguiente:
Which directory should mod_perl.so be placed in?
(enter q to quit) [C:/Apache/modules]
"Drive:/your path:startup.pl"
#!c:/perl/bin/perl
use CGI ();
use DBI ();
use Apache::DBI ();
http://theoryx5.uwinnipeg.ca/ppmpackages/Apache-
http://theoryx5.uwinnipeg.ca/ppmpackages/Apache-
I&VJ
isapi-isa
.dll
ISAPIReadAheadBuffer
La directiva I S A P I R e a d A h e a d B u f f e r asigna el mximo tamao del buffer "Read Ahead" o de lectura de informacin ms all de la requerida, que est
disponible para la extensin DLLs de ISAPI. Por ejemplo, cuando los datos que
se van a leer superan el valor por defecto de 49152, hay que utilizar el mtodo de
retrollamada R e a d C l i e n t .
Sintaxis: ISAPIReadAheadBuf f e r
size
Predefinido: I S A P I R e a d A h e a d B u f f e r
49152
ISAPILogNotSupported
La directiva I S A P I L o g N o t S u p p o r t e d activa o desactiva el registro de
todas las solicitudes con caractersticas que no soportan las extensiones ISAPI.
Esto nicamente resulta til para aislar un problema relacionado con una extensin ISAPI que no funciona adecuadamente.
Sintaxis: I S A P I L o g N o t S u p p o r t e d On
Of f
Predefinido: I S A P I L o g N o t S u p p o r t e d on
Contexto: configuracin del servidor
ISAPIAppendLogToErrors
La directiva I S A P I A p p e n d L o g T o E r r o r s activa o desactiva el almacenaje de extensiones ISAPI en el registro de errores.
Sintaxis: I S A P I A p p e n d L o g T o E r r o r s On
Predefinido: I S A P I A p p e n d L o g T o E r r o r s
Off
Off
ISAPIAppendLogToQuery
La directiva ISAPIAppendLogToQuery activa o desactiva el registro de
datos de consulta en el registro de acceso al servidor.
Sintaxis: ISAPIAppendLogToQuery On
Predefinido: ISAPIAppendLogToQuery
Off
Off
UserDir en Windows
Apache actualmente no funciona con cuentas de usuario Windows y por lo
tanto no puede detectar directorios locales para los usuarios Windows. Si quiere
proporcionar sitios Web para usuarios, puede utilizar el siguiente esquema:
1. Elija un directorio para el directorio local de mximo nivel para todos los
usuarios. Por ejemplo, puede crear un directorio llamado C : \home y utilizarlo para este propsito.
I&kl
Parte VI
Mejorar la
escalabilidad
^iti
WX Apurando
Apache
En este captulo
1. Utilizamos un harware de alto rendimiento.
2. Ponemos a punto su disco duro.
3. Ponemos a punto los sistemas de archivos.
4. Compilamos e instalamos un kernel personalizado.
5. Ponemos a punto su red.
6. Ponemos a punto su configuracin Apache.
7. Utilizamos el caching para aumentar la velocidad.
8. Ponemos a punto aplicaciones Web basadas en Perl.
Si nos pidiesen que escribiramos la frmula matemtica ms sencilla posible
para el rendimiento, yo escribira R e n d i m i e n t o = f ( h a r d w a r e ,
softw a r e , r e d , c o n t e n i d o , que significa que el rendimiento es funcin del
hardware, del software, de la red y del contenido. Aunque se trata de una sentencia muy general, pone de manifiesto que el rendimiento de un servidor Web no se
ilcl
puede mejorar sin poner a punto su hardware (la mquina del servidor), el software (el servidor Apache, las aplicaciones Web y el sistema operativo), la red
(ancho de banda y latencia o retardo) y el contenido (tamao y tipo).
Este captulo discute el modo de poner a punto estos aspectos de modo que
pueda mejorar el rendimiento de todo el sistema.
NOTA: A propsito de todo esto, como ya ha ledo un captulo de rendimiento, supongo que su sistema Apache actual se encuentra en una mquina moderna. Si est utilizando un PC clonado como servidor Web y le
preocupa el tema del rendimiento, supondr que est utilizando un Pentium
y no un sistema basado en i386.
CPU
Cuando analizamos las necesidades de rendimiento de nuestro hardware, la
primera pregunta que debemos hacernos es si necesitamos una CPU veloz para la
computadora Apache. La respuesta depende de cmo utilicemos nuestro servidor
Apache. Si el servidor sirve pginas estticas mayoritariamente, la CPU no va a
constituir un factor significativo en el rendimiento. Por el contrario, si genera una
gran cantidad de contenido dinmico utilizando Server-Side Includes (SSI), scripts
CGI, y similares, su servidor Apache va a necesitar un procesador rpido. En ese
caso es aconsejable obtenerlo. Cuanto ms rpido mejor. Debera saber, sin embargo, que una CPU rpida no va a servir de mucho a la hora de enfrentarse con
un alto volumen de contenido dinmico. El candidato ms probable para los cuellos de botella, en ese tipo de escenarios es la memoria RAM (que se discute en la
siguiente seccin).
RAM
Siempre pensar que le falta RAM, pero una RAM cuesta dinero. La cuestin
es llegar a una solucin de compromiso entre la cantidad de RAM y el dinero que
vamos a invertir en ella. Puede llegar a esta solucin de compromiso controlando
los conceptos bsicos de su sistema durante la carga. Por ejemplo, en la mayora
de los sistemas Unix, puede ejecutar utilidades para controlar el rendimiento del
KiEl
Ll programa t o p muestra una gran cantidad de informacin sobre la ejecucin del sistema. Hn esta salida en concreto, la computadora est utilizando prcticamente toda su memoria fsica (256MB), pero an no ha comenzado a utilizar
su memoria virtual
NOTA: Si est ejecutando Apache en una plataforma Windows, utilice el
programa Task Manager para controlar la utilizacin de la memoria fsica,
de la memoria virtual y de la CPU.
Otro programa que puede utilizar, en la mayora de los sistemas Unix, para
comprobar la utilizacin de la memoria virtual de su sistema, es v m s t a t . La
figura 22.2 muestra una salida de una sesin de v m s t a t en la misma computadora que el ejemplo anterior. Si observa que la computadora de su servidor Web
est utilizando la memoria virtual (es decir, espacio de intercambio), eso significa
que tiene escasez de memoria. Ls un buen momento para invertir en memoria
RAM. Si no tiene la opcin de comprar ms memoria, o si piensa que tiene
suficiente, entonces tiene que investigar algn modo de reducir la utilizacin de la
memoria RAM de la que dispone.
Disco duro
La siguiente pieza de hardware que tiene que considerar como un factor importante en el rendimiento de su servidor Web, es el disco duro. Un servidor Web
F7TE1
gasta una gran cantidad de tiempo accediendo al disco duro, y como los discos
duros siguen siendo bastante lentos, suelen ser la causa principal de la perdida de
rendimiento.
rhatserver - SecureCRT
[root@rhat
procs
r b I
,
J
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 I'I 0
0 0 0
0 0 o
toncaU vmstat 1
siupd
2680
2680
2630
2680
26"'
2680
2680
2680
free
21156
21156
21156
21156
21156
21156
21156
21156
buff
234152
234152
234152
234152
234152
234152
234152
234152
memory
cache
85144
85144
85144
85144
85144
85144
85144
85144
si
0
0
0
0
0
0
0
0
jap
so
0
0
0
0
o
0
0
0
bo
0
0
0
0
4
0
0
0
system
in
es
11
14
107
114
107
119
107
114
140
122
107
115
107
119
107
115
US
0
1
1
1
1
1
1
1
su
0
1
1
1
1
1
1
1
epu
id
8
98
98
98
98
98
98
98
NOTA: En este captulo voy a suponer que est utilizando EIDE o SCSI.
Nombre estndar
ATA-1
Significado
Integrated Disk Electronics
(discos electrnicos integrados).
AT Attachment (dispositivo
AT). ATA es el conjunto de
especificaciones IDE.
ATA
Fast-IDE o Fast-ATA
ATA-2
EIDE
ATA-3
UltraDMA/33 o UDMA/33
ATA-4
Utilizando un controlador de
acceso directo de memoria
(fast direct memory access,
DMA), este tipo de unidad de
disco, proporciona medias de
transferencia intensiva de
CPU menores y ms rpidas.
ATAPI
fcVirJ
Acrnimo o trmino
Nombre estndar
SCSI-1
Significado
Small Computer System Interface (Interfaz de sistema
para pequeas computadoras). La implementacin inicial de SCSI fue diseada
principalmente para unidades
de disco pequeas (8-bit), diferenciales, sincrnicos o
asincrnicos, y estaba muy
limitada con respecto al SCSI
actual.
Incluye transferencia de datos sincrnica y asincrnica
a una velocidad de 5MB/segundo.
SCSI-2
Fast SCSI (SCSI rpido), utiliza un bus de 10 MHz en lugar del bus de 5 MHz que se
utiliza en el SCSI menor. En
un bus SCSI de 8-bit (menor)
el bus SCSI aumenta esta
velocidad tericamente mxima desde 5MB/segundos a
10MB/segundos. En un bus
de16-bit (mayor) puede haber
una media de transferencia
de 20MB/segundo.
SCSI-3
SCSI-3
Tiene que utilizar un controlador de unidades de disco SCSI de mximo nivel con un conjunto de unidades de disco SCSI de mximo nivel
para su servidor Web. Las unidades de disco SCSI ultrawide ms modernas son la mejor eleccin. Es una buena idea utilizar varias unidades de
disco en su servidor Web (de este modo, podra separar su sistema operativo de los datos Web). Utilice al menos dos unidades de disco: uno para el
sistema operativo y otro para los datos. Esta posibilidad constituye, adems, una buena medida de seguridad.
Los discos son un punto habitual de fallos. Si le preocupan los fallos en
las unidades de disco, plantese la posibilidad de realizar una copia de sus
datos de forma regular. Debera obtener un sistema de array redundante de
discos independientes (Array of Inexpensive Disks, RAID). Un RAID es
un grupo de unidades de disco pequeas que actan de forma coordinada
para imitar una unidad de disco grande. Si falla alguna de las unidades de
disco, las otras toman el relevo hasta que se repara el fallo. La utilizacin
de sistemas RAID podra suponer I/O de unidades de disco de alto rendimiento y una seguridad razonable para los datos de su servidor Web.
No utilice un disco duro lento. Mucha gente compra sus servidores PC a
fabricantes que les ofrecen paquetes en los que figuran unidades de discos
IDE o EIDE de gran tamao. Le recomiendo que evite utilizar unidades de
disco IDE/EIDE en su servidor Web si quiere que su servidor Web funcione mejor que un juguete.
E3
alto rendimiento. Como mnimo, debera utilizar dos unidades de disco, uno para
el sistema operativo y el software, y el otro para los datos. Para los servidores
Web, recomiendo un mnimo de tres unidades de disco, utilizando el tercero para
el registro generado por los sitios Web hospedados en la mquina. Mantener la 1/
O (Input/Output o la entrada/salida) de unidades de disco en varios dispositivos,
garantiza un tiempo de espera mucho menor.
TRUCO: Si tiene el presupuesto suficiente para hacerlo, puede utilizar
discos de canal de fibra o utilizar una red de sistemas de almacenamiento de
datos (SAN). Las empresas con gran demanda de almacenamiento de datos,
suelen utilizar la ltima opcin. Tambin puede utilizar soluciones RAID
de hardware y software, que se van a discutir en el prximo captulo.
Puede sacar mucho ms rendimiento a su disco EIDE. Para empezar, tiene que
determinar cul es el rendimiento antes de los ajustes, por eso necesita alguna
herramienta que pueda medir el rendimiento del estado actual de su sistema de
unidades de disco.
La herramienta h d p a r a m es la adecuada para realizar este trabajo, puede
bajar la distribucin fuente de esta herramienta de h t t p : / / m e t a l a b .
u n c . e d u / p u b / L i n u x / s y s t e m / h a r d w a r e . La compilacin y la instalacin se llevan a cabo del siguiente modo:
1. Como raz, extraiga la distribucin fuente en un directorio del tipo / u s r /
l o c a l / s r c . Por ejemplo, yo ejecut el comando t a r x v z f h d p a r m 3 . 9 . t a r . g z en / u s r / l o c a l / s r c para extraer la distribucin
fuente de la versin 3.9 de h d p a r a m .
2. Cambie al nuevo subdirectorio creado y ejecute el comando m a k e
i n s t a l l para compilar e instalar el binario h d p a r a m y la pgina del
manual. Por defecto, el binario est instalado en el directorio / u s r / l o c a l / s b i n y se llama h d p a r a m .
ADVERTENCIA: Como hdparam le permite cambiar el comportamiento de su sistema de unidades de disco IDE/EIDE, puede dar lugar, en ocasiones, a que el sistema se cuelgue como consecuencia de un uso incorrecto
o de una configuracin inadecuada. Le recomiendo que realice una copia de
los datos antes de utilizar hdparam. Adems, es una buena idea experimentar con hdparam con un solo usuario de modo que ningn otro usuario utilice el disco duro mientras est trabajando en l. Puede reiniciar su
sistema para forzarle a utilizar el modo de un solo usuario introduciendo
l i n u x s i n g l e en el prompt lilo durante el inicio.
EZQ
/dev/hda
Como puede ver, est desactivado prcticamente todo por defecto. Alguno de
estos valores por defecto se tienen que cambiar para aumentar el rendimiento del
sistema. Antes de continuar el proceso, necesita ms informacin para el disco
duro. Ejecute el comando siguiente:
hdparm -i
/dev/hda
El comando est dando informacin sobre el modelo, la configuracin la geometra de la unidad de discos (cilindros, cabezales, sectores), tamao de pista,
tamao del sector, tamao del buffer, modo soportado de DMA, modo PI, etc. A
continuacin vamos a probar el subsistema de discos utilizando el comando:
/usr/local/sbin/hdparm
-Tt
/dev/hda
-mi 6
/dev/hda
Si ejecutamos la prueba de rendimiento utilizando el comando h d p a r a m tT / d e v / h d a se mostrar el cambio. Para el ejemplo del sistema, el cambio es
el siguiente:
/dev/hda:
Timing bufer-cache reads: 128 MB in 1.01 seconds = 126.73 MB/sec
Timing buffered disk reads: 64 MB in 16.53 seconds = 3.87 MB/sec
-mi 6
-c3
/dev/hda
IrZkl
-di
-X66
/dev/hda
Tarjeta ethernet
La ltima pieza de hardware, que reside en el sistema y que puede tener un
impacto sobre el rendimiento, es la tarjeta adaptadora de red. Voy a suponer que
su servidor Web se va a conectar a una red Ethernet. La tarjeta adaptadora de red
que debera utilizar tiene que ser de alta calidad y segura. Por ejemplo, si la red
Ethernet a la que quiere conectarse maneja nodos de lOMbps o de lOOMbps, tiene
que obtener una tarjeta adaptadora de lOOMbps de un fabricante con nombre de
marca. El resto del hardware que puede influir en el rendimiento de su servidor se
discute en la seccin de redes de este captulo.
EZE1
\
tsize,
tsize/fcnt);
}'
NOTA: Cambiar el tamao del bloque a un valor superior del valor por
defecto (1024) podra producir un aumento en la velocidad de lectura debido al reducido nmero de bsquedas y tambin a que la sesin f s c k durante el reinicio podra ser ms rpida, dado que la fragmentacin de archivos
Instalar e2fsprogs
Para poner a punto el sistema de archivos ext2, tiene que instalar el paquete de
utilidades e2 f s p r o g s , del siguiente modo:
1. Cargue la distribucin fuente de e2 f s p r o g s - v e r s i o n . s r c . rpm (reemplace v e r s i n con el nmero de la ltima versin) de www.
rpmf i n d . n e t . Yo baj el paquete e 2 f s p r o g s - l . 1 9 - 0 . s r c . rpm.
Tambin puede obtener la fuente desde el sitio del proyecto e2 f s p r o g s
en h t t p : / / e 2 f s p r o g s . s o u r c e f o r g e . n e t . su.
2. Ejecute el comando rpm - i v h e 2 f s p r o g s - v e r s i o n . s r c . r p m
para extraer la fuente en un directorio / u s r / s r c / r e d h a t / S O U R C E S /
. La fuente RPM lanza un archivo e2 f s p r o g s - v e r s i o n . t a r . gz
que se tiene que extraer utilizando el comando t a r x v z f e 2 f s p r o g s v e r s i o n . t a r . g z. Esto da lugar a un subdirectorio llamado
e2fsprogs-version.
3. Cambie al nuevo subdirectorio.
4. Ejecute m k d i r b u i Id para crear un nuevo subdirectorio y cambie a ese
directorio.
5. Ejecute el script . . / c o n f i g u r e para configurar el rbol fuente.
6. Ejecute la utilidad make para crear los binarios.
7. Ejecute el comando make c h e c k para garantizar que todo est correctamente construido.
8. Ejecute el comando make i n s t a l l para instalar los binarios.
un
Cuando tenga instaladas las utilidades e 2 f s p r o g s puede empezar utilizndolas tal y como se discute en las siguientes secciones.
-1
/dev'h.j7
9)/08/9
1er FXT2 FS 0 3 b
^none>
' :Ot. Ve: : 1 -A)l v l C c ^ i -cidl 1 -4d 14- 9 2 O-,,1
0xEF3 3
1 (dynami c)
fi1etype spar.se SUpf ;r
clean
Continu
Linux
16 8 4 4 8 0
13470471
673523
13 2 2 5 7^8
1674469
1
1024
1024
8192
8192
1024
128
Thu Feb 15 17 51 19 2301
Thu Feb 15 17 51 51 2301
1
20
Thu Feb 15 17 50 23 2001
15552000 ( 6 me)n^ v i r )
Los aspectos que se discuten a continuacin son los que estn marcados en
negrita en el listado anterior:
La utilidad e2 f s c k le har una serie de preguntas, que puede obviar utilizando la opcin - p .
tliil
modular, lo que significa que prcticamente se puede instalar todo como mdulos
kernel separados. Pero volver a compilar su kernel se encuentra ms all del
objetivo de este libro. Si necesita saber cmo volver a compilar su kernel, puede
encontrar los detalles en h t t p : / /www . k e r n e l . o r g .
F77
archivos (a menudo llamados descriptores de archivos) en nnn, simplemente aada las lneas siguientes a su script / e t c / r c . d / r c . l o c a l :
* No olvide reemplazar nnn con el nmero apropiado
echo nnn > /proc/sys/fs/file-max
Por ejemplo:
echo
soft
hard
nofile
nofile
1024
8192
required
/lib/security/pam_limits . so
soft
hard
nproc
nproc
4096
8192
mi
1000000
unlimited
unlimited
unlimited
unlimited
1024
8
8192
unlimited
12287
unlimited
-1
que muestra todos los mdulos que se han construido en su ejecutable Apache.
Si observa algo que no necesita, elimnelo ejecutando el script c o n f i g u r e con
las opciones de la lnea de comando apropiadas. Por ejemplo, si no pretende
utilizar scripts CGI o SSI, puede eliminar estas opciones de Apache ejecutando el
siguiente comando desde el directorio de distribucin de la fuente:
./configure
--prefix=/usr/local/apache \
--disable-cgi --disable-cgid \
--di sable-include
y entonces volver a compilar y a instalar Apache con el comando make & &
make i n s t a l l . Si su sistema operativo le permite eliminar informacin simblica innecesaria desde los ejecutables y arrancarlos, entonces puede ahorrar
algo de memoria. Por ejemplo, el siguiente comando:
strip
httpd
EE]
EJI
Hub Ethernet
Switch Ethernet
El ancho de banda total est determinado por el nmero de puertos en el switch. Es decir, un switch 100MB de 12
puertos, puede soportar un ancho de
banda superior a 1200MB/seg, refirindose al ancho de banda del switch mximo que se puede agregar.
Router
Servidor NFS
Servidor Web 1
Servidor Web 2
Hub
Servidor Web 3
Servidor de bases
de datos
Router
Hardware de equilibrio
de carga
Servidor
Web1
Servidor
NFS
Switch
Servidor base
de datos
Servidor
Web 2
Switch
Servidor
Web 3
Figura 22.4. Una red mejorada
F7E1
bilidad de desplegar varios servidores del mismo tipo para implementar un servicio ms eficaz. Esto es especialmente aplicable a la Web. La siguiente seccin
discute el modo en el que puede emplear un esquema sencillo de equilibrio de
carga utilizando un servidor DNS.
IN
IN
IN
IN
A 192.168.1.10
A 192.168.1.20
CNAME
CNAME
wwwl
www2
fr>J
una solucin de hardware que utilice los nuevos productos Director, como Web
Director (www . r a d w a r e . com), Ace Director (www . a l t e o n . com) o Local
Director (www . c i s c o . com).
La figura 22.5 muestra una red Web, que consiste en dos Local Directors
CISCO; un conjunto de servidores proxy; servidores Web Apache; m o d _ p e r l ,
PHP, servidores de aplicaciones Java Servlet; y servidores de bases de datos.
Todos los dominios Web alojados es esta red, tienen una direccin IP virtual
que se traduce en el Local Director. El Local Director utiliza esta informacin y
la informacin del estado del servidor, que se almacena, para determinar de dnde
obtener el contenido. El segundo Local Director simplemente funciona a la espera
en caso de que falle el primero. Local Director le permite una recuperacin de
estado cuando se conectan dos Local Directors mediante un cable especial. Si el
primero falla, entonces el segundo puede tomar el poder sin interaccionar con el
exterior.
Local Director
(Secundario)
Local Director
(Principal)
Servidor proxy 2 I
Servidor proxy 1
Switch
Servidor Web 1
I Servidor Web 2
I Servidor Web 3
Switch
4
4
4
Servidor App 1
Servidor base
de datos
1
Servidor App 2
Servidor base
de datos
(datos replicados)
Servidor App N
Figura 22.5. Una red Web que utiliza Local Director para equilibrio de carga
&l
frU
tizar que la pgina solicitada se puede enviar al navegador Web. Por ejemplo, si
un servidor Apache que se est ejecutando en w w w . n i t e c . c o m , recibe una
solicitud del tipo h t t p : / /www . n i t e c . c o m / t r a i n i n g / l i n u x / s y s a d /
i n t r o . h t m l , Apache realiza las comprobaciones siguientes:
/ . taces
'' DocRoot'' / . taces
''.DocRoot '. /1 rain ing/ . taces
IDocRooto/training/linux/.taces
"DocRoot ; /training/1inux/sysad/.taces
/www/nitec/htdocs/training/1inux/sysad/.taces
None
*k\M
disponibles mediante la Web. Por ese motivo Apache ofrece un modo de desactivar
enlaces simblicos o nicamente seguir un enlace simblico si la ID del usuario
del enlace simblico, coincide con el dueo del servidor. Por ejemplo, la configuracin siguiente de la seccin del servidor principal (es decir, fuera de cualquier
configuracin de un host virtual) de h t t p d . c o n f le dir a Apache que no siga
los enlaces simblicos, desactivando todos los accesos a enlaces simblicos mediante la Web.
<Directory />
Options -FollowSymLinks
</Directory>
Esto tiene un precio significativo en el rendimiento. Para cada solicitud, Apache realiza una llamada condicional al sistema, l s t a t () , para garantizar que
no se est violando la poltica de no seguir enlaces simblicos.
Para aumentar el rendimiento al tiempo que tenemos enlaces simblicos y
seguridad, realice lo siguiente:
1. Encuentre la manera de no utilizar ningn enlace simblico en el rbol de
documentos Web. Puede utilizar el comando y ou r _ t o p _ w e b _
d i r e c t o r y - t y p e 1 - p r i n t para encontrar todos los enlaces
simblicos que existan en su directorio Web de mximo nivel, entonces
puede determinar cmo evitarlos.
2. Utilice la configuracin siguiente en la seccin del servidor principal de
h t t p d . c o n f para activar enlaces simblicos:
<Directory />
Options FollowSymLinks
</Directory>
Ajustar estas directivas al azar no es una buena idea. Como su sitio Web, su
patrn de trfico y sus aplicaciones son probablemente distintos a las de otros
sitios, no hay una frmula totalmente adecuada para calcular los valores apropiados para estas directivas.
Le mostrar una tcnica, sin embargo, que utiliza A p a c h e B e n c h para determinar los valores apropiados.
Por ejemplo:
./ab
-n
1000
-c
50
http://www.dcmain.com/
Apache/2.0.16
localhost
80
Document Path:
Document Length:
/
1311 bytes
Concurrency Level:
Time taken for tests:
Complete requests:
Failed requests:
Total transferred:
HTMT. transferred:
Requests per second:
Transer rate:
50
8.794 seconds
1000
0
1754000 bytes
1311000 bytes
113.7]
199.45 kb/s received
max
5
550
555
usr/local/src/fcache
modules.
/usr/local/src/httpd_2.0.16/
2. Cambie el directorio al subdirectorio m o d u l e s / f c a c h e de la distribucin fuente de Apache. Observe el archivo c o n f ig . m4 y decida si necesita cambiar algo para su sistema. Lo ms probable es que no tenga que
realizar ningn cambio. Si cambia algo, debe tener claro en qu punto se
encuentra.
3. Ejecute a u t o c o n f . para configurarlo todo.
4. Vuelva a cambiar el directorio a la distribucin fuente de Apache de mximo nivel y ejecute el script c o n f i g u r e de Apache con todas las opciones
que utilice normalmente (ver el archivo c o n f ig . s t a t u s ) y la opcin -enable-fcache.
5. Compile e instale Apache como siempre, utilizando el c o m a n d o m a k e & &
make i n s t a l l .
6. Reinicie el servidor Web Apache utilizando el comando / u s r / l o c a l /
httpd/apachectl
restart.
Ahora est preparado para utilizar este mdulo. Para meter en la memoria
cach las imgenes GIF que se sirven desde un directorio llamado common_
i m a g e s , por ejemplo, utilizamos el siguiente segmento de configuracin en
h t t p d . conf:
<Directory /common images>
fcache
fcache CacheTypes
fcache_MaxSize
fcache_RecomputeTables
</Directory>
On
image/gif
10240
600
La directiva f c a c h e _ R e c o m p u t e T a b l e s determina el tiempo en segundos para recalcular las tablas de cach. El valor por defecto de 10
minutos es suficiente para la mayora de los objetivos.
EE1
Configurar Squid
Para configurar Squid, siga los siguientes pasos:
1. Tiene que crear un grupo llamado n o g r o u p empleando el comando
g r o u p a d d n o g r o u p . Squid utilizar este grupo.
2. Ejecute el comando chown -R n o b o d y : n o g r o u p / u s r / l o c a l /
s q u i d para asignar el dueo del directorio / u s r / l o c a l / s q u i d y
todos sus subdirectorios al usuario nobody y al grupo llamado n o g r o u p .
Esto le permite a Squid (ejecutndose como el usuario nobody) crear
directorios y archivos cach y escribir registros. Modifique el archivo /
u s r / l o c a l / s q u i d / e t c / s q u i d . c o n f tal y como se discute en los
pasos siguientes.
3. Decida en qu puerto quiere ejecutar el proxy-cach. Yo he utilizado el
8080, que es el que utilizan la mayora de los proxy-cach. Aada la lnea
siguiente en s q u i d . conf:
http_port
8080
Esto le dice a Squid que escuche en el puerto 8080 las solicitudes proxy.
TRUCO: Puede utilizar otro puerto, si as lo prefiere. Asegrese de no
utilizar un puerto que ya se est utilizando en otro servidor. En teora, tiene
que utilizar nmeros de puerto por encima de 1024 para evitar colisionar
con servicios estndar, pero si sabe que no est ejecutando un servidor Web
en el puerto 80 y quiere ejecutar su proxy-cach en ese puerto, puede hacerlo. Adems, una forma rpida de comprobar si est disponible un puerto es
ejecutar el comando t e l n e t l o c a l h o s t p o r t n u m b e r donde
p o r t n u m b e r es el nmero de puerto que quiere utilizar para su proxycach. Si obtiene un mensaje de fallo de conexin, el puerto no se est
utilizando.
4. Tiene que definir el lugar en el que quiere guardar los datos cacheados.
Defina las siguientes lneas en el s q u i d . conf:
cache__dir u f s
/usr/local/squid/cache
100
16
256
TETE
"rechaza a todo el mundo, slo permite el acceso a los que deberan tenerlo." Por eso, tiene que crear una lista de control de acceso (ACL) que
permita a su red acceder al proxy-cach. Por ejemplo, si su direccin de
red es 1 9 2 . 1 6 8 . 1 . 0 con una mscara de red 2 5 5 . 2 5 5 . 2 5 5 . 0 , entonces puede definir la siguiente lnea en s q u i d . c o n f para crear una
ACL para su red:
acl
local__net
src
192.168.1.0/255.255.255.0
6. Squid tiene que saber que las mquinas en l o c a l _ n e t ACL tienen acceso al proxy-cach, lo que puede llevar a cabo aadiendo la siguiente lnea
en s q u i d . c o n f justo antes de la lnea h t t p a c c e s s d e n y a l l :
http access
al lew
local
net
7. Tiene que decirle a Squid el nombre de usuario del usuario que gestiona el
cach. Si quiere utilizar webmaster@yourdomain . com como el usuario
que gestiona el cach, tiene que definir la lnea siguiente en s q u i d . conf.
c a c h e mqr
webmaster
-z
Iniciar su Squid
Una vez que ha configurado Squid, puede ejecutar el comando / u s r / l o c a l / s q u i d / b i n / s q u i d & para iniciar Squid por primera vez. Puede comprobar que est funcionando de varias formas:
en h t t p : / / s q u i d . n l a n r . n e t .
Determinar reglas para Squid
Por defecto, Squid no restringe el acceso a sus usuarios a ningn sitio. Puede
definir reglas en su archivo s q u i d . c o n f para formar listas de control de acceso y permitir o rechazar a visitantes de acuerdo con esas listas; por ejemplo:
acl BadWords url regex foo bar
Aadiendo la lnea anterior, habr definido una regla ACL llamada BadWords
que corresponde a cualquier URL que contenga las palabras f oo o b a r .
NOTA: Esto se aplica a h t t p : / / f o o . d e e p w e l l . c o m / p i c t u r e s
y a h t t p : / / w w w . t h e k e n n e d y c o m p o u n d . c o m / o u r b a r . j pg porque
ambas contienen palabras que son miembros de BadWords.
Aadiendo la siguiente lnea:
http_access deny BadWords
en w w w . s e n e t . c o m . a u / s q u i r m .
El archivo cachemgr.cgi se encuentra en la configuracin de Squid. Es un
programa CGI que le permite ver estadsticas sobre su proxy, adems de
apagar e iniciar Squid. Solo necesita unos pocos minutos de su tiempo para
instarlo, y le da detalles explcitos sobre cmo est funcionando su proxy.
Si quiere ajustar el cach Web, esta herramienta le ayudar.
E3
16 MB
puede permitir que Squid utilice 16MB de memoria, para mantener pginas
Web en la memoria. Por el mtodo de ensayo y error, podra descubrir si necesita
una cantidad distinta.
ADVERTENCIA: El c a c h e mem no es la cantidad de memoria que consume Squid; slo determina la mxima cantidad de memoria que utiliza
Squid para mantener pginas Web, imgenes, y cosas de este estilo. La
documentacin de Squid dice que puede esperar que Squid consuma tres
veces ms de esta cantidad.
on
los archivos de / v a r / l o g / s q u i d de forma parecida a los archivos de registro del servidor Web. Este arreglo le permite utilizar programas de estadstica
Web como Analog o Webtrends para analizar sus registros y examinar los sitios
que estn viendo sus usuarios.
Evitar el caching negativo
Si escribe una URL y descubre que la pgina no existe, hay posibilidades de
que la pgina no vaya a existir en el futuro. Asignando un nmero determinado de
minutos a n e g a t i v e _ t t l , como se muestra en el siguiente ejemplo, puede
controlar cunto tiempo recuerda Squid que no encontr una pgina. A esto se le
llama caching negativo.
negative_ttl 2 minutes
FZTI
NOTA: El mdulo modjoackhad utiliza la direccin Ethernet de amplia difusin para comunicar el estado de los recursos desde cada servidor.
El ejemplo anterior utiliza la direccin Ethernet de amplia difusin; puede
utilizar direcciones de amplia difusin.
Si conecta con la misma base de datos para cada solicitud, entonces considere abrir la conexin a la base de datos fuera del manejador de solicitudes. Por ejemplo:
sub handle {
my $r = shift;
m y $ q = n e w C GI ;
my $id -- $q->param ( v id' ) ;
E3
DBI->connect(5dataSource,
$dbUser,
$dbPassword,
di e;
{ AutoCommit -> 1 ))
(;
if (5@) {
# muere "No puede conectar con la base de datos
# 3DB1::errstr";
# conexin fallida
print STDHRR "Can not connect to $da ta.'jour ce \n";
print STDERR "DB2 Server Error: $DBI::errstr \n";
I
my $statement
$id";
my $sth
ID =
= $dbh->prepare(Sstatement);
my $rv
^ $sth->execute;
if (! $rv )
# No encuentra registro.
while
( my @fields = $sth->fetchrow_array){
",
join(\',
@fields),
"<br>";
}
$sth->finish;
Si es posible, prepare las sentencias SQL una vez y reutilice las sentencias
preparadas para ahorrar tiempo. El ejemplo anterior se puede escribir de
forma ms eficaz:
FZE1
my $APP_RUN_COUNT = O;
my ($dbh, $sth);
sub init {
eval {
$dbh = DBI->connect($dataSource,
$dbUser,
$dbPassword, { AutoCommit => 1 })
die;
};
if ($@)
my preparistatement {
my $dbh = shift;
my $statement = "SELECT myfield from mytable where ID =
?";
$sth = $dbh->prepare($statement);
sub handle {
my $r = shift;
if ($APP_RUN_COUNT++ == 0) {
init ();
prepare_statement() ;
}
my $q
= new CGI;
my $id
= $q->param(vid' ) ;
my $rv
= $sth->execute($id);
if (! $rv ) {
http://www.domain.com/index.htrnl
Servidor de pginas
estticas
Bienvenido a DOMAIN.COM
Haga clic en login para entrar
en la intranet. Observe nuestra
poltica privacy para obtener
los detalles
<a href=http://myapps.domain.com/login>login</a>
<a href=http://www.doman.com/privacy.html>privacy</a>
login
Pgina generada
dinmicamente
Servidor de pginas
estticas
Figura 22.6. Separar contenido esttico del dinmico (script generado por mod_perl)
Puede cambiar myapps con lo que quiera. Si realiza este cambio, tiene
que cambiarlo tambin en cualquier otra localizacin en la que hayamos
mencionado esta discusin. Aqu, el servidor Apache que est sirviendo
fr/M
FETl
Aplicaciones FastCGI
No. Las aplicaciones Fast
CGI pueden ejecutarse en
un servidor Web que no sea
Apache como US, el servidor Web Netscape, y similares.
Scripts m o d p e r l
S. Slo Apache soporta el
mdulo mod p e r i .
Aspecto
Aplicaciones FastCGI
Scripts mod_perl
S.
Se ejecuta como
un proceso externo.
S.
No.
Se puede ejecutar
en una mquina
remota.
S.
No.
Se ejecutan varias
instancias de
aplicacin/script.
Normalmente, se ejecuta
una sola aplicacin FastCGI
en respuesta a varias solicitudes en cola. Sin embargo, si la carga es alta, se
ejecutan varias instancias
de la misma aplicacin.
El nmero de instancias
de scripts mod p e r l que
se ejecutan es igual al
nmero de procesos hijo
del servidor Apache.
Gran soporte
disponible.
Conectividad a
bases de datos.
En este captulo
1. Entendemos las caractersticas de una red Web.
2. Incrementamos la seguridad DNS.
3. Realizamos un equilibrio de carga en una red Web.
4. Gestionamos el almacenaje Web.
5. Creamos una red back-end para mantenimiento.
6. Fortificamos su red Web.
En este captulo, aprender algunas consideraciones de diseo para construir
una red Web. Una red Web es una red de servidores Web que crea un servicio
Web. Por ejemplo, Yahoo! Utiliza un gran nmero de servidores Web, servidores
de aplicacin y servidores de bases de datos para crear una gran cantidad de
servicios Yahoo!
Si ha decidido integrar la Web en su negocio, debe tener en cuenta una solucin Web que pueda crecer ms all de un solo servidor Web o de un espacio de
disco Web compartido en una ISP. Una red Web es una solucin. En este captu-
friAl
lo, aprender a utilizar red y conceptos de gestin de red con respecto a las
consideraciones de diseo para construir una red Web adecuada. Aunque el captulo se centra en soluciones basadas en Apache en Linux, la mayora de las consideraciones se pueden aplicar a otras plataformas.
Acceso Web con equilibrio de carga. Los usuarios conectan con uno o
ms servidores Web, que son seleccionados automticamente en funcin
de la carga del sistema y la disponibilidad.
Redes back-end eficaces. Los sitios Web grandes ejecutan muchas aplicaciones y realizan millones de consultas a bases de datos, as como muchas
otras tareas del lado del servidor, para dar lugar a alta calidad y a contenido personalizado para sus clientes. Por tanto es necesaria una red slida
del lado del servidor. Una red back-end es una red a la que no pueden
acceder los visitantes Web pero que sirve de espina dorsal para mantener
cada servidor actualizado y sincronizado con el contenido. Las redes backend tambin le permiten al administrador realizar varias tareas de administracin del sistema como son el backup, la actualizacin del software, etc.
Alto grado de seguridad. Los diseadores deben poner atencin en los
aspectos de seguridad cuando disean redes Web porque los piratas
informticos atacan a menudo las redes Web que tienen brechas de entrada
y utilizan estas redes Web como plataformas para atacar otros sitios. Esto
puede dar lugar a un problema legal muy serio.
Utilice un servidor DNS secundario fuera del sitio. Esto significa que si su
servidor DNS local se apaga, el servidor DNS secundario seguir siendo
funcional. Por ejemplo, si su servidor DNS principal est situado en una
red que est fuera de servicio temporalmente, el servidor secundario responder y dirigir el trfico a los recursos adecuados. Si no quiere tener un
servidor DNS secundario y mantenerlo usted mismo, puede utilizar un
servicio como s e c o n d a r y . com.
Utilice al menos un servidor DNS dedicado, si es posible, porque los sistemas que ejecutan varios servicios tienen ms probabilidades de colgarse
con frecuencia que los que ejecutan un solo servicio.
Ejecute un cach local DNS si alguna de sus aplicaciones Web necesitan
traducir direcciones IP DNS en nombres de host. Por ejemplo, hay sistemas de anuncios comerciales que utilizan direcciones IP que corresponden
a zonas demogrficas realizando bsquedas DNS asincrnicas. Este tipo
de aplicaciones pueden utilizar el caching DNS.
Utilice monitorizacin del software sobre la base de una rutina para garantizar que el dato DNS es correcto y se encuentra disponible.
IN
IN
IN
IN
A 192.168.1.10
A 192.168.1.20
CNAME
CNAME
wwwl
www2
H1M
zando solicitudes HTTP de prueba auto generadas. Por lo tanto, estos dispositivos ofrecen un mayor control para su esquema de equilibrio de carga.
Algunos de los dispositivos de equilibrio de carga tambin estn disponibles
para crear grupos de servidores en los que algunos servidores tengan ms prioridad que otros. Por ejemplo, si tiene un sistema Pentium 4 1.3 GHz con 2GB de
RAM y un sistema Pentium III 550 MHz con 512GB de RAM, puede darle mayor
prioridad al sistema Pentium 4, ya que es ms poderoso y es ms probable que sea
capaz de servir muchas ms solicitudes que el sistema Pentium III. Local Director
(CISCO) y Web Director (Radware) son soluciones hardware de equilibrio de
carga que funcionan muy bien.
La figura 23.1 muestra una solucin sencilla de equilibrio de carga en la que
cada solicitud del cliente llega al hardware de equilibrio de carga.
Solicitud
LU
Equilibrador
de carga
Switch
E
Servidor Web 1
Servidor Web 2
Servidor Web N
El equilibrador de carga decide qu servidor Web utilizar para servir la solicitud y pasarla al servidor ms adecuado, que responder a la solicitud de la forma
habitual. El criterio de seleccin para el servidor Web puede depender de la prioridad, la disponibilidad y la seguridad.
Se puede observar que esta solucin tiene un solo punto de entrada en la red
Web. Por ejemplo, las solicitudes para h t t p : / /www . domain . com deben llegar al equilibrador de carga, que internamente la traduce a una solicitud para que
la sirva el servidor Web de la red. La figura 23.2 muestra un ejemplo de una red
Web con la carga equilibrada.
Una solicitud para h t t p : / / www . d o m a i n . com se enva al equilibrador de
carga porque www.domain.com traduce la direccin IP del equilibrador de
U.+M
carga. En otras palabras, debe establecer que los registros DNS apunten a
www.domain.com en su sistema de equilibrio de carga. El equilibrador de
carga decide entonces cul de los servidores Web www[l-N] . d o m a i n . c o m
responder a la solicitud.
1: http://www.domain.com
Lf
Solicitud
207.183.233.17
Equilibrador
de carga
207.183.233.17
Equilibrador
deca
I31.
Switch
0
-j Servid^
Servidor Web 1
wwwl .domain.com
207.183.233.18
Servidor Web 2
Servidor Web N
www2.domain.com
207.183.233.19
wwwN.domain.com
207.183.233.N
Observando la figura 23.2, observar que hay una segunda conexin del
equilibrador de carga con el switch de la red interna, as como una conexin
directa entre el equilibrador de carga principal (a la izquierda) y el equilibrador
de carga secundario (a la derecha). La conexin directa es un cable cruzado de
red o una conexin RS232 en serie. Los dispositivos de hardware utilizan esta
conexin para mantener el estado. En otras palabras, el equilibrador secundario
sigue la pista de cada una de las operaciones realizadas por el equilibrador principal. Si el primer equilibrador de carga deja de estar disponible por un fallo de
hardware, el equilibrador de carga secundario inicia respondiendo a la misma
direccin IP que el principal y se hace cargo del trabajo. La conexin cruzada
garantiza que el equilibrador de carga secundario tenga acceso al estado de la red
y que por lo tanto sea capaz de restablecer el estado actual de conexiones entre el
sitio y los clientes.
Adems tenga en cuenta que si utiliza la herramienta de traduccin NAT en su
hardware de equilibrio de carga (si est equipado con esta caracterstica), no
necesita direcciones IP rutables para cada uno de sus servidores Web.
Web. Esta seccin discute algunas de las principales tecnologas de almacenamiento, as como las tcnicas de rendimiento prcticas para potenciar su rendimiento de almacenamiento bajo la plataforma Linux.
RAID de hardware
Una solucin RAID de hardware utiliza unidades de disco SCSI con una tarjeta de control RAID. Independientemente del tipo de RAID (hardware o software)
que utilice, tendr que seleccionar un nivel RAID adecuado para sus necesidades.
Los niveles ms habituales para RAID son 1 y 5. RAID 1 es una pura redundancia de unidades de disco. Si quiere utilizar redundancia RAID 1 de unidades de
discos y quiere tener un espacio total de 100GB, tiene que introducir 200GB de
espacio en la unidad de disco. Aunque estn disponibles los niveles de 2 a 4 de
RAID, RAID 5 suele ser la mejor eleccin. Si utiliza N dispositivos de tamao S,
el tamao del array completo ser (N-1)*S. El espacio sobrante se utiliza para
paridad de informacin (redundancia). Se recomienda utilizar el mismo tamao
para no gastar el espacio de la unidad de disco porque se utiliza el disco ms
pequeo entre N discos para calcular el espacio de disco bajo RAID 5.
KEE1
Dispositivos de almacenamiento
Actualmente tenemos hardware especial para cada funcin, de modo que los
dispositivos de almacenamiento (que son sistemas de almacenamiento dedicados)
suelen ser una solucin habitual para los administradores de red y de sistemas.
Hoy, puede comprar dispositivos de almacenamiento dedicados que transmiten en
cadena 10, 100 o lOOOMbits Ethernet y proporcionan servicios de almacenaje
RAID. Estos dispositivos se suelen gestionar de forma remota a travs de la
Web. Son adecuados para organizaciones pequeas y medianas y suelen ser fciles de gestionar y de configurar.
TRUCO: Por supuesto, si tiene presupuesto suficiente, puede utilizar discos de canal de fibra o utilizar una solucin SAN. La ltima opcin es la
que se utiliza normalmente en empresas con alta demanda de almacenamiento de datos. Puede utilizar tambin una solucin hardware / software
RAID, que se ha discutido ya en este captulo.
Independientemente de su decisin con respecto a utilizar discos SCSI o IDE,
debera utilizar varios discos y obtener un rendimiento adecuado. Como mnimo,
debera utilizar dos discos, uno para el sistema operativo y el software y el otro
para los datos. Para los servidores Web, normalmente recomiendo un mnimo de
tres discos. El tercer disco se utiliza para los registros generados por los sitios
frMl
Obtener hdparam
Para aumentar el rendimiento de su disco E1DE moderno, debe determinar
primero el rendimiento actual de su disco antes de realizar cualquier ajuste. Por lo
tanto, necesita una herramienta de medida del rendimiento de su sistema de discos. La herramienta h d p a r a m es perfecta para este trabajo; puede bajar la distribucin fuente de h t t p : / / m e t a l a b . u n c . e d u / p u b / L i n u x / s y s t e m /
h a r d w a r e / . Para compilar e instalar la herramienta h d p a r a m , siga estos pasos:
1. Establzcase como raz.
2. Extraiga la distribucin fuente en un directorio adecuado como / u s r /
l o c a l / s r c . Por ejemplo, y ejecute el comando t a r x v z f h d p a r m 3 . 9 . t a r . g z en / u s r / l o c a l / s r c para extraer la distribucin fuente de la versin 3.9 de h d p a r a m .
3. Cambie al nuevo subdirectorio creado y ejecute el comando make
i n s t a l l para compilar e instalar el binario h d p a r a m y la pgina del
manual. Por defecto, el binario se instala en el directorio / u s r / l o c a l /
s b i n y se llama h d p a r a m .
ADVERTENCIA: Como hdparam le permite cambiar el comportamiento del sistema de discos IDE/EIDE, puede dar lugar a que el sistema se
cuelgue debido a un mal uso o a una configuracin inadecuada. Le recomiendo realizar una copia de los datos antes de utilizar hdparam. Adems, es una buena idea experimentar con h d p a r a m en el modo de un solo
usuario. Puede reiniciar el sistema y forzarlo para que utilice el modo de un
solo usuario introduciendo l i n u x s i n g l e en el prompt l i l o durante
en reinicio.
/dev/hda
Como puede ver, est desactivado prcticamente todo por defecto. Algunos de
estos valores por defecto se tienen que cambiar para aumentar el rendimiento del
sistema. Antes de continuar el proceso, necesita ms informacin para el disco
duro. Ejecute el comando siguiente:
hdparm -i
/dev/hda
/dev/hda
-ml6
/dev/hda
Ahora ejecute la prueba de rendimiento utilizando el comando h d p a r a m tT / d e v / h d a para ver el cambio. Para el sistema del ejemplo, el cambio es el
siguiente:
/dev/hda:
Timing buffer-cache reads: 128 MB in 1.01 seconds = 126.73 MB/sec
Timing buffered disk reads: 64 MB m 16.53 seconds = 3.87 MB/sec
EH
-ml6
-c3
/dev/hda
E3
operativo puede atender a otras interrupciones como las de I/O de red, I/O en
serie, y similares, mientras esperan que finalice una transferencia de datos basada
en el disco.
Hay muchas ms opciones h d p a r a m con las que puede experimentar; sin
embargo, tenga cuidado con la mayora de las opciones porque es muy fcil que se
corrompan los datos. Adems, una vez que encuentre un conjunto de opciones que
funcionen, debera utilizarlas en el comando hdparam en el script / e t c / r c . d/
re . l o c a l , de modo que se asignen cada vez que inicie el sistema. Por ejemplo,
yo aad la siguiente lnea al archivo / e t c / r c . d / r c . l o c a l en uno de mis
sistemas Red Hat Linux nuevo:
hdparm -ml6 - c 3 - u l
-di
-X66
/dev/hda
Ahora que su disco duro est ajustado para mejor rendimiento, vamos a ver
cmo puede ajustar el sistema de archivos que acta como interfaz para sus discos. Como Linux utiliza el sistema de archivos e x t 2 , en la prxima seccin
vamos a ver los aspectos que hay que ajustar en ese sistema de archivos.
tsize/fcnt);
} '
Kifctf
5. Ejecute el script . . / c o n f i g u r e para configurar el rbol fuente. Ejecute, entonces, la utilidadmake para crear los binarios. Ejecutemake c h e c k
para garantizar que todo est construido correctamente. Finalmente, ejecute el comando make i n s t a l l para instalar los binarios.
Una vez que tiene instaladas las utilidades e 2 f s p r o g s puede empezar a
utilizarlas tal y como se discute en la siguiente seccin.
Utilizar la utilidad tune2fs para la puesta a punto del sistema
de archivos
Puede utilizar las utilidades t u n e 2 f s para ajustar varios aspectos de un
sistema de archivos e x t 2 . Sin embargo, nunca debe aplicar las utilidades e x t 2
en un e x t 2 montado y debe realizar siempre un backup de sus datos cada vez que
modifique cualquier cosa que pertenezca al sistema. En esta seccin, vamos a ver
cmo emplear la utilidad t u n e 2 f s (que forma parte del paquete e2 f s p r o g s )
para poner a punto un sistema de archivos ext2 sin montar llamado / d e v / h d a 7 .
Si utiliza uno o ms de los aspectos que se discuten a continuacin, no olvide
cambiar el nombre de la particin ( / d e v / h d a 7 ) con el nombre apropiado. Para
empezar, ejecute el comando siguiente para determinar que t u n e 2 f s muestra
aspectos actuales para el / d e v / h d a 7 sin montar:
/sbin/tune2fs
-1
/dev/hda7
WrM
Mount count:
Mximum mount count:
Last checked:
Check interval:
Next check after:
Reserved blocks uid:
Reserved blocks gid:
First inode:
Inode size :
1
20
Thu Feb 15 17:50:23 2001
15552000 (6 months)
Tue Aug 14 18:50:23 2001
0 (user root)
0 (group root)
11
128
Los aspectos que se discuten a continuacin son los que estn marcados en
negrita en el listado anterior:
check
montar en modo lectura/ escritura tras una semana. Del mismo modo, el comando
/ s b i n / t u n e 2 f s - - i O / d e v / h d a 7 desactiva las comprobaciones f s c k
basadas en el tiempo.
La utilidad e2 f s c k le har una serie de preguntas, que puede obviar utilizando la opcin - p .
n&w
KH1
instrucciones sobre el kernel, que puede encontrar en manuales, para compilar e instalar su versin del kernel. Supongo que la mayora de los sistemas de los lectores estn basados en i3 8 6.
10. Copiebzlmage en / b o o t / v m l i n u z - 2 . 4 .1 y edite el archivo / e t c /
l i l o . c o n f para incluir una nueva configuracin como la siguiente:
image=/boot/vmlinuz-2.4.1
label=linux2
read-only
root=/dev/hdal
ADVERTENCIA: Para realizar esta comparacin, no tebe almacenar ningn dato en esta particin. Por eso, tiene que realizar un backup de todo lo
que tenga en / j f s ya que se va a borrar todo lo que se encuentre en / j*s
durante este proceso.
Para realizar una comparacin con benchmark ReiserFS, siga los siguientes
pasos:
1. Tiene que crear un script shell llamado r e i s e r f s _ v s _ e x t 2 . b a s h en
el directorio / t m p . Este script se puede observar en el listado 23.1.
Listado 23.1. /tmp/reiserfs_vs_ext2.bash
#!/bin/bash
#
# Este script est creado basado en el script file_test
# del benchmark de http://www.namesys.com
#
if [ $# -lt 6 ]
then
echo Usage: file_test dir_name device nfiles sizel size2
log ame
exit
fi
TESTDIR=$1
DEVICE=$2
LOGFILE=$6
/bin/umount $TESTDIR
/sbin/mkreiserfs $DEVICE
mount -t reiserfs $DEVICE $TESTDIR
FIE1
$TESTDIR
/jfs
/dev/hda7
100000
1024
4096
loq
6. Le pedirn que confirme que realmente quiere perder todos los datos de /
d e v / h d a 7 . Como ya ha vaciado esta particin para probar, diga que s y
contine. Esta prueba crear 100.000 archivos de distintos tamaos, desde
1K a 4K en los sistemas de archivos ReiserFS (reiserfs) y ext2, creando
cada uno de estos dos sistemas de archivos en / d e v / h d a 7 . Los resultados se registrarn en el archivo / t m p / l o g . A continuacin tiene una
muestra del archivo / t m p / l o g :
reiserfs 4KB orate 100000 files of size: from 1024 to 4096
real 338.68
user 2.83
sys 227.83
Filesystem
lk-blocks
Used Available Uses
Mounted on
/dev/hdal
1035660
135600
847452 14 % I
/dev/hda5
4134868
2318896
1605928 60% /usr
/dev/hda7
13470048
332940 13137108
3% /jfs
ext2fs 4KB crate 100000 files of size: from 1024 to 4096
real 3230.40
user 2.87
sys 3119.12
Filesystem
lk-blocks
Used Available Use%
Mounted on
135608
1035660
847444 14% /
/dev/hdal
/dev/hda5
4134868
2318896
1605928 60% /usr
/dev/hda7
13259032
401584 12183928
4 'o /jfs
Observe que para crear archivos de tamao 1K a 4K, ReiserFS (reiserfs) tarda
338,68 segundos de tiempo real; ext2 tarda 3230,40 segundos. De modo que el
rendimiento de ReiserFS (reiserfs) es muy bueno.
www?.xenews-1an.com(rw)
F7T1
NOTA: La sintaxis para los archivos exportados no debe ser la misma para
todas las marcas de Unix.
Los programas que deben ejecutarse a continuacin, son mountd (rpc.mountd)
y nfsd (rpc.nfsd). Estos dos programas se inician tambin automticamente desde
los scripts re en / e t c / r c . d / r c 3 . d. Cada vez que se realiza un cambio en el
archivo / e t c / e x p o r t s , sin embargo, hay que informar a estos dos programas
sobre el cambio. Un script llamado e x p o r t f s puede reiniciar estos dos programas, del siguiente modo:
exportfs
proto
tep
udp
udp
udp
tep
tep
udp
tep
port
111
111
635
635
635
635
2049
2049
rpcbind
rpcbind
mountd
mountd
mountd
mountd
nf s
nf s
Esto muestra que portmapper, mountd y nfsd tienen declarados sus servicios y
que funcionan bien. Antes de establecer el lado del cliente de NFS en los servido-
klM
res Web, es importante garantizar que los aspectos de seguridad estn dirigidos,
tal y como se discute en la siguiente seccin.
ALL
192. 1 6 8 . 1 . 0 / 2 5 5 . 2 5 5 . 2 5 5 . 0 .
Esto permite que todos los host de la red 1 9 2 . 1 6 8 . 1 . 0 tengan acceso a los
programas administrados por portmapper, como nfsd y mountd.
Otro aspecto de seguridad del lado del servidor es si se permite que la cuenta
root de un cliente, sea tratada como root en un servidor. Por defecto, Linux prohibe
root en el lado del cliente de NFS sea tratado como root del lado del servidor. En
otras palabras, un archivo exportado propiedad de root en el servidor no se puede
modificar por usuario root del cliente. Para forzar esta regla explcitamente, se
puede modificar el archivo / e t c / e x p o r t s :
/www/cgi-data
wwwl.xcnews-lan.com(rw,
www2.xcnews-lan.com(rw, root squash)
root_squash)
/www/cgi-data
nfs
/www/cgi-data
nfs
WST
Una vez que se ha decido por un buen sistema de discos como un RAID 5
utilizando un array de 1OK RPM de discos ultrawide SCSI, con un controlador de
discos que tenga un gran cach integrado, su siguiente cuello de botella es la
propia red. Un buen modo de reducir la prdida de rendimiento es aislar el trfico
de alto ancho de banda en su propia red. Por eso, recomiendo que conecte su
servidor o sus servidores NFS a sus clientes NFS utilizando una Ethernet de
lOOMbits dedicada. En otras palabras, tiene que crear una backbone (red troncal)
NFS que slo trabaje con paquetes NFS. Esto dar lugar a una red NSF de alto
rendimiento. Las opciones de configuracin del software que pueden ayudarle a
ajustar su servidor NFS, se comentan en las secciones siguientes.
WSE
1,
1.610u,
71.800s,
1:58.91,
61.7%
Aqu puede observar que este fue el primer experimento (1) de escritura.
6. Para medir el rendimiento de lectura de su sistema NFS, puede leer simplemente el archivo 512MB que cre en el paso 5 y ver el tamao que tiene.
Para volver a leerlo y calcular el tiempo de acceso a la lectura, ejecute el
siguiente comando:
time dd if=/mnt/nfsl/512MB.dat \
of=/dev/null \
bs=16k count=32768
1,
1.970u,
38.970s,
2:10.44,
31.3%
Aqu puede observar que esta era la primera (1) experiencia de lectura.
7. Ahora elimine el archivo 512MB.dat de / m n t / n f s l y desmonte la
particin utilizando el comando umount / m n t / n f s 1. Al desmontar el
directorio NFS garantizamos que el caching de discos no influye en nuestro prximo conjunto de pruebas.
8. Repita la prueba de escritura y escritura (pasos del 5 al 7) al menos cinco
veces. Debera tener un conjunto de notas del siguiente tipo:
Read,
Read,
Read,
Read,
Read,
1,
2,
3,
4,
5,
1 .971u,
1 .973u,
1 .978u,
1 .978u,
1 .978u,
38..970s,
38..970s,
38..971s,
38 .971s,
38..971s,
2::10..44,
2::10,.49,
2::10..49,
2::10 .49,
2::10..49,
31..3%
31..3%
31..3%
31..3%
31..3%
Write,
Write,
Write,
Write,
Write,
1,
2,
3,
4,
5,
1.
, 610u,
1.,610u,
1.,610u,
1..610u,
1 ,611u,
.
71.,800s,
71.,801s,
71.,801s,
71.,801s,
71.,809s,
1 :58.
: .91,
1::58..92,
1::58..92,
1::58..92,
1::58..92,
61 .7%
61..7%
61..7%
61..7%
61..7%
ii:W
nfs
EMl
lri:El
sobre cmo realizar las tareas de distribucin de archivos. El listado 23.2 muestra
uno de estos distfile, el r d i s t _ d i s t f i l e .
Listado 23.2. rdistdistfile
#
#
#
#
#
#
#
#
#
Se trata de un distfile muy sencillo. Define una variable llamada HOSTS que
tiene como valores dos entradas: h t t p d @ w w w l . d o m a i n . c o m y
httpd@www2 . d o m a i n . com. Esto le dice a rdist que utilice la cuenta de usuario h t t p d en wwwl . domain . com y en www2 . domain . com para conectarse. La siguiente variable, FILES, define los archivos y los directorios para
distribuir rdist. Este script supone que el servidor indicado mantiene todos los
archivos en el directorio /www o en la particin. Puede cambiar esta ruta o aadir
varias rutas (separadas por espacios).
La tercera variable es EXCLUDE_DIR. Esta variable est dirigida a realizar
una lista con todos los archivos y directorios que quiera excluir de la distribucin.
Los valores que puede ver en el ejemplo son importantes. El primer directorio, /
w w w / c g i - d a t a / , es el directorio de datos CGI en el que todos los scripts CGI
HXM
escriben sus datos. Este directorio se exportar al host del servidor Web mediante
NFS, de modo que no hay que copiarlo en cada uno de los servidores Web mediante rdist. El directorio / w w w / a p a c h e es en el que makesite escribe el archivo / w w w / a p a c h e / c o n f / h t t p d . conf, que tiene que copiarse, porque cada
servidor Web tiene su propio archivo de configuracin Apache en el directorio
local / w w w / a p a c h e . El valor final es / w w w / s e c u r e d , el cual es utilizado
por el servidor seguro como la raz de documentos y tiene que copiarse en los
servidores Web. El resto de archivos describen un sencillo comando:
${FILES} -> ${HOSTS}
install ;
except ${EXCLUDE_DIR);
Este comando toma todos los archivos y directorios que sealan las variables
FILES, y los instala en los hosts indicados por la variable HOSTS. Tambin le
dice a rdist que excluya los archivos y los directorios especificados por la variable EXCLUDE_DIR. Para ejecutar rdist (como h t t p d ) , utilice el comando siguiente desde la lnea de comandos:
/usr/bin/rdist -p /usr/sbin/rdistd \
-oremove,quiet \
-f /usr/local/rdist/ rdist__distf ile
#
# $Author$ (kabir@evoknow.com)
# $Version$
# $Id$
# $Date$
# SStatus
##############################################################
RDIST=/usr/bin/rdist
RDISTD=/usr/sbin/rdistd
DIST_FILE=/usr/local/rdist/rdist_distfi le
RDIST_OPTIONS=remove,nochkgroup,nochkmode,nochkowner,quiet
RDIST_LOCK_FILE=/tmp/rdist.lck
RDIST_LOG_FILE=/tmp/rdist.log
TOUCH_BIN=/bin/touch
DATE = M a t e '
# Si el script es llamado como un argumento, entonces
case "$1" in
boot)
# Como el argumento es 'boot,' se llama al script en el
# arranque del sistema, de modo elimine todos los archivos de
# bloqueo antiguos y los registros.
echo -n "Cleaning up rdistribute.sh tmp files: "
rm -f $RDIST_LOCK_FILE
rm -f $RDIST_LOG_FILE
echo "complete."
exit 0;
esac
# Si existe el archivo de bloqueo, entonces no hace nada.
if [ -f $RDIST LOCK FILE ]; then
exit 0
fi
# En caso contrario, crea el archivo de bloqueo utilizando
touch
$T0UCH_BIN $RDIST_LOCK_FILE
# Ejecute rdist
$RDIST -p $RDISTD -o$RDIST_0PTI0NS -f $DIST_FILE
# Archivo de bloqueo
rm -f $RDIST LOCK FILE
boot
Este script se puede programar para ser ejecutado por una entrada de cron en
/ e t c / c r o n t a b . Por ejemplo, para ejecutar este script a intervalos de 10 minutos, se puede aadir la siguiente entrada cron en / e t c / c r o n t a b :
0,10,20,30,40,50 * * * * httpd
dev/null
/usr/local/rdistribute. sh > /
E3
-t
fcfefel
est utilizando RAM utilizando el comando c a t / p r o c / m o u n t s y buscand una entrada como la siguiente:
none /ram ramfs rw 0 0
frWll
MOUNTCMD=/bin/mount
CHOWN=/bin/chown
CP=/bin/cp
echo -n "Creating ramfs file system in SMOUNTPOINT ";
SMOUNTCMD -t ramfs none $MOUNTPOINT
echo "done.";
echo -n "Copying $ORIG__DIR to 3M0UNTP0INT . . . ";
$CP -r $ORIG__DIR $MOUNTPOINT
echo "done.";
echo -n "Changing ownership to $USER:$GROUP for $MOUNTPOINT
$CHOWN -R $USER:$GROUP 3M0UNTP0INT
echo "done.";
"/ram/commonfiles/"
ill
207.183.233.17
Equilibrador
de carga
Solicitud
207.183.233.17
Equilibrador
de carga
Switch
www1.domain.com
207.183.233.18
Servidor Web 1
192.168.1.1
www2.domain.com
207.183.233.19
wwwN.domain.com
207.183.233.N
192.168.1. N
Switch
Servidor App 1
Servidor App 2
Base de datos
192.168.1.100
192.168.1.101
192.168.1.254
Red back-end
Figura 23.3. Una red Web con red front-end y red back-end
fr:U
Cada nodo del servidor Web tiene dos interfaces de red. Una interfaz se conecta con la red front-end 2 0 7 . 1 8 3 . 2 3 3 . 0 / 2 4 y la otra se conecta con la red
back-end 1 9 2 . 1 6 8 . 1 . 0 / 2 4 . La red front-end consiste en los servidores Web y
el hardware de balance de carga; la red back-end consiste en los servidores Web,
servidores de aplicacin y servidores de bases de datos.
Cuando llega una solicitud al equilibrador de carga activo (principal), tiene
lugar la siguiente cadena de acciones:
El equilibrador de carga determina el mejor servidor Web para servir solicitudes y pasar la solicitud al servidor Web apropiado.
El
Red front-end
207.183.233.17
Equilibrador
de carga
Solicitud
207.183.233.17
Equilibrador
de carga
Switch
www.[1-N].domain.com
Estancia de servidores Web
Red back-end
192.168.1.1
Equilibrador
de carga
192.168 1.1
Equilibrador
de carga
Switch
Estancia de la aplicacin
del servidor
Estancia de la base de
datos del servidor
Figura 23.4. Una red Web con equilibradores de carga front-end y back-end
fcEl
2. Ejecutan Tripwire para crear una base de datos firmada, de todos los archivos importantes del sistema, incluidos todos los binarios del sistema y
los archivos de configuracin.
3. Escriben la base de datos en un CD-ROM regrabable. Esto garantiza que
nadie puede modificar la base de datos Tripwire para esconder Trojanos y
proteger al programa de archivos de identidad modificados. Los administradores que tienen que controlar un pequeo nmero de archivos suelen
utilizar un floppy para almacenar la base de datos. Una vez que han escrito
la base de datos en el floppy, el disco se protege contra la escritura y, si lo
permite la BIOS, el disco duro se configura como un dispositivo de slo
lectura.
4. Establecen un trabajo cron para ejecutar Tripwire peridicamente (diariamente, semanalmente, mensualmente), de modo que la aplicacin utiliza la
versin del CD-ROM de la base de datos.
Obtener Tripwire
Red Hat Linux contiene el archivo binario RPM de Tripwire. Sin embargo,
siempre puede bajar la versin gratuita (LGPL) de Tripwire de un sitio mirrow
RPM como h t t p : / / f r . rpmf i n d . n e t . Yo baj el cdigo fuente de Tripwire
y los binarios de este sitio, utilizando h t t p : / / f r . rpmf i n d . n e t / l i n u x /
r p m 2 h t m l / s e a r c h . p h p ? q u e r y = T r i p w i r e . La fuente RPM que baj careca de algunos scripts de instalacin, por lo que tuve que bajar de nuevo la
fuente desde el sitio de desarrollo de Tripwire Open Source en h t t p : / /
sourceforge.net/projects/tripwire/.
El cdigo fuente que baj se llamaba t r i p w i r e - 2 . 3 . O - s r c . t a r . gz.
Poda encontrar la ltima versin en este sitio en el momento en que este texto fue
escrito.
Compilar Tripwire
Esta seccin le muestra cmo compilar, configurar e instalar Tripwire desde el
archivo t r i p w i r e - 2 . 3 . O - s r c . t a r . gz. Cuando siga los pasos que se describen a continuacin, asegrese de reemplazar el nmero de la versin con la
versin de Tripwire que haya bajado.
NOTA: Si desea instalar Tripwire desde el paquete RPM binario^ simplemente ej ecute el comando rpm - i vh t r i pw i re - v e r s i onrpm desde el directorio en el que est localizado Tripwire RPM. Seguir teniendo
que configurar Tripwire ejecutando t w i n s t a l 1. sh. Ejecute este script
desde el directorio / e t c / t r i p w i r e y salte al paso 7 en la seccin siguiente.
Ea
TWMAN,
TWDB,
TWDOCS,
TWSITEKEYDIR
install.cfg
install.cfg para:
Tripwire(R) 2.3 Open Source for Linux
NOTA:
(verbosity)
WrM
# informes de impresin.
TWREP0RTLEVEL=3
# TWSYSLOG determina si Tripwire registrar eventos en el
# registro del sistema
TWSYSLOG=false
#####################################
# Opciones de correo: Elige el mtodo
# apropiado y comenta la otra seccin
#####################################
# Opciones SENDMAIL: DEFAULT
#
# Tanto SENDMAIL como SMTP se pueden utilizar para enviar
# informes mediante TWMAILMETHOD.
# Determina qu programa sendmail utilizar.
#####################################
TWMAILMETHOD=SENDMAIL
TWMAILPROGRAM="/usr/lib/sendmail -oi -t"
#####################################
# Opciones SMTP
#
# TWSMTPHOST selecciona el host SMTP que hay que utilizar para
# enviar informes.
# SMTPPORT selecciona el puerto SMTP para el programa SMTP mail.
#####################################
# TWMAILMETHOD=SMTP
# TWSMTPHOST="mail.domain.com"
# TWSMTPPORT=25
###############################################################
# El copyright (C) 1998-2000 Tripwire (R) Security Systems, Inc.
# Tripwire (R) es una marca registrada del Purdue Research
# Foundation y tiene licencia exclusivamente para Tripwire (R)
# Security Systems, Inc.
###############################################################
/path/to/a/file/or/directory
-> mask;
Significado
rulename=name
Este atributo asocia un nombre con una regla. Realiza informes Tripwire ms fciles de leer y de organizar con dichas reglas.
emailto=e-mailaddress
ilil
Atributo
Significado
severity=number
recurse=true I false
/bin/ls
severity=100)
-> +pinugtsdrbamcCMSH-l;
Propiedad o mscara
Descripcin
Temporizador de acceso al archivo o al directorio.
Nmero de bloques asignados al archivo.
Temporizador inode.
ID del disco en el que reside el inode.
Grupo del propietario.
Nmero del inode.
El archivo aumenta en tamao.
l:Mil
Propiedad o mascara
Descripcin
Temporizador de modificacin.
Tipo de archivo.
Valor CRC-32.
Valor Haval.
Valor MD5.
Valor SHA.
+pinugtsdrbamcCMSH-l;
->
->
->
->
->
->
->
->
severity=100)
S (SEC_CRIT)
$ (SEC_CRIT)
$(SEC_CRIT)
$(SEC_CRIT)
$(SEC_CRIT)
$ (SEC_CRIT)
$(SEC_CRIT)
5 (SEC CRIT)
EH
variable est asignada a + p i n u g t s d r b a m c C M S H - l y sustituida en las sentencias de la regla utilizando $ (SEC_CRIT) . Esto le permite definir una sola variable con un conjunto de propiedades que se pueden aplicar a un gran grupo de
archivos y/o directorios. Cuando quiera aadir o eliminar propiedades, simplemente cambie el valor de la mscara de la variable; el cambio se refleja en cualquier sitio en el que se utilice la variable. Hay variables integradas que se muestran
en la tabla 23.3.
Tabla 23.3. Variables integradas para el archivo de polticas Tripwire
Variable
Significado
ReadOnly
Dynamic
Growing
Device
IgnoreAII
IgnoreNone
+ p i n u g t s d r b a m c C M S H - l . Lo contrario de
I g n o r e A I I . Comprueba todas las propiedades.
No tiene que crear varias reglas que se apliquen al mismo archivo o directorio. Por ejemplo:
/usr
/usr
-> $ (ReadOnly)
-> $(Growing);
-> $(ReadOnly);
-> $(Dynamic);
Cuando comprueba un archivo / u s r / l o c a l / h o m e / f i l e n a m e , las propiedades sustituidas por la variable $ (Dynamic) estn comprobadas.
Si crea o modifica reglas, tiene que ejecutar el comando / u s r / s b i n /
t w a d m i n c r e a t e - p o l f i l e / e t c / t w p o l . t x t para generar e l archi-
vo de polticas encriptado / e t c / t r i p w i r e / t w . p o l . Le pedirn que introduzca la frase de paso del sitio necesaria para marcar (es decir, encriptar) el
archivo de polticas.
--init
for
file:
/usr/sbin/tripwire
BmL301
BrP2IB03uAzdbRc67CI16i
FlIH/HvV3pb+tDhK5we0nKvFUxa
CBLgPptUYq2HurQ+sTa5tV
l;fiH
2.3.0
Integrity
Report g e n e r a t e d by:
Report c r e a t e d on:
Datbase l a s t updated on:
Report
Check
Report
root
F r i Dec 2 2 0 2 : 3 1 : 2 5 2000
F r i Dec 2 2 0 2 : 1 3 : 4 4 2000
Summary:
Host ame:
Host I P a d d r e s s :
Host ID:
Policy file used:
Configuration file used:
Datbase file used:
Command line used:
interactive
k2.intevo.com
172.20.15.1
None
/etc/tripwire/tw.pol
/etc/tripwire/tw.cfg
/var/lib/tripwire/k2.intevo.com.twd
/usr/sbin/tripwire --check --
Rule Summary:
Rule ame
Severity Level
Added
Invariant Directories
66
0
Temporary directories
33
0
Tripwire Data Files
100
0
Critical devices
100
0
User binaries
66
0
Tripwire Binaries
100
0
Critical configuration files
100
0
Librarles
66
0
Shell Binaries
100
0
File System and Disk Administraton Programs
100
0
Kernel Administration Programs
100
0
Ea
Removed
Modified
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
Networking Programs
100
System Administration Programs
100
Hardware and Device Control Programs
100
System Information Programs
100
Application Information Programs
100
Shell Releated Programs
100
Critical Utility Sym-Links
100
Critical system boot files
100
System boot changes
100
OS executables and librarles 100
Security Control
100
Login Scripts
100
Operating System Utilities
100
Root config files
100
Total objects scanned:
Total violations found:
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
14862
2
Hay dos violaciones que estn marcadas con el signo * a la izquierda de las
lneas. La primera violacin tiene lugar para la regla T r i p w i r e D a t a F i l e s .
El informe indica tambin que hay otra violacin para la regla C r i t i c a l
c o n f i g u r a t i o n f i l e s . En ambos casos, se ha modificado un archivo que
no tendra que haberse modificado. La seccin Ob j e c t Summary del informe,
muestra las lneas siguientes:
Object Summary:
(/etc/tripwire/tw.pol)
Remove the "x" frora the adjacent box to prevent updating the
datbase
with the new vales for this object.
Modified:
[x] "/etc/tripwire/tw.pol"
(/etc/cron.daily)
na
Remove the "x" from the adjacent box to prevent updating the
datbase
with the new vales for this object.
Modified:
[x]
"/etc/cron.daily"
Como puede ver, Tripwire muestra exactamente los archivos que se han modificado y qu reglas siguen estos archivos. Si las modificaciones son correctas, la
marca 'x' (significa seccin) se puede colocar en las secciones apropiadas del
informe. Tripwire actualizar la base de datos. Por ejemplo, si coloc las marcas
x en ambos archivos, la prxima vez que se ejecute el verificador de integridad,
no encontrar estas violaciones porque la base de datos Tripwire fue actualizada
para informar sobre estos archivos modificados. Sin embargo, si no se esperaba
alguna de estas modificaciones y resulta sospechosa, Tripwire realizar su trabajo.
TRUCO: Si quiere ver un informe desde el directorio / v a r / l i b /
t r i p w i r e / r e p o r t , puede ejecutar el comando / u s r / s b i n / t w p r i n t
-m r - - t w r f i l e r e p o r t f i l e n a m e en cualquier momento.
MiU
Significado
MAILMETHOD = SMTP
| SENDMAIL
Predefinido: M A I L M E T H O D = S E N D M A I L .
Este atributo se utiliza para determinar el mtodo
de envo de correos electrnicos que utiliza Tripwire.
1:NH
Atributo
Significado
El valor por defecto le permite a Tripwire utilizar el
demonio Sendmail, que debe especificarse utilizando el atributo MAILPROGRAM que se discute ms
tarde. Los demonios mail alternativos ms conocidos de Sendmail, son qmail y postoffice, funcionan
mucho mejor que Sendmail, puede seguir asignndolo a S E N D M A I L y especificar la ruta del demonio
alternativo utilizando el MAILPROGRAM.
Sin embargo, si no ejecuta un demonio Sendmail,
o del tipo Sendmail, en la mquina en la que est
ejecutando el programa Tripwire, puede asignar este
atributo a SMTP y especificar el nmero de atributos M T P H O S T y S M T P P O R T . Suponiendo que
SMTPHOST le permite a su sistema transmitir mensajes, Tripwire conectar con el host mediante el
puerto SMTP y enviar mensajes, los cuales enviar el host ms tarde al destino apropiado.
Predefinido: ninguno
Este atributo especifica el nmero de puerto TCP
del servidor de correo remoto. Normalmente, tiene
un valor de 25. Slo lo necesita si asigna
MAILMETHOD a SMTP.
MAILPROGRAM =
/path/to/mail/program
Predefinido: MAILPROGRAM = / u s r / s b i n /
sendmail - o i - t
Este atributo especifica la ruta de cualquier argumento que necesite suministrar para ejecutarlo. Este
atributo slo tiene sentido si est utilizando
MAILMETHOD = SENDMAIL.
EMAILREPORTLEVEL
0-4
Predefinido: E M A I L R E P O R T L E V E L = 3
Este atributo especifica el nivel de informacin que
se distribuye mediante correo electrnico. Deje el
valor por defecto.
MAILNOVIOLATIONS
true | false
Predefinido: MAILNOVIOLATIONS = t r u e
Si no quiere recibir un correo electrnico cuando
no se encuentra violacin, asgnele el valor false.
Idifcl
de las reglas impuestas. Cuando alguien viola dicha regla, LIDS puede registrar
mensajes detallados sobre las violaciones en archivos de registro protegidos por
LIDS, archivos de registro de pruebas. De hecho, LIDS no slo puede registrar y
enviar un correo electrnico sobre las violaciones detectadas, puede apagar inmediatamente la sesin de un usuario.
LIDS es un parche del kernel y un conjunto de herramientas administrativas
que incrementan la seguridad del kernel del sistema operativo Linux. Como en el
modelo de seguridad de LIDS, el sujeto, el objeto y el tipo de acceso estn en el
kernel, se denomina monitor de referencia. El sitio Web del proyecto LIDS es
www.lids.org/about.html.
LIDS le permite al sistema Linux ejecutar un kernel personalizado y debe
obtener la ltima fuente del kernel de un sitio de confianza como www .
k e r n e l . o r g . Una vez que ha bajado y extrado el kernel en / u s r / s r c /
l i n u x , baje el parche LIDS para el kernel especfico que quiera utilizar. Por
ejemplo, si est utilizando el kernel 2.4.1, asegrese de bajar el parche LIDS del
sitio Web del proyecto LIDS. Normalmente el parche LIDS y el paquete de herramientas administrativas se denominan l i d s - x . x . x . y . y . y . t a r . gz donde
x . x . x representa el nmero de versin de LIDS y y . y . y representa la versin
del kernel (por ejemplo, l i d s - 1 . O . 5-2 . 4 . 1). En las siguientes instrucciones
voy a utilizar LIDS 1.0.5 para el kernel 2.4.1. Asegrese de cambiar los nmeros
de versin como sea necesario. Extraiga la distribucin fuente de LIDS en el
directorio / u s r / l o c a l / s r c con el comando t a r x v z f l i d s - 1 . 0 . 5 2 . 4 . 1 . t a r . gz desde el directorio / u s r / l o c a l / s r c . Ahora puede parchear
el kernel.
im
8. Los lmites por defecto para los objetos manejados, los objetos protegidos,
los sujetos / objetos ACL y los procesos protegidos deberan ser adecuados
para la mayora de los sistemas. Por eso debe dejarlos tal y como estn.
grn
make modules
make modules install
liJ
La opcin MAIL RELAY debera determinar la direccin IP del servidor de correo que LIDS debera utilizar para enviar el mensaje de alerta. Si ejecuta el servidor de correo en la misma mquina en la que est
configurando LIDS, deje el valor por defecto. El nmero de puerto 25,
es el puerto por defecto SMTP y debe mantenerse, a no ser que est
ejecutando su servidor de correo en un puerto distinto.
La opcin MAIL_SOURCE debera estar asignada al nombre del host
de la mquina que se est configurando. Cambie el valor por defecto al
nombre del host de su sistema.
La opcin MAIL_FROM debera estar asignada a una direccin que le
diga desde qu sistema viene la advertencia. El valor por defecto debera cambiarse para reflejar el nombre del host de su sistema. No tiene
que crear una verdadera cuenta de correo para que sea til.
ACCESS TYPE
READ
READ
Object
/sbin
/bin
Any File
READ
/boot
Any File
READ
/lib
/usr
Any File
READ
/etc/shadow
Any File
DENY
/bin/login
/etc/shadow
READ
/etc/shadow
/bin/su
READ
Any File
APPEND
/var/log
Any File
/var/log/wtmp
WRITE
/sbin/fsck.ext2
/etc/mtab
WRITE
Any File
/etc/mtab
WRITE
Any File
/etc
WRITE
/var/log/sendmail.st
/usr/sbin/sendmail WRITE
/bin/login
/var/log/lastlog
WRITE
/home/xhg
/bin/cat
READ
/home/httpd
Any File
DENY
/home/httpd
/usr/sbin/httpd
READ
/etc/httpd/conf
Any File
DENY
/etc/httpd/conf
/usr/sbin/httpd
READ
/usr/sbin/sendmail WRITE
/var/log/sendmail.st
NO INHERIT
RAWIO
/usr/XHR6/bin/XF86 SVGA
READ
/etc/shadow
/usr/sbin/in.ftpd
HIDDEN
/usr/sbin/httpd NO INHERIT
Administrar LIDS
Excepto para el archivo / e t c / l i d s / l i d s . n e t , debe utilizar el programa
/ s b i n / l i d s a d m para modificar los archivos de configuracin LIDS / e t c /
lids/lids.conf, /etc/lids/lids.pwy /etc/lids/lids.cap.
El archivo / e t c / l i d s / l i d s . c o n f almacena la informacin Access Control List (ACL). El archivo / e t c / l i d s / l i d s . c a p contiene todas las reglas
de capacidad para el sistema. Puede configurar qu capacidad quiere activar o
desactivar en el sistema, editando este archivo con el comando / s b i n / l i d s a d m .
Puede colocar un signo + enfrente del nombre de la capacidad para activar el
sistema, o un signo - para desactivar la capacidad. El archivo / e t c / l i d s /
l i d s . n e t configura el sistema de correo necesario para enviar correos electr-
EEI
nicos de alerta. Puede utilizar un editor normal como vi, emacs o pico, para editar
este archivo.
Si tiene que parar LIDS para realizar tareas de administracin, entonces debera utilizar el comando / s b i n / l i d s a d m -S -- -LIDS o el comando /
s b i n / l i d s a d m -S -- -LIDS_GLOBAL. Tambin tendr que proporcionar
la contrasea LIDS para apagar LIDS. despus de realizar cualquier cambio en el
archivo de configuracin LIDS con el comando l i d s a d m , vuelva a cargar la
configuracin actualizada en el kernel ejecutando el comando / s b i n / l i d s a d m
-S -- + RELOAD_CONF.
Para aadir un nuevo ACL al archivo / e t c / l i d s / l i d s . conf, utilice el
comando / s b i n / l i d s a d m del siguiente modo:
/sbin/lidsadm -A
-A -o
/ m y p a t h -j
READ
IIU
Eliminar un ACL
Para eliminar todas las reglas ACL, ejecute el comando / s b i n / l i d s a d m Z. Para eliminar una regla ACL concreta, simplemente especifique el sujeto (si
hay) y/o el objeto de la ACL. Por ejemplo, si ejecuta el c o m a n d o / s b i n / l i d s a d m
-D -o / b i n , todas las reglas ACL c o n / b i n como objeto, son eliminadas. Sin
embargo, si ejecuta el comando / s b i n / l i d s a d m -D -s / b i n / l o g i n o / b i n , nicamente se elimina la ACL que especifica / b i n / l o g i n como
sujeto y / b i n como el objeto.
Nombre de la capacidad
Estado en /etc/
Significado
lids/lids.cap
0
CAP CHOWN
Activado
Activa/desactiva el
cambio de dueo del
archivo.
Activado
Activa/desactiva la
invalidacin de todas
las restricciones de
acceso DAC.
Activado
Activa/desactiva la
invalidacin de todas
las restricciones de
lectura y bsqueda
DAC.
CAP FOWNER
Activado
Activa/desactiva las
restricciones siguientes: el ID del usuario
1SEE1
ID capacidad
Nombre de la capacidad
Estado en /etc/
Significado
lids/lids.cap
efectivo debera
incidir con el ID
dueo cuando
asignan los bits
codel
se
s
I S U I D y s__iSGiDen
un archivo; el ID del
grupo efectivo debe
coincidir con el ID del
dueo cuando se
asigna ese bit en un
archivo.
CAP FSETID
Activado
Activa/desactiva el
acceso cuando el ID
del usuario efectivo
no es igual al ID del
dueo.
CAP_KILL
Activado
Activa/desactiva el
envo de seales a
procesos que pertenecen a otros.
CAP_SETGID
Activado
Activa/desactiva el
cambio de GID.
CAP_SETUID
Activado
Activa/desactiva el
cambio de UID.
CAP SETPCAP
Activado
Activa/desactiva la
transferencia y la eliminacin del conjunto actual a cualquier
PID.
Desactivado
Activa/desactiva la
modificacin de archivos inmutables de
modo append.
10
Desactivado
Activa/desactiva la
conexin a puertos
pertenecientes
a
1024.
11
Activado
Activa/desactiva la
transmisin / escucha de una multidifusin.
12
Desactivado
Activa/desactiva la
posibilidad de que la
administracin de
i:Mil
ID capacidad
Nombre de la capacidad
Estado en /etc/
Significado
lids/lids.cap
red realice configuraciones de interfaces,
administre firewalls
IP, establezca enmascaramiento, establezca
cuentas
IP, establezca opciones de depuracin en
los sockets, modifique tablas de enrutamiento, establezca
procesos arbitrarios
de dueos de grupos
en sockets, conecte
cualquier direccin a
un proxy transparente, establezca servicio Type Of Service
(TOS), establezca
modo mltiple, etc.
13
CAP_NET_RAW
Desactivado
Activa/desactiva la
utilizacin de sockets.
14
CAPJPCJ.OCK
Activado
Activa/desactiva el
bloqueo de segmentos de memoria compartida.
15
CAP_IPC_OWNER
Activado
Activa/desactiva
comprobacin de
dueos de IPC.
16
CAP_SYS_MODULE
Desactivado
17
CAP_SYS_RAWIO
Desactivado
CAP_SYS_CHROOT
Desactivado
19
CAP_SYS_PTRACE
Activado
Activa/desactiva
ptrace.
20
Activado
Activa/desactiva la
configuracin
de
contabilidad de procesos.
|l
ID capacidad
Nombre de la capacidad
Estado en /etc/
Significado
lids/lids.cap
21
CAP_SYS_ADMIN
Activado
22
CAP_SYS_BOOT
Activado
Activa/desactiva
reboot .
23
CAPSYSJMICE
Activado
Activa/desactiva el
cambio de prioridad
de procesos utilizando el comando n i c e .
24
CAP_SYS_RESOURCE
Activado
Activa/desactiva la
asignacin del lmite
de recursos del sistema.
25
CAP_SYS_TIME
Activado
Activa/desactiva la
asignacin de la hora
del sistema.
26
Activado
Activa/desactiva la
configuracin seudoterminal (TTY).
27
CAP_MKNOD
Activado
Activa/desactiva los
aspectos privilegiados de la llamada al
sistema mknod ( ) .
28
CAPJ.EASE
Activado
Activa/desactiva la
renovacin de archivos.
29
CAP_HIDDEN
Activado
Activa/desactiva la
ocultacin de un proceso al resto del sistema.
30
CAP_INIT_KILL
Activado
Activa/desactiva la
capacidad de los programas para matar
hijos del proceso
i n i t (PID
1).
Las asignaciones por defecto para las capacidades de Linux estn almacenadas en el archivo / e t c / l i d s / l i d s . c a p , tal y como se muestra en el listado
23.8. El signo + activa la capacidad y el signo - la desactiva. Por ejemplo, en la
lista anterior, la ltima capacidad de Linux llamada CAP_INIT_KILL est activada, lo que significa que un proceso propio del root podra matar cualquier
IEE1
protegerlos para que el usuario root no pueda asesinarlos, modifique las opciones
CAP_INIT_KILL en /etc/lids/lids.cap:
-30:CAP_INIT_KILL
Esto etiqueta al proceso como proceso oculto en el kernel y no se puede encontrar utilizando ninguna herramienta descargada por el usuario como ps o t o p , o
incluso explorar archivos en el sistema de archivos / p r o c .
Desactivar el acceso de los procesos a dispositivos
Normalmente, slo los procesos especiales necesitan acceder a los dispositivos. Por lo que es una buena idea desactivar el acceso a dispositivos y activar el
acceso a ellos slo si es necesario, lo que est de acuerdo con el concepto general
de seguridad de "cierre todo, abra slo lo que necesita."
El acceso a dispositivos se controla con la capacidad CAP_SYS_RAWIO, que
est desactivada por defecto en el archivo de configuracin / e t c / l i d s /
l i d s . c a p . Si estuviese activada, los procesos podran acceder a i o p e r r a /
i o p i , / d e v / p o r t , /dev/mem, / d e v / k m e m y a otros dispositivos de bloque. Cuando esta capacidad est desactivada (cmo est por defecto) el programa
/ s b i n / l i l o no puede funcionar de forma adecuada porque necesita acceso al
nivel de los dispositivos en el disco duro.
Pero algunos programas especiales, como XF8 6_SVGA, podran necesitar que
esta capacidad se ejecutase adecuadamente. En ese caso, puede aadir el programa a la lista de excepciones, del siguiente modo:
Multidifusin
E3
Detectar un escner
Si tiene activado el escner de puertos integrado durante la compilacin del
kernel, tal y como se recomienda en la seccin de instalacin de LIDS, puede
detectar el escaneamiento de puertos. Este escner puede detectar un escner
medio abierto, un escner de puertos stealth SYN, Stealth FIN, Xmas, o un escner
Nuil, entre otros. Las herramientas como nmap y Satn o Saint, se pueden detectar con un detector. Esto resulta de utilidad cuando est desactivado el socket
(CAP_NET_RAW).
Responder a un intruso
Cuando LIDS detecta una violacin de cualquiera de las reglas ACL, puede
responder utilizando el mtodo siguiente.
Registrar el mensaje. Cuando viola una regla ACL, LIDS registrar un
mensaje utilizando el demonio kernel de registro ( k l o g d ) .
Enviar un correo electrnico a la autoridad adecuada. LIDS puede enviar un correo electrnico cuando tiene lugar una violacin de alguna de
las reglas. Esta caracterstica est controlada mediante el archivo / e t c /
l i d s / l i d s . n e t , que se discute en el paso 5 de la seccin "Compilar,
instalar y configurar LIDS"de este captulo.
Parte Vil
Apndices
Q Cdigos
de estado
HTTP 1.1
Para cada solicitud de un cliente Web, el servidor Web debe devolver un cdigo de estado HTTP al cliente, que consiste en un nmero de tres dgitos. Un
cliente Web puede intentar entender la respuesta del servidor observando estos
cdigos de estado, enviados en la cabecera Status-Line HTTP. El cdigo llega
acompaado de una frase corta, llamada frase motivo, que intenta proporcionar
una breve explicacin al usuario. Por ejemplo, una cabecera Status-Line HTTP
podra ser como esta:
HTTP/1.1
404
Not
Found
l:Hil
informativo; el cliente no tiene que actuar sobre ellos. Tenga en cuenta que HTTP
1.0 no define cdigos de estado Ixx, por lo que los cdigos de estado Ixx no se
deben enviar a los clientes HTTP 1.0. Los cdigos de estado 1 xx definidos actualmente son:
100 C o n t i n u : el servidor enva este cdigo para que el cliente sepa
que est preparado para recibir el resto de la solicitud.
101 S w i t c h i n g P r o t o c o l s : el servidor enva este cdigo cuando
est dispuesto a cambiar el protocolo de aplicacin a uno especificado en
una cabecera de una solicitud Upgrade, proporcionada por el cliente. El
cambio slo tendr lugar si el nuevo protocolo proporciona alguna ventaja
sobre el protocolo existente. Por ejemplo, el cliente podra solicitar que el
servidor utilice un protocolo HTTP ms moderno que el que se est utilizando. En tal caso, el servidor debera cambiarlo si es posible.
l:Mil
Payment
S u p p o r t e d : no soporta la versin de
El Entender
las expresiones
regulares
Funcin
Corresponde a cualquier carcter (excepto al carcter de
lnea nueva).
Corresponde al inicio del string.
Corresponde al final del string.
Carcter meta
Funcin
\b
X?
X*
Corresponde a 0 o ms veces x.
X+
Corresponde a 1 o ms veces x.
foo|bar
[abe]
[A-Z]
[Axyz]
\w
\s
\t
Carcter de tabulacin.
\n
\r
\f
\v
Tabulacin vertical.
\a
Carcter Bell.
\e
Carcter de escape.
\077
Char Octal.
\x9f
Char Hex.
\c[
Char de control.
\l
\L
\U
\E
\Q
\u
Si tiene que utilizar un carcter meta como si fuera carcter normal en una
expresin regular, puede utilizar el formato \ m e t a c h a r para salir del significa-
Multiplicador
Significado
Corresponde a 0 o ms veces.
Corresponde a 1 o ms veces.
Corresponde a 1 o 0 veces.
{n}
{n,}
{n, m}
Como se mencion antes, esta expresin se puede utilizar para hacer corresponder strings como www. h u n g r y m i n d s . com. El primer [ a - z ] + especifica
que son necesarios uno o ms caracteres en el rango de la a a la z para que
coincida el grupo especificado por el primer par de parntesis. Si se encuentra
correspondencia, se podr acceder a ella utilizando $ 1. Hay tres pares de parntesis en esta expresin. El primer par (empezando por la izquierda) es $ 1 , el
segundo es $2, y el tercero es $3. Observe que \ se utiliza para escapar del
carcter meta del punto (.) entre los grupos.
A continuacin, tiene dos ejemplos:
IB1
Recursos
Apache online
Este apndice contiene una lista de los sitios Web, grupos Usenet y listas de
correo relacionados con Apache, que pueden resultarle de utilidad.
Recursos gratuitos
Al igual que Apache, muchos de los mejores recursos para Apache son gratuitos en Internet. Las siguientes secciones describen algunos de estos recursos gratuitos de Internet para Apache.
Sitios Web
A continuacin tiene algunos de los mejores sitios Web Apache:
Official Apache Web site: www . a p a c h e . o r g
Apache Module Registry: h t t p : / / m o d u l e s . a p a c h e . o r g
Apache/Perl Integration Project: h t t p : / / p e r l . a p a c h e . o r g
Apache-SSL: w w w . a p a c h e - s s l . o r g
Jakarta Project: h t t p : / / j a k a r t a . a p a c h e . o r g
l:klil
1:EU
I3T1
comp.infosystems.www.authoring.tools
Este grupo de noticias discute sobre herramientas Web, pasando por herramientas de autor que le permiten crear contenidos Web para ingenieras de publicacin Web a gran escala.
Grupos de noticias relacionados con navegadores Web
Si est interesado en los navegadores Web en las distintas plataformas, puede
navegar o participar en los grupos de noticias de esta categora.
comp.infosystems.www.browsers.ms-windows
Este grupo de noticias discute sobre navegadores Web para las plataformas
Windows y NT. Se incluyen aspectos como preguntas y soluciones sobre configuracin, visores externos (aplicaciones de ayuda) e informes de depuracin.
comp.infosystems.www.browsers.mac
Estos grupos de noticias discuten sobre navegadores Web para la plataforma
Macintosh. Se incluyen aspectos como preguntas y soluciones sobre configuracin, visores externos (aplicaciones de ayuda) e informes de depuracin.
comp.infosystems.www.browsers.x
Estos grupos de noticias discuten sobre navegadores Web para el sistema
Windows X. Se incluyen aspectos como preguntas y soluciones sobre configuracin, visores externos (aplicaciones de ayuda) e informes de depuracin.
comp.infosystems.www.browsers.misc
Estos grupos de noticias discuten sobre navegadores Web para el resto de
plataformas. Se incluyen aspectos como preguntas y soluciones sobre configuracin, visores externos (aplicaciones de ayuda) e informes de depuracin. Incluye
plataformas como Amiga, DOS, VMS y las de modo de texto de Unix.
Grupos de noticias de anuncios
Hay varios grupos que utilizan esta categora de grupos de noticias para anunciar sus lanzamientos de software, alertas de seguridad en cuanto a software Web
y otros asuntos de importancia. No debe participar en ninguno de estos grupos a
no ser que tenga informacin relacionada con el grupo.
comp.infosystems.www.announce
Este en un grupo de noticias en el que se comunican nuevos recursos relacionados con la Web.
Otros grupos de noticias WWW
Los grupos de noticias de esta categora son grupos que tratan asuntos relacionados con la Web que no caben en otra categora.
comp.infosystems.www.advocacy
Este grupo de noticias se ha creado para comentarios, argumentos y debates
sobre navegadores, servidores, visores externos, y otro tipo de software.
comp.infosystems.www.mise
Proporciona un foro para discusiones generales sobre asuntos relacionados
con WWW que no se cubren en otros grupos de noticias. Este grupo va a incluir,
probablemente, discusiones sobre cambios futuros en la estructura Web y sobre
protocolos de la Web que afectan tanto a clientes como a servidores.
Grupos de noticias Perl
Como Perl se utiliza en la programacin CG1, m o d _ p e r l y FastCGI, los
siguientes grupos de noticias le pueden resultar de gran utilidad.
comp.lang.perl.misc
Este grupo de noticias discute sobre Perl; incluye todo lo relacionado con Perl,
desde informes de depuracin sobre nuevas caractersticas hasta historias y ancdotas. Es la mejor fuente para informarse sobre las novedades en Perl.
comp.lang.perl.announce
Se anuncian nuevos lanzamientos, FAQ y nuevos mdulos.
Listas de correo
Si quiere recibir noticias Apache sobre la fundacin Apache y sus actividades,
suscrbase a a n n o u n c e - s u b s c r i b e @ a p a c h e . o r g . Recuerde que no es una
lista de correo de discusin. Simplemente es utilizada por la fundacin Apache
para anunciar asuntos de inters periodstico. Por favor no realice preguntas ni
haga comentarios en este sitio. Si est interesado en conferencias sobre Apache,
las cuales constituyen un excelente recurso para los administradores Apache serios, puede suscribirse a la lista a n n o u n c e - s u b s c r i b e @ a p a c h e c o n . com
l i s t . Tambin es una lista de anuncios y no es adecuada para participar con
preguntas o comentarios. Si est interesado en asuntos relacionados con el nuevo
desarrollo Apache, entonces puede suscribirse a n e w - h t t p d - s u b s c r i b e @
a p a c h e . o r g . Tambin puede suscribirse a h t t p : / / g r o u p s . y a h o o . com/
g r o u p / n e w - h t t p d , que es un grupo Yahoo! dedicado al servidor Apache.
Recursos comerciales
Un nmero creciente de usuarios Apache (principalmente usuarios corporativos) est continuamente buscando recursos comerciales que ofrezcan software o
servicios Apache. Algunos de estos recursos comerciales para Apache son:
E3
Stronghold: www . c 2 . n e t
Covalent Raven: h t t p : / / r a v e n . c o v a l en t. n e t
Rovis: w w w . r o v i s . c o m / w a r p a i n t /
http://hoohoo.ncsa.uiuc.edu/cgi/
|2|