apache

Sáb, 07/24/2010 - 23:41

Balancear con apache a un oc4j

Introducción

Mod_jk es un módulo de Apache que nos permite conectar el Apache con otros servidores (tomcat, oc4j) a través del protocolo ajp13. Aunque Oc4j tiene un modulo para Apache llamado mod_oc4j, yo no he conseguido que me funcione con un OC4J Standalone y un Apache Genérico (Sin utilizar el que traen alguans versiones de Oc4j). Para balancear contra servidores de oc4j tendremos que seguir los pasoso descritos en la guía de balancear tomcats con apache, pero en vez de hacer los pasos de configurar el tomcat, tendremos que hacer los siguientes.

Configurar el OC4J

Lo primero será configurar el Oc4j para que escuche peticiones por el protocolo ajp13.

Vamos a crear un fichero ajp-web-site.xml en el que le indicaremos que escuche en un puerto con el protocolo ajp13 y las aplicaciones que podrá servir por este protocolo. Un ejemplo de este fichero para que escuche por el puerto 3000 con el protocolo ajp13 y que sirva una aplicación de nombre MiAplicacion con un módulo de nombre MiModulo y en un contexto MiContexto sería el siguiente (podemos poner tantas líneas web-app como módulos queramos que sirva):



<web-site xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/web-site-10_0.xsd" port="<strong>3000</strong>" protocol="<strong>ajp13</strong>" display-name="OC4J 10g (10.1.3) Default Web Site" schema-major-version="10" schema-minor-version="0" ><br>
        <default-web-app application="default" name="defaultWebApp" /><br>
        <web-app application="<strong>MiAplicacion</strong>" name="<strong>MiModulo</strong>" load-on-startup="true" root="/<strong>MiContexto</strong>" /><br>
        </web-site>

Luego tendremos que ir a la carpeta C:\oc4j\j2ee\home\config y editar el fichero server.xml. En el tendremos que añadir la siguiente línea:

<application-servet ...>
...
<web-site path="./ajp13-web-site.xml" />
...
</application-server>

Y por último reiniciamos el servidor.

Configurar el Apache

En nuestro archivo worker.properties tendremos que añadir la definición para el oc4j. Le indicamos el puerto, url y protocolo y lo añadimos a la lista de los workers:

worker.list=...,<strong>oracle</strong><br>
        ...<br>
        worker.<strong>oracle</strong>.port=3000<br>
        worker.<strong>oracle</strong>.host=localhost<br>
        worker.<strong>oracle</strong>.type=ajp13

Luego tendremos que añadir al fichero de configuración del apache httpd.conf (por defecto estará en C:\Archivos de programa\Apache Software Fundation\Apache2.2\conf\) los parámetros del modulo modjk indicandole que aplicaciones queremos balancear al oc4j:

# Cargamos el módulo JK

LoadModule jk_module modules/mod_jk.so<br>
        # Path to workers.properties<br>
        JkWorkersFile "C:/Archivos de programa/Apache Software Foundation/Apache2.2/conf/worker.properties"<br>
        # Path to jk logs<br>
        JkLogFile "C:/Archivos de programa/Apache Software Foundation/Apache2.2/logs/mod_jk.log"<br>
        # Jk log level debug/error/info<br>
        JkLogLevel info<br>
        # Jk log format<br>
        JkLogStampFormat "%a %b %d %H:%M:%S %Y "<br>
        # JkOptions for forwarding<br>
        #JkOptions +ForwardKeySize +ForwardURICompat -ForwardDiretories<br>
        # JkRequestLogFormat set the request format<br>
        JkRequestLogFormat "%w %V %T"<br>
        # Aplicaciones que estan en el OC4J<br>
        JkMount /MIAPLICACION* <strong>oracle</strong>

Vie, 07/24/2009 - 15:09

 phpLDAPadmin

1. Introducción

phpLDAPadmin es un gestor web para un servidor de ldap.

2. Instalación

2.1. Manual

La instalación es sencilla. Hay que bajarselo, descomprimirlo, ponerlo ene l apache y configurar los datos para que acceda a nuestro servidor de ldap:

>> wget http://nfsi.dl.sourceforge.net/sourceforge/phpldapadmin/phpldapadmin-1.1...
>> tar -zxvf phpldapadmin-1.1.0.7.tar.gz
>> sudo cp -R phpldapadmin-1.1.0.7 /var/www/html/phpldapadmin
>> sudo cp /var/www/html/phpldapadmin/config/config.php.example /var/www/html/phpldapadmin/config/config.php

2.2. Automatica

Necesitaremos tener un servidor web con php y un servidor mysql con una base de datos para el phpldapadmin. Para instalarlo en ubuntu, desde los repositorios:

>> sudo aptitude install phpldapadmin

2.3. Indicarle los datos de conexión

Editamos el fichero y nos aseguramos que rellenamos los siguientes campos que son los minimos:

$i=0;
$ldapservers = new LDAPServers;
...
$ldapservers->SetValue($i,'server','name','NOMBRE_SERVIDOR');
...
$ldapservers->SetValue($i,'server','host','IP_DEL_SERVIDOR_DONDE_ESTA_EL_LDAP');
...
$ldapservers->SetValue($i,'server','port','389');
...
$ldapservers->SetValue($i,'server','base',array('RAIZ_BASE_DE_NUESTRO_LDAP'));

Ya tendria que funcionar el phpLDAPadmin.

3. Configuración

3.1. Cambiar la forma de autentificarse

Por defecto la forma que usa para autentificarse con el servidor de ldap es manual (tenemos que introducir un usuario y una contraseña), pero podemos ponerla en automática. Para usar una u otra tendremos que tener el fichero de configuración como nos indica en cada apartado:

3.1.1. Automáticamente

Para que se conecte automáticamente al servidor de ldap, con un usuario cn=root,dc=example,c=es y contraseña passuser, tendremos que usar las siguientes líneas en el fichero de configuración (/var/www/html/phpldapadmin/config/config.php):

$ldapservers->SetValue($i,'server','auth_type','config');
$ldapservers->SetValue($i,'login','dn','cn=root,dc=example,c=es');
$ldapservers->SetValue($i,'login','pass','passuser');
$ldapservers->SetValue($i,'server','tls',false);

3.1.2. Manual

Para que nos pida que introduzcamos un usuario y clave del ldap para conectarnos al servidor, usaremos las siguientes líneas (recalcar que las variables dn y pass de login, tenemos que dejarlas vacías) en el fichero de configuración (/var/www/html/phpldapadmin/config/config.php):

$ldapservers->SetValue($i,'server','auth_type','cookie');
$ldapservers->SetValue($i,'login','dn','');
$ldapservers->SetValue($i,'login','pass','');
$ldapservers->SetValue($i,'server','tls',false);
$config->custom->session['blowfish'] = "cadena";

La cadena blowfish puede ser cualquier cadena (se usa para encriptar la cookie).

3.2.  Solo queremos que muestre unos determinados campos

Si lo que queremos es que no muestre todos los atributos tendremos que editar el fichero /var/www/html/phpldapadmin/config/config.php y buscar el vector hidden_attrs, descomentarlo si está comentado y poner los campos que no queramos que se muestren. Por ejemplo: Si no queremos que se muestren los campos uidNumber, gidNumber, homeDirectory y objectClass tendremos que poner la siguiente línea:

$hidden_attrs = array(
   'uidNumber','gidNumber', 'homeDirectory', 'objectClass');

Guardamos el fichero y ya esta.

3.3. Cambiar los nombres que se muestran de cada parametro

Alguien que no tiene conocimientos de ldap cuando vea que hay que rellenar el parámetro l (ciudad) puede que no sepa que significa. Phpldapadmin tiene la posibilidad de definir el nombre que se lista para cada parámetro. Para ello tendremos que editar el fichero /var/www/html/phpldapadmin/config/config.php y añadir en el vector friendly_attrs los campos que queremos renombrar en la salida. Por ejemplo: si queremos que los campos l, st y sn aparezcan como Ciudad, Localidad y Apellidos tendremos que añadir als siguientes líneas:

$friendly_attrs = array();

$friendly_attrs['l']                      = 'Ciudad';
$friendly_attrs['st']                     = 'Localidad';
$friendly_attrs['sn']                     = 'Apellidos';

Solo nos quedará guardar los cambios y cerrar el archivo.

3.4. Definir el orden en que se listan los parametros

Hay una opcion (attrs_display_order) para definir el orden en el que se muestran los parámetros. Por ejemplo: si queremos que primero nos pregunte por el nombre, luego por los apellidos y por último el nombre completo, tendríamos que añadir la siguiente variable al archivo /var/www/html/phpldapadmin/config/config.php:

  $attrs_display_order = array(
   'sn',
   'cn',
   'displayName'
  );

Los parámetros que no pongamos en este vector  se mostraran despues de los que hallamos indiado y en orden alfabético. Guardamos el fichero para mantener los cambios.

3.5. Parametros de solo lectura

Si queremosq eu ciertos parametros no se puedan modificar, podemos hacerlo con el parámetro read_only_attrs. Por ejemplo: si queremos que el campo dni no se pueda modificar, tendremos que añadir el siguiente vector al archivo /var/www/html/phpldapadmin/config/config.php:

$read_only_attrs = array( 'dni' );

Guardamos y listo.

3.6. Entrar solo con el nombre de un parámetro único

