Foro de Linux - Gustavo Guillermo Software Compunauta Micro Linux (uLinux)
BUZÓN de CONSULTAS y COMENTARIOS | TEMARIO PRINCIPAL

[Gnupérnico II - MetaBuscador]


COMPORTAMIENTO DEL JAVA WEB SERVER - SEGURIDAD Y CONFIGURACION


GENERALIDADES

La configuración del servidor se realiza por medio del comportamiento por defecto, es decir la configuración del servidor no es leída cuando este arranca, sino que sólo las ordenes que se le pasan como argumento son las que se hacen activas en la primera ejecución.


COMPORTAMIENTO

Para más información sobre las órdenes que se detallan a continuación, vea el archivo de arranque de ejemplo de la instalación del servidor. A continuación se detalla el significado de cada orden.

Al pedir entonces la página por primera vez, el servidor buscará un archivo de configuración en su worpath en la carpeta conf, de la siguiente forma como se ve en el ejemplo, y el nombre del archivo depende de las características del socket y de la petición hecha al servidor. Pueden influir la IP de la interface local de red de la cual se está recibiendo la petición, eso permite seleccionar el ancho de banda, el Host Virtual al que se quiere acceder, o _ si se pide una página web sobre la dirección de ip, de la interface sin resolver antes ningún nombre, y por supuesto también influye la IP remota de la petición. En un futuro permitirá separarla por puertos de escucha, en carpetas así: conf/4444 o conf/80.

pidiendo: http://127.0.0.1:4444
Working on:.\
Thread Running:4
MEMORYFREE:BEFORE:1203824
MEMORYFREE:BEFORE:1490808
MEMORYFREE:BEFORE:1474024
MEMORYFREE:BEFORE:1473640
Server Start, Listening on port:4444
MEMORYFREE:AFTER:1464992
[2] Waiting for External Socket Arrival
MEMORYFREE:AFTER:1463936
[1] Waiting for External Socket Arrival
MEMORYFREE:AFTER:1463200
[3] Waiting for External Socket Arrival
FIFO:Esperando eternamente por un socket.
MEMORYFREE:AFTER:1462032
[0] Waiting for External Socket Arrival
Se inicia el manejador...
La lista está vacía, esperando a FIFO por sockets...
Se recibió un socket
Se guardo un socket en la lista
Se notificó sobre la lista
FIFO:Esperando eternamente por un socket.
Despertando, pueden ser sockets..
Se han encontrado datos en la lista
Se delega el socket al Thread [0]
La lista está vacía, esperando a FIFO por sockets...
[0] Accepting Connection From:/127.0.0.1
		REQUESTMETHOD:GET
		SCRIPTNAME:/files/
		QUERYSTRING:
		USERPROTOCOL:HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
		ACCEPT:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Accept-Language: es-mx
		ACCEPTLANGUAGE:es-mx
Accept-Encoding: gzip, deflate
		ACCEPTENCODING:gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)
		User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)
Host: 127.0.0.1:4444
		HOST:127.0.0.1
		PORT:4444
Connection: Keep-Alive
		CONNECTION:Keep-Alive

Read Header... OK
Intentando abrir el archivo de hosts".\conf\127.0.0.1._.127.0.0.1.conf"
  ... not found, trying ".\conf\127.0.0.1._.conf"...
  ... not found, trying ".\conf\_.127.0.0.1.conf"...
  ... not found, trying ".\conf\_.conf"...
  ... not found, trying ".\conf\127.0.0.1.conf"...
  ... not found, trying ".\conf\127.0.0.1.conf"...
  ... not found, trying ".\conf\.conf"...
... Encontrado. .\conf\.conf ...cargando
OPENCONN:127.0.0.1
	Content-Type Detected: 
	send:HTTP/1.1 200 ok
	send:GusHttpServer/1.0 (Linux) (Platform Independent)
	send:Date: Tue Jan 14 23:54:06 CST 2003
	send:Connection: close
Socket Closed
CLOSECONN:127.0.0.1
MEMORYFREE:BEFORE:1462032
MEMORYFREE:AFTER:1296616
Socket Closed
MEMORYFREE:BEFORE:1271280
MEMORYFREE:AFTER:1271776
[0] Waiting for External Socket Arrival

El proceso de carga de la configuración sólo se hace al pedir la página la primera vez. O en el caso de que la estampa de tiempo del sistema de archivos cambie (alguien haya cambiado el archivo). Ahora vemos un ejemplo con resolución de nombre.

