• Publicidad

Procesar peticiones Apache con Perl

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Procesar peticiones Apache con Perl

Notapor danimera » 2014-01-15 16:48 @741

Rara la pregunta.

Lo que quiero es lograr que cualquier petición que se haga a mi servidor la procese un programa Perl antes de que el servidor se ejecute, es decir, si llamo la URL

http://www.pagina1.com/curos/dato.php

antes de eso Apache pase esta URL a un programa verificar.pl que procesará el HTTP_REFERER y según de donde venga hará lo que tenga que hacer que realmente es redireccionar a lo mismo cambiando el dominio.

Explicación:

Tengo 3 dominios que apuntan a la misma instalación de una aplicación:
Sintáxis: [ Descargar ] [ Ocultar ]

Todos apuntan a una aplicación que está instalada con el dominio http://www.aplicacion.com

Yo busco que nunca el cliente se dé cuenta de que la aplicación está instalada en http://www.aplicacion.com Mis clientes son expertos así que solo quiero que el navegador muestre el dominio del cliente, pero jamás muestre http://www.aplicacion.com y si alguna petición hay a http://www.aplicacion.com poder hacer una redirección a la URL del cliente, por ejemplo http://www.pagina2.com Obviamente la URL de la aplicación por algún momento se mostraría, o con clic derecho se vería, pero me interesa es sostener siempre los dominios de los clientes y no los de la aplicación.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Publicidad

Re: Procesar peticiones Apache con Perl

Notapor explorer » 2014-01-15 17:28 @769

Se puede hacer de varias maneras, pero en principio, la respuesta es no: el servidor Apache estará funcionando siempre. No puede ser "saltado" por un programa Perl.

Se puede resolver con un proxy, en el propio Apache: mod_proxy reconoce las direcciones de entrada y puede ejecutar un filtro Perl.

Pero... ¿cuál es el problema? Que tres dominios hagan uso de una aplicación que está instalada en el propio servidor. Bueno, pues esto es algo que el propio Apache puede resolver por sí mismo. Vale con definir un directorio lógico con ScriptAlias:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
ScriptAlias /curso /opt/curso

<Directory "/opt/curso/">
    AllowOverride None
    Options ExecCGI FollowSymLinks -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Así, definimos una ruta /curso que apunta al directorio físico /opt/curso, donde está la aplicación. Y además indicamos que contiene archivos que pueden ser ejecutadas (los archivos .php o .pl o lo que sea).

Si tenemos un Apache que ya tiene definida la ejecución de archivos .php, entonces es más fácil: basta con un Alias
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Alias /curso /opt/curso
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Yo, por ejemplo, tengo uno así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Alias /correo /usr/share/horde3
<Directory "/usr/share/horde3">
    Options FollowSymLinks
    AllowOverride Limit
    Order allow,deny
    Allow from all
    php_flag session.auto_start Off
    php_admin_value open_basedir /usr/lib/php5/:/usr/share/php/:/usr/share/horde3/:/etc/horde/:/var/log/horde/:/tmp/
</Directory>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Los clientes entran con http://sudominio.com/correo y pueden entrar a su webmail, bajo su propio dominio.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Procesar peticiones Apache con Perl

Notapor danimera » 2014-01-15 17:46 @782

El problema es que no debe cambiar jamás la URL que se muestra en el navegador, a menos pues si llegue a cambiar sea por un segundo mientras redireccione a la URL que debe ser, por ejemplo http://www.cliente1.com debe siempre mostrarme http://www.cliente1.com cuando yo haga clic en un vínculo que sea http://www.aplicacion.com/algo debo de ejecutar pero en el navegador debe redireccionarse a http://www.cliente1.com
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: Procesar peticiones Apache con Perl

Notapor explorer » 2014-01-15 18:31 @813

El Alias del Apache (módulo mod_alias) no redirecciona cambiando el URL de la petición.

Pero ahora planteas otra cosa: dices que si se pulsa en

http://www.aplicacion.com/algo

vaya a

http://www.cliente1.com

Yo creo que te estás liando. Creo que lo que quieres es que siempre aparezca los nombres de dominio de los clientes. Y que se ejecute la aplicación en cada uno de ellos, de forma independiente a lo que ponga la URL. Bueno, pues eso es trabajo del Alias.

Del ejemplo que te he puesto antes: yo tengo clientes que acceden a

http://dominio1.com/correo
http://dominio2.com/correo
http://dominio3.com/correo

Y por efecto del Alias, los tres acceden al mismo directorio donde se encuentra la aplicación webmail. Ellos siguen viendo sus URL, pero están ejecutando la misma aplicación.

Puedes ponerlo así:

Alias / /opt/curso

Y entonces TODAS las peticiones van dirigidas -internamente- a la aplicación almacenada en /opt/curso.

Pero, atención: esto solo funciona en caso de que todos los dominios de los clientes Y la aplicación estén en el mismo servidor web.