Por defecto para autentificarnos en phpLDAPadmin tenemos que escribir el dn de nuestro usuario. El dn es el que identifica a un objeto y tiene una forma parecida a este ejemplo uid=manolo,ou=personas,o=tuempresa,c=es. Poner toda esta cadena para autentificarte no es nada comodo, pero podemos sustituir el nombre que el usuario utiliza para autentificarse por uno que sea único y más sencillo de recordar, por ejemplo el uid. Para ello tendremos que editar el fichero /var/www/html/phpldapadmin/config/config.php y descomentar y modificar la siguiente línea:

$ldapservers->SetValue($i,'login','attr','uid');

Guardamos los cambios y ya esta.

3.7. Elegir el idioma

Para indicar que lo muestre en español (es) tendremos que editar el fichero /var/www/html/phpldapadmin/config/config.php y editar la siguiente línea:

$config->custom->appearance['language'] = 'es';

Otros idiomas serian: 'ct', 'de', 'en', 'es', 'fr', 'it', 'nl', y 'ru'.

3.8. Activar el log

Para activar el log y que escriba en un fichero /tmp/pla_debug.log tendremos que editar el fichero /var/www/html/phpldapadmin/config/config.php y añadir o descomentar estas líneas:

$config->custom->debug['level'] = 255;
$config->custom->debug['syslog'] = true;
$config->custom->debug['file'] = '/tmp/pla_debug.log';

4. Errores

4.1. Límite de memoria de php bajo

Al instalarlo, cuando accedemos a la url nos aparece el siguiente mensaje de error:

Memory Limit low.
Your php memory limit is low - currently 16M

4.1.1. Solución

Tendremos que editar el fichero /etc/php.ini y buscar la siguiente línea:

memory_limit = 16M

Cambiamos el 16 por 32. Guardamos el fichero y reiniciamos el apache:

>> sudo /etc/init.d/httpd restart

Jue, 06/25/2009 - 18:53

Hacer un balanceador de tomcats con apache

A veces no nos basta con un servidor para poder responder a todas las peticiones que nos llegan y necesitamos tener varios servidores. Pero esto tiene que ser invisible para los usuarios y por eso el punto de entrada es el mismo. Para ello podemos usar un balanceador que según le vayan llegando peticiones de los usaurios les ira redireccionando a un servidor u otro.

Para tener varios servidores con Tomctas instalados y un Apache que redireccione las peticiones a estos, tendremos que seguir los siguientes pasos:

  • Descargamos el instalador del apache (http://httpd.apache.org/).
  • Instalamos el apache.
  • Nos bajamos el conector jk de aqui (http://tomcat.apache.org/download-connectors.cgi): Vamos a Binary Releases, luego a win32 (si tenemos un windows de 32 bits) y por último entramos en jk-1.2.28. Hay una versión para los apache 2.0.x y otra para los apache 2.2.x, bajad la correspondiente al vuestro (para el apache 2.2.x sería mod_jk-1.2.28-httpd-2.2.3.so).
  • Paramos el apache.
  • Movemos el fichero del conector jk a la carpeta de modulos del apache (por defecto es C:\Archivos de programa\Apache Software Fundation\Apache2.2\modules) y lo renombramos como mod_jk.so.
  • Ahora tendremos que editar el fichero de configuración httpd.conf (por defecto estará en C:\Archivos de programa\Apache Software Fundation\Apache2.2\conf\) y añadir la siguiente línea en la zona donde se cargan los demás módulos:

LoadModule jk_module modules/mod_jk.so

  • Crearemos el fichero workers.properies con la definición de los tomcats y del tipo de balanceador. Por ejmplo, imaginemos que tenemos dos tomcats en la misma máquina (localhost), uno con el conector de AJP/1.3 en el puerto 8009 y otro en el puerto 8019 y que queremos usar un balanceador lb. Entonces tendremos el siguiente fichero de configuración:

workers.tomcat_home=C:/tomcat-5.5.20
workers.java_home=C:/jdk1.5.0_03
 
worker.list=balancer
 
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
 
worker.worker2.port=8019
worker.worker2.host=localhost
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
 
worker.balancer.type=lb
worker.balancer.balance_workers=worker1,worker2
worker.balancer.method=B

  • En el archivo httpd.conf (por defecto estará en C:\Archivos de programa\Apache Software Fundation\Apache2.2\conf\) tendremos que configurar unos parametros del conector jk y pondremos las siguientes líneas en las que indicaremos donde escribir los logs, donde esta el fichero que define los workers y alguna cosa mas:

# Path to workers.properties
JkWorkersFile C:/Archivos de programa/Apache Software Fundation/Apache2.2/conf/workers.properties
 
# Path to jk logs
JkLogFile C:/Archivos de programa/Apache Software Fundation/Apache2.2/mod_jk.log
 
# Jk log level [debug/error/info]
JkLogLevel info
 
# Jk log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
 
# JkOptions for forwarding
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
 
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"

  • Después de las líneas anteriores, en el fichero httpd.conf (por defecto estará en C:\Archivos de programa\Apache Software Fundation\Apache2.2\conf\) tendremos que indicar los path que queremos que se redireccionen a los tomcats y a cuales queremos que se redireccionen. Solo podremos direccionar explícitamente a los que esten puestos en la línea worker.list del workers.properties. Si queremos redireccionar a alguno que este dentro del balanceador, tendremos que ponerlos en esta línea también: worker.list=worker1,worker2,balancer. Por ejemplo, para que la url http://www.prueba.es/aplicacion sea redireccionada a algunos tomcats definidos en el archivo workers.properties, tendremos que poner alguna de las siguientes líneas dependiendo de a que lo queremos redireccionar (pondremos tantas líneas como sean necesarias):

# Para que envie al tomcat definido como worker1
JkMount /aplicacion worker1
 
# Para que envie a los tomcats definidos como worker1 y worker2
JkMount /aplicacion worker1 worker2
 
# Si queremos que lo envíe a los tomcats definidos en el balanceador
JkMount /aplicacion balancer

Mar, 11/25/2008 - 22:10

Apache y ldap

Alguna vez abréis tenido que proteger alguna carpeta del apache con un nombre de usuario y contraseña. Recordarlos luego puede ser un caos, pero hoy en dia existe el ldap, y podremos usar nuestras cuentas de ldap para acceder a estas carpetas. Vamos a necesitar tener instalado ldap, apache y los modulos de apache mod_ldap y mod_authz_ldap.

Lo primero que tendremos que hacer es activar los modulos en el apache (reiniciaremos el apache para que tengan efectos los cambios):

>> sudo a2enmod ldap
>> sudo a2enmod authz_ldap
>> sudo /etc/init.d/apache2 restart

Tendremos que asegurarnos de que esté activa la opcion del apache AllowOverride o si no queremos que esté activa para todas carpetas activarlo solo para la que queremos proteger (Por ejemplo para /var/www/html/carpeta):

<Directory "/var/www/html/carpeta">
# Activamos para que use .htaccess
AllowOverride All
</Directory>

Una vez tengamos todo lo qeu necesitamos vamos a lo que importa. Tendremos que ir al directorio que queramos proteger con la autentificación de apache y crearemos un archivo llamado .htaccess y añadiremos el siguiente contenído (para un ldap instalado en la misma máquina del apache 127.0.0.1 y con una raiz o=organizacion,c=es y que se logeen usando el uid):

order deny,allow
deny from all
# localhost
allow from  127.0.0.1
AuthName "Te tienes que autentificar con los usuarios de ldap."
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPURL ldap://127.0.0.1/o=organizacion,c=es?uid
require valid-user
Satisfy any

Esta configuración dejará el acceso a las peticiones desde la misma máquina en la que esta el apache y si se accede desde otra ip se requiere de un usuario que este en el ldap. No es la única manera, ya que podemos decir que deje acceso a los usuarios ldap de un grupo determinado, un usuario específico y muchas cosas mas.

Os recuerdo que estos y mas datos actualizados los podréis encontrar en mi wiki.

Tuve algunos problemas que os pongo a continuación con sus respectivas soluciones:

  • El fichero de .htaccess no tiene efecto, pongas lo que pongas el apache lo ignora.

Solución: Por seguridad puede ser que el apache no permita hacerle nada al fichero .htaccess. Tendremos que editar la configuración del apache y decirle, por ejemplo, que a la carpeta que queramos (en nuestro caso /var/www/html/carpeta) permita al .htaccess hacer cosas (None (por defecto), Limit o All), en nuestro caso le daremos todos los permisos.

  • Cuando nos pide el usuario y contraseña del ldap y se la ponemos no nos deja entrar. En el fichero /var/log/httpd/error_log nos encontramos la siguiente línea:

[Thu Nov 20 13:33:40 2008] [error] [client 215.154.142.25] access to /index.php failed, reason: verification of user id 'usuario' not configured

Solución: Falta de añadir la siguiente línea al fichero .htaccess:

AuthBasicProvider ldap

  • Nos encontramos el siguiente mensaje de error en los logs:

[Thu Nov 20 13:38:51 2008] [warn] [client 155.210.155.148] [3243] auth_ldap authenticate: user prodrig authentication failed; URI /mediawiki/index.php/Portada [LDAP: ldap_simple_bind_s() failed][Can't contact LDAP server]

Solución: Puede que el ldap este parado. Para encenderlo:

>> /etc/init.d/ldap start