Con el internet explorer y el nombre de la PC en la red
Working on:.\
Thread Running:4
Server Start, Listening on port:4444
MEMORYFREE:BEFORE:1195592
MEMORYFREE:BEFORE:1523680
MEMORYFREE:BEFORE:1498440
MEMORYFREE:BEFORE:1472752
FIFO:Esperando eternamente por un socket.
MEMORYFREE:AFTER:1472064
[2] Waiting for External Socket Arrival
MEMORYFREE:AFTER:1470720
[0] Waiting for External Socket Arrival
MEMORYFREE:AFTER:1469984
[1] Waiting for External Socket Arrival
MEMORYFREE:AFTER:1469248
[3] Waiting for External Socket Arrival
Se inicia el manejador...
La lista está vacía, esperando a FIFO por sockets...
Se recibió un socket
Se guardo un socket en la lista
Se notificó sobre la lista
FIFO:Esperando eternamente por un socket.
Despertando, pueden ser sockets..
Se han encontrado datos en la lista
Se delega el socket al Thread [0]
La lista está vacía, esperando a FIFO por sockets...
[0] Accepting Connection From:/127.0.0.1
		REQUESTMETHOD:GET
		SCRIPTNAME:/
		QUERYSTRING:
		USERPROTOCOL:HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
		ACCEPT:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Accept-Language: es-mx
		ACCEPTLANGUAGE:es-mx
Accept-Encoding: gzip, deflate
		ACCEPTENCODING:gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)
		User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)
Host: gusgus:4444
		HOST:gusgus
		PORT:4444
Connection: Keep-Alive
		CONNECTION:Keep-Alive

Read Header... OK
Intentando abrir el archivo de hosts".\conf\127.0.0.1.gusgus.127.0.0.1.conf"
  ... not found, trying ".\conf\127.0.0.1.gusgus.conf"...
  ... not found, trying ".\conf\gusgus.127.0.0.1.conf"...
  ... not found, trying ".\conf\gusgus.conf"...
  ... not found, trying ".\conf\127.0.0.1.conf"...
  ... not found, trying ".\conf\127.0.0.1.conf"...
  ... not found, trying ".\conf\.conf"...
... Encontrado. .\conf\.conf ...cargando
OPENCONN:127.0.0.1
	Content-Type Detected: 
	send:HTTP/1.1 200 ok
	send:GusHttpServer/1.0 (Linux) (Platform Independent)
	send:Date: Wed Jan 15 00:05:00 CST 2003
	send:Connection: close
	send:HTTP/1.1 200 ok
	send:GusHttpServer/1.0 (Linux) (Platform Independent)
	send:Date: Wed Jan 15 00:05:05 CST 2003
	send:Connection: close
parsing before:..\dataserver\index.gp
Socket Closed
CLOSECONN:127.0.0.1
MEMORYFREE:BEFORE:1470720
MEMORYFREE:AFTER:1843008
Socket Closed
MEMORYFREE:BEFORE:1817672
MEMORYFREE:AFTER:1818168
[0] Waiting for External Socket Arrival
Se recibió un socket
Se guardo un socket en la lista
Se notificó sobre la lista
FIFO:Esperando eternamente por un socket.
Despertando, pueden ser sockets..
Se han encontrado datos en la lista
Se delega el socket al Thread [0]
Se recibió un socket
Se guardo un socket en la lista
Se notificó sobre la lista
FIFO:Esperando eternamente por un socket.
Se han encontrado datos en la lista
Se delega el socket al Thread [1]
La lista está vacía, esperando a FIFO por sockets...
[1] Accepting Connection From:/127.0.0.1
[0] Accepting Connection From:/127.0.0.1
		REQUESTMETHOD:GET
		SCRIPTNAME:/common/img/bulging.jpg
		REQUESTMETHOD:GET
		QUERYSTRING:
		SCRIPTNAME:/common/img/striped.gif
		USERPROTOCOL:HTTP/1.1
		QUERYSTRING:
Accept: */*
		ACCEPT:*/*
Referer: http://gusgus:4444
		REFERER:http://gusgus:4444
Accept-Language: es-mx
		ACCEPTLANGUAGE:es-mx
Accept-Encoding: gzip, deflate
		ACCEPTENCODING:gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)
		User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)
Host: gusgus:4444
		HOST:gusgus
		PORT:4444
Connection: Keep-Alive
		CONNECTION:Keep-Alive

Read Header... OK
		USERPROTOCOL:HTTP/1.1
Accept: */*
		ACCEPT:*/*
Referer: http://gusgus:4444
		REFERER:http://gusgus:4444
Accept-Language: es-mx
		ACCEPTLANGUAGE:es-mx
Accept-Encoding: gzip, deflate
		ACCEPTENCODING:gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)
		User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)
Host: gusgus:4444
		HOST:gusgus
		PORT:4444
Connection: Keep-Alive
		CONNECTION:Keep-Alive

Read Header... OK
OPENCONN:127.0.0.1
	Content-Type Detected: image/gif
	send:HTTP/1.1 200 ok
	send:GusHttpServer/1.0 (Linux) (Platform Independent)
OPENCONN:127.0.0.1
	Content-Type Detected: image/jpeg
	send:HTTP/1.1 200 ok
	send:GusHttpServer/1.0 (Linux) (Platform Independent)
	send:Date: Wed Jan 15 00:05:10 CST 2003
	send:Date: Wed Jan 15 00:05:10 CST 2003
	send:Connection: close
	send:Connection: close
	send:Last-Modified: Wed Jan 15 00:05:10 CST 2003
	send:Last-Modified: Wed Jan 15 00:05:10 CST 2003
	Content-Type Detected: image/gif
	Content-Type Detected: image/jpeg
Socket Closed
CLOSECONN:127.0.0.1
MEMORYFREE:BEFORE:1469984
MEMORYFREE:AFTER:1917288
Socket Closed
MEMORYFREE:BEFORE:1891952
Socket Closed
CLOSECONN:127.0.0.1
MEMORYFREE:BEFORE:1818168
MEMORYFREE:AFTER:2131992
[1] Waiting for External Socket Arrival
MEMORYFREE:AFTER:2131256
Socket Closed
MEMORYFREE:BEFORE:2105920
MEMORYFREE:AFTER:2107152
[0] Waiting for External Socket Arrival

Como podemos apreciar en la salida del log no se carga más que una sola vez el archivo de configuración, y al no ser encontrado el archivo dependiente de la IP de la interface de red ni del nombre de la computadora local, procede a cargar el archivo por defecto conf/.conf Esto es obligatorio para poder afirmar el soporte de dominios virtuales, es decir si mi máquina almacena más de una página web en mi Intranet, se puede crear un alias de DNS y que tanto gusgus como juli sean el mismo servidor pero, cada vez que se ponga el nombre de uno o el otro muestr páginas web diferentes.


CONFIGURACION

Como vimos en el apartado anterior la configuración del servidor se hace efectiva sólo hasta que se pide la primera página web en el dominio virtual o interface de red específica. Por lo tanto habrá que crear tantos archivos como sea necesario para poder administrar las diferencias entre interfaces de red y dominios virtuales, por ejemplo se puede dar más ancho de banda a la salida por la interface de red y a cualquier otra IP de Internet se le puede dejar algo razonable de acuerdo al tipo de conexión que tengamos. Las ordenes de ancho de banda son asignaciones de las cuales solo prevalece la última, así que veremos la forma correcta de administrar el ancho de banda para un dominio virtual.

conf/.conf (el archivo por defecto)
#ARCHIVO DE CONFIGURACION DE JAVA SERVER
#GUSTAVO GUILLERMO SOFTWARE
#La clausula root, indica el directorio raíz
#root /directorio
#cgi, indica un directorio de cgi para interpretar
#cgi /directoriolocal;/directorioenelserver
#paginas en GusParser..
#alias, produce un override de los directorios, no 
#aparecen listados pero si existen
#alias /directoriolocal;/directoriodelserver
#
#Se pueden pasar otras propiedades Extras
#autor Gustavo Guillermo Software
#la primera palabra separada por espacio en blanco
#es la palabra clave y el resto la clave o valor.
root /home/gus/public_html
cgi /home/gus/public_html/cgi-bin;/cgi-bin
#cgi ../dataserver/files/listapaises.html;/files/listapaises.html
alias /./;/arcava2
#alias /tmp;/tmp
#alias /home/gus/1-docs/agenda;/gus
#alias /Compartir;/Compartir
#@include 127.0.0.1.conf
bandwidth 40960
bandwidthtime 8000
diskbuffer 4096
html_like_gp on
th_per_ip 8
th_per_fl 1

En este archivo se ve perfectamente la sentencia root, y cgi, que indican las carpetas principales, pueden ser incluso c:\ si estoy en Windows y quiero compartir todo el disco. la orden alias sirve para crear un alias de carpetas, es decir el servidor la encontrará pero no dentro de la anterior porque los alias no se listan, si el directorio root del servidor tiene ese mismo nombr en un archivo o carpeta siempre se verá el contenido del alias.

CONTROL DE ANCHO DE BANDA

Las ordenes bandwidth y bandwidthtime son las que permiten controlar el ancho de banda, la primera almacena la cantidad máxima de Bytes que se pueden transmitir en archivos no CGI, y la segunda almacena el tiempo en milisegundos en el que se permite la transmisión de esa cantidad, tiempos altos producen que el buffer se envíe a la máxima velocidad y el clon que atiende la petición, se autopenaliza con un tiempo de espera para cumplir las reglas, tiempos bajos producen penalizaciones pequeñas y por lo tanto mayor actividad de los clones para calcular el ancho de banda. Si bien la ultima opción no produce fluctuaciones importantes, la primera opción de dar tiempos grandes, produce un mejor rendimiento de recursos del procesador.

El cálculo del ancho de banda es así: A.B.=BytesPermitidos/TiempoPermiido, en promedio se respeta como ley. por lo que si TiempoPermitido es grande, en promedio se respeta, pero en forma instantánea no.

BUFFER DE DISCO

La orden diskbuffer sirve para cuando el servidor tiene sobrecarga o se piensa que los archivos que se manejarán son extremadamente grandes o pequeños. En extremos. o sea que cada vez que se acceda al disco se pedirán los datos de a esa cantidad. Con un tamaño muy pequeño de buffer se producen muchas llamadas al disco y se consumen recursos del microprocesador y con grandes buffers, se consume mucha más memoria, así que un punto intermedio podría ser 4096 (4KBytes). No obstante cada usuario puede personalizar esta opción teniendo en cuenta el ancho de banda, ya que si el ancho de banda disponible para la interface de red en la que se hace la petición es muy pequeño, los accesos al disco, serán escasos y un tamaño de bufefr pequeño de 512 o 1024 Bytes, no parecería descabellado.

INCLUSION DE OTROS ARCHIVOS

Si incluimos .conf en el archivo de la interface de red 192.168.17.100 podemos repetir las líneas del ancho de banda de forma que pasen por alto las del archivo .conf y permitan una mayor transferenci a la red interna.

@include .conf
bandwidth 409600
bandwidthtime 4000
diskbuffer 4096

Y de esta forma estamos permitiendo casi 100KB/s para la red interna y las ordenes de donde encontrar las páginas se encuentran en .conf, todo esto gracias a la orden @include que indica otro archivo existente para incluir en el mismo esquema.
La orden th_per_ip 8 indica cuantos hilos se permitirá a una única ip remota descargar al mismo tiempo del servidor, no es conveniente poner un 1 porque muchos navegadores abren más de un archivo al mismo tiempo para mostrar fotos y dibujos, aparte si varias PCs en una red interna se conectan a través de un router o servidor NAT entonces todas tendrán la misma IP Remota.
La órden th_per_fl 1 es para indicar cuantos hilos se permitirá abrir por cada archivo algunos programas para manipular descargas como DAP o GR utilizan un mecanismo de fragmentación para descargar más rápido, teniendo prevalencia sobre otros usuarios por abrir más veces el archivo esto no es justo para los demás y como el control de ancho de banda no permite que aumente la velocidad por más que se abran varios fragmentos o hilos, lo dejamos en 1 y solo de una vez se permitirán las descargas.
La cláusula html_like_gp on indica la activación del soporte para PHP/GP/ y el tratado de HTML/CSS con el preprocesador GusParser, el soporte para PHP requiere que tengamos instalado en Linux el binario PHP con soporte CGI, compilado con ./configure --enable-cgi o en Gentoo emreger php-cgi, emrge php-cgi


ARRANCAR EL SERVIDOR

Ver la sección de Instalación para más detalles. Vamos a la carpeta bin, donde tenemos el servidor copiado, es decir donde tenemos el archivo zip o tgz descomprimido y ejecutamos en Windows, runserv.bat, y en Linux runserver.sh para la JVM superior o igual a la 1.3, para la jvm 1.1.8 si es que alguien todavía la usa hay que modificar los classpath o descomprimir el jar, recuerden que el archivo de arranque para la jvm 1.1.8 es necesario modificarlo para que funcione correctamente con la ubicación de los archivos en el sistema Linux.


PANTALLAS DEL Servidor probando las plantillas de GADMIN

A continuación vemos una comparación de pruebas hechas en Windows y en Linux de GADMIN, usando el Servidor de páginas web. La plataforma de desarrollo, es Linux, bajo ningún concepto este programa se desarrolla en Windows.

en Linux
en Windows
(Linux) click para ampliar (Windows) click para ampliar

En las fotos se puede apreciar que tanto en Windows como en Linux se carga o intenta cargar una base de datos y se muestra en el explorador a modo de tabla, el lenguaje de scripting del servidor es el GusParser, en el caso de que alguien esté interesado en ver como funciona, Notar que en windows produjo una excepción en el driver de MySQL, ya que no existe la tabla, porque como mi ambiente de desarrollo es Linux, no tengo cargada la base de datos en Windows.

Así se ve el monitor de MySQL para Windows

El icono del monitor de MySQL es el semáforo que aparece junto a la hora.


|Contrate Nuestra asesoría, instalación y cursos en Sistemas Linux, Redes, etc. Acerca de este sitio web Webmaster | Volver Al Inicio | Compunauta Micro Linux (uLinux) El servidor en CD, sin innstalación. |