SafeChildren Banner

Havoc Oracle Solaris Experts

lunes, 1 de marzo de 2010

Instalar Apache HTTP server con Gestión Dinámica de Recursos

Introducción
En post anteriores hemos visto como podemos Gestionar Dinámicamente Procesos usando Projects, sin embargo, cuando hablamos de Instalar Apache HTTP Server tenemos que realizar algunos cambios para poder utilizarlos.

El problema viene por la forma de ejecutarse de Apache HTTP Server. Éste realiza un setuid al usuario configurado en la propiedad <User> y <Group> del archivo $APACHE_HOME/conf/httpd.conf y por lo tanto, no se produce un nuevo proceso <newtask>, así que los parámetros de configuración dinámica se heredan del proceso padre, en nuestro caso es <root>.

Veamos un ejemplo para explicarlo mejor -asumimos que tenemos instalado nuestro Apache HTTP en /opt/www/apache-1.3.41 tiene configurado como User y Group www. Vamos a crear un nuevo project para el usuario www y veremos qué sucede

# vi /opt/www/apache-1.3.41/conf/httpd.conf
  ...
  Port 80
  User www
  Group www
  ...

# projadd -G www -c 'Apache 1.3.x HTTP Server' user.www
# /opt/www/apache-1.3.41/bin/apachectl stop
/opt/www/apache-1.3.41/bin/apachectl stop: httpd stopped
# /opt/www/apache-1.3.41/bin/apachectl start
/opt/www/apache-1.3.41/bin/apachectl start: httpd started
# ps -u www -o project,comm
 PROJECT COMMAND
user.root /opt/www/apache-1.3.41/bin/httpd
user.root /opt/www/apache-1.3.41/bin/httpd
user.root /opt/www/apache-1.3.41/bin/httpd
user.root /opt/www/apache-1.3.41/bin/httpd
user.root /opt/www/apache-1.3.41/bin/httpd
Como podemos ver, nuestro servidor está utilizando el project <user.root> en vez del que nosotros queremos que es <user.www>, para solucionarlo, deberemos editar el archivo $APACHE_HOME/bin/apachectl y modificar la forma de inicio de nuestro servidor.

Deberemos incluir el siguiente bloque de código justo antes de <for ARG in $@ $ARGS> de forma que quede así
# vi /opt/www/apache-1.3.41/bin/apachectl
...
...
## Project Name
PROJNAME="user.www"
NEWTASKBIN=`which newtask`
PROJEXITS=`cat /etc/project |grep $PROJNAME`

if [ "x$PROJEXITS" != "x" ] ; then
        ## Support for Custom Project
        HTTPD="$NEWTASKBIN -p $PROJNAME $HTTPD"
fi


for ARG in $@ $ARGS
do
    # check for pidfile
    if [ -f $PIDFILE ] ; then
        PID=`cat $PIDFILE` 
...
...
...
Y con este cambio, reiniciamos nuestro Apache HTTP Server y comprobamos que project tiene asignado ahora.

# /opt/www/apache-1.3.41/bin/apachectl stop
/opt/www/apache-1.3.41/bin/apachectl stop: httpd stopped
# /opt/www/apache-1.3.41/bin/apachectl start
/opt/www/apache-1.3.41/bin/apachectl start: httpd started
# ps -u www -o project,comm
 PROJECT COMMAND
user.www /opt/www/apache-1.3.41/bin/httpd
user.www /opt/www/apache-1.3.41/bin/httpd
user.www /opt/www/apache-1.3.41/bin/httpd
user.www /opt/www/apache-1.3.41/bin/httpd
user.www /opt/www/apache-1.3.41/bin/httpd
Ahora, ya podemos asignar los parámetros dinámicos como deseemos, por ejemplo, Número máximo de descriptores abiertos

# projmod -sK 'process.max-file-descriptor=(priv,2048,deny)' user.www
Conclusión
Teniendo en cuenta la forma de trabajo de la gestión dinámica de recursos, podemos con unos mínimos cambios, obtener este beneficio en prácticamente todas nuestras aplicaciones, con la potencia y simplicidad que esto supone

Referencias

No hay comentarios:

Publicar un comentario en la entrada