Otra forma es usando mod_rewrite.
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
RewriteEngine On
RewriteCond %{HTTP_HOST}    (pagina1|pagina2|pagina3)\.com
RewriteRule ^/curso(.*)     http://www.aplicacion.com/curso$1 [P]
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Esto se coloca en el servidor donde están los clientes. Si la petición viene de alguno de los tres dominios de los clientes, se desvía la petición a otra URL, en modo proxy. Esto es para el caso de que aplicacion.com esté en un servidor distinto que el de los clientes. Si la aplicación está en el mismo servidor, con Alias es suficiente.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Procesar peticiones Apache con Perl

Notapor danimera » 2014-01-16 15:17 @679

Exactamente eso es lo que quiero, que siempre aparezca el nombre del dominio del cliente, Con esto he solucionado la primera parte...

Ahora lo que tengo que hacer con Apache2::ModProxyPerlHtml, es que cuando me cargue el contenido HTML de mi aplicación desde el dominio del cliente, éste me sustituya el dominio de la URL de todos los enlaces en el contenido HTML de donde está la aplicación por el dominio del cliente que hizo la petición, y cuando le de clic en un enlace de éste usar otro mod_rewrite para ejecutar :twisted: desde el dominio de la aplicación... ^^
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: Procesar peticiones Apache con Perl

Notapor explorer » 2014-01-16 16:22 @723

No necesitas modificar los enlaces, ¿no? Basta conque los enlaces estén escritos en modo relativo.

Es decir, de esta manera:

<a href="/curso/entras.php"><img src="/img/imagen.jpg"></a>

Así, da igual el dominio que aparezca en el URL. El mod_rewrite se encargará de redirigir la petición.

De todas maneras... ¿*todo* el contenido de los dominios de los clientes los genera la aplicación? Si ese es el caso, aún se puede hacer más fácil: basta con cambiar los DNS de los dominios de los clientes para que apunten directamente a aplicacion.com.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Procesar peticiones Apache con Perl

Notapor danimera » 2014-01-16 16:30 @729

No puedo cambiar los DNS ya que los clientes tienen aplicaciones en sus sitios web. Solo puedo usar un directorio o algún subdominio.

No necesitas modificar los enlaces, ¿no? Basta conque los enlaces estén escritos en modo relativo.

Es decir, de esta manera:

<a href="/curso/entras.php"><img src="/img/imagen.jpg"></a>


Esto me parece genial, si la aplicación permitiera hacerlo, es un LMS, me gustaría probar esa manera... Hummm esta me gusta mucho más, Humm claro esto sí me gusta... Gracias, explorer. Vamos a ver.

Una pregunta:

¿Qué podría pasar con las cookies? De hecho ya me está funcionando de esta forma que me dices, pero tengo un formulario de login y a veces me sale error de cookies...

Será que esta solución no va si se manejan sesiones...
Última edición por explorer el 2014-09-01 20:05 @878, editado 2 veces en total
Razón: Ortografía
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: Procesar peticiones Apache con Perl

Notapor explorer » 2014-01-16 21:05 @920

danimera escribiste:No puedo cambiar los DNS ya que los clientes tienen aplicaciones en sus sitios web. Solo puedo usar un directorio o algún subdominio.
Pues esa es la solución: un subdominio. Les pides que creen un subdominio de su dominio, y que su IP sea el de aplicacion.com. No necesitas nada más.

danimera escribiste:¿Qué podría pasar con las cookies? De hecho ya me está funcionando de esta forma que me dices, pero tengo un formulario de login y a veces me sale error de cookies...
El problema de las galletas es que están asociadas siempre al nombre del dominio conque fueron grabadas.

Si tu aplicación está en aplicacion.com, los clientes entregarán las galletas guardadas en sus equipos solo si se conectasen a ese dominio, pero no es el caso (aquí tengo alguna duda).

Veo que el Firefox, en Preferencias->Privacidad->Historial, se puede indicar que se pueden aceptar cookies de terceros. Este es tu caso: están accediendo a aplicación.com pero con otro dominio distinto. Tus clientes deberían entonces indicar que sí se permiten.

No sé... habría que hacer pruebas... pero creo que con el truco del subdominio, debería ser suficiente.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Procesar peticiones Apache con Perl

Notapor danimera » 2014-01-17 12:03 @544

Realmente creo que internamente la aplicación hace alguna verificación y da un error... porque la verificación del usuario y contraseña se hace bien, pero cuando envía las cookies sale un error con el ID de sesión, pero solo cuando lo hago desde un dominio fuera del servidor...

Por ejemplo, en la petición envía
Sintáxis: [ Descargar ] [ Ocultar ]
  1. Cookie:    MoodleSession=p5mmftkl6tgokdlhuaj5mptm94 


Estoy intentando a ver si este LMS tiene algo de seguridad y se lo quito, quizás sea eso, vamos a ver si tiene alguna configuración.
Última edición por explorer el 2014-09-01 20:06 @879, editado 2 veces en total
Razón: Ortografía
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia


Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados