Salta a login

Salta a login

de Juan Rodríguez -
Número de respuestas: 14

Hola a todos

Resumo el problema: Ingreso como administrador y al hacer algunas operaciones (copia de seguridad, actualización de un recurso...) salta a la pantalla de login pidiéndome que ingrese. En la línea inferior me vacila diciendome que estoy en el sistema como administrador. He revisado lo habitual en estos casos y no encuentro explicación. He activado el debug, pero no tengo tiempo de leer el error. ¿Sugerencias?

Promedio de valoraciones: -
En respuesta a Juan Rodríguez

Re: Salta a login

de Eloy Lafuente (stronk7) -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodle HQ Imagen de Moodlers de gran ayuda Imagen de Testers
Hola Juan,

recientemente, en el curso en inglés vi algo parecido y alguien comentó algo relativo a alguna configuración de Apache. Pero me he vuelto loco intentando localizarlo y no ha habido manera! triste

En cualquier caso prueba la cache de tu ordenador, verifica que no tienes ningún firewall que te esté "cortando" cookies o similares y cambia el nombre de la cookie de Moodle en "Administración/COnfigurar Variables", ya contarás....

Ciao sonrisa
En respuesta a Eloy Lafuente (stronk7)

Re: Salta a login

de Juan Rodríguez -

Hola, Eloy

Si algo está mal en la configuración del sistema, necesito saber exactamente la corrección porque la gestión del servidor la lleva un funcionario al que hay que darle las instrucciones pormenorizadas. Algo hay con las fechas, que aparecen en inglés. Además el acceso está redireccionado con un alias (la dirección ftp no es la misma que la http). Los síntomas más "clamorosos" son los siguientes:

- Sin ingresar en el sistema, al seleccionar un curso de libre acceso (permitido a invitados con el autologinguests sí) "repica" (suenan varios clics y se ve como salta de página a página) hasta quedar en home como invitado. Al repetir la selección ya ingresa normal.

- Al dar de alta un libro y pulsar "guardar cambios" salta login/index.php aunque estés como administrador

- Al hacer una copia de seguridad y pulsar "continuar" en backup.php hace lo mismo. Curiosamente, con el cron.php funciona.

Sé que es algo del servidor, un debian, que no es mi especialidad. Pero moodle tampoco lo es del gestor del servidor. Te he enviado un privado con detalles más concretos (y sensibles)

Gracias y salu2

En respuesta a Juan Rodríguez

Re: Salta a login

de Eloy Lafuente (stronk7) -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodle HQ Imagen de Moodlers de gran ayuda Imagen de Testers
Hola Juan,

creo que por fín he sido capaz de reproducir tus problemas en mi servidor de pruebas. Tienes que editar el fichero httpd.conf de apache y localizar la directiva:

UseCanonicalName On

(si mis sospechas son ciertas, ahora la tienes a On, ¿es así?)

Prueba poniéndola a Off y reiniciando el servidor Apache.

Ya contarás, espero que sea eso, porque sino... me quedo sin ideas...

Ciao sonrisa

PD: El "privado" no lo he recibido aunque, si todo va bien, no hace falta no? guiño
En respuesta a Eloy Lafuente (stronk7)

Re: Salta a login

de Juan Rodríguez -

Hola, Eloy

Disculpa la tardanza debida a causas ajenas, como supondrás

Después de comprobar en mi equipo que tu solución funciona, le he comunicado el problema al gestor del servidor. Se ha tomado su tiempo para responder, además de dar lugar a divertidas anécdotas que ahora no vienen al caso. Entretanto constaté que, en los formularios, la variable que toma moodle para hacer el post, en vez de $CFG->wwwroot es una parecida (../~patatín) a la de la dirección de acceso ftps (../home/patatín). Así las cosas, el "gestor" me comunica que con el cambio del UseCanonicalName no se soluciona el problema, que hay que comprobar si Moodle puede funcionar bajo mod_proxy.

¿Qué te parece?

Saludos y gracias

En respuesta a Juan Rodríguez

Re: Salta a login

de Eloy Lafuente (stronk7) -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodle HQ Imagen de Moodlers de gran ayuda Imagen de Testers
Hola Juan,

la verdad es que me estoy perdiendo un poco con tus explicaciones (o las de tu gestor). No veo ninguna razón para que Moodle no funcione correctamente detrás de un proxy (normal o inverso) en tanto en cuanto la configuración del wwwroot sea la correcta (la URL pública del servidor Moodle).

A lo mejor lo tenéis configurado (wwwroot) con la URL interna de vuestra organización, que es distinta de la URL pública con la que se debe acceder al servidor?

Ciao sonrisa
En respuesta a Eloy Lafuente (stronk7)

Re: Salta a login

de Juan Rodríguez -

Créeme, Eloy

Yo también estoy confuso, y como no es con mis explicaciones, por eliminación debe ser con las de "mi" gestor. Yo tampoco veo ninguna razón para el problema. He instalado varias veces Moodle en distintas máquinas sin ningún contratiempo. Reproduciendo el problema que se está dando, he solucionado perfectamente siguiendo tus indicaciones. Por eso me sorprenden sus "explicaciones". Y ya estoy empezando a impacientarme.

Vuelvo a explicarme:

Estoy en la url

http://www.usc.es/cpoliticas/backup/backup.php?id=4

donde, obviamente,

$CFG->wwwroot   = 'http://www.usc.es/cpoliticas';

y, al pulsa el botón aceptar, veo que estoy en la url

http://smicro1.usc.es/%7Eccpp/backup/backup.php

y se muestra el mensaje

Forbidden

You don't have permission to access /~ccpp/backup/backup.php on this server.


Apache/1.3.26 Server at smicro1.usc.es Port 80

¿No está el problema perfectamente definido?

¿No es la solución la que me has indicado?

¿Por qué el "gestor" será reticente a aplicarla, ni siquiera intenta comprobarla y da por supuesto anticipadamente que el problema es otro (de Moodle o mío) y aventura lo de la caché?

Se admiten hipótesis

Gracias por tu paciencia

En respuesta a Juan Rodríguez

Re: Salta a login

de Eloy Lafuente (stronk7) -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodle HQ Imagen de Moodlers de gran ayuda Imagen de Testers
Hola Juan,

a ver si con esta información vamos aclarando el problemilla, que es de lo que se trata:

1.- Moodle construye los links (en un 99% de las ocasiones) utilizando lo que se haya configurado en: $CFG->wwwroot. Por lo tanto, dicha variable tiene que ser siempre la URL pública del servidor (en vuestro caso, "http://www.usc.es/cpoliticas"). Esto supongo que lo tenéis así.

2.- En el 1% restante los links (especialmente las acciones de los formularios) los construye utilizando unas variables standard en cualquier entorno CGI y similares que son SERVER_NAME y HTTP_HOST. Esta construcción especial se debe a que algunas páginas pueden ser llamadas desde distintos orígenes y la única forma de reconstruir las URLs es utilizándolas.
Pues el asunto es que el responsable de poner valor a esas variables es Apache y, dependiendo de la estructura que se haya montado en vuestra institución, hay que realizar una configuración diferente (de Apache) para que a Moodle le lleguen esas variables correctamente configuradas.
Y vosotros parece ser que tenéis el chiringuito organizado de tal forma que vuestro servidor público (http://www.usc.es) es un proxy-inverso que realiza las consultas a los servidores privados (http://smicro1.usc.es), devolviendo el resultado al navegador del usuario.

3.- Esto implica que, en la práctica, el servidor privado (el REAL) está recibiendo TODAS las peticiones desde el servidor público (o el proxy inverso, como prefieras llamarlo).

4.- En Apache (servidor privado) se puede hacer que las variables que te he indicado antes se construyan de dos formas:
a) Forzándolas: En el parámetro "ServerName" se especifica una dirección y, configurando la variable "UseCanonicalName" a "On", esa dirección es la utilizada por las variables de CGI (y consecuentemente, por Moodle).
b) Cogiéndolas del cliente que realiza la petición. Configurando el "UseCanonicalName" a "Off" las variables anteriores se rellenan según haya sido la llamada al servidor interno. Así es como lo tenéis configurado ahora.

5.- Como hemos visto en el punto 3, todas las llamadas al servidor interno están siendo realizadas desde el público (proxy inverso). Y ahí está el quiz del asunto. Estoy casi seguro que el servidor público está haciendo las llamadas al interno, llamando a direcciones internas (http://smicro1.usc.es), con lo cual la variable de entorno SERVER_NAME se rellena con ese valor y Moodle, todo confiado, lo usa para crear algunos links. Y eso es lo que llega, finalmente, al navegador. Evidentemente, en la siguiente petición, el navegador pide algo directamente a vuestro servidor interno, que no es accesible públicamente, y muestra el error de "Prohibido" que comentas.

6.- Visto todo lo anterior, lo que hay que conseguir es que cuando el servidor interno recibe peticiones las reciba como si fuera el servidor público, para que la variable SERVER_NAME se rellene bien y Moode pueda construir links fiables. ¿Y como se consigue esto? Pues depende de la forma en la que está construída (segmentada) vuestra red y demás, pero básicamente hay dos alternativas:

a) O bien el servidor público hace las llamadas al interno llamándolo con el nombre público (lo cual seguramente implicaría modificar el etc/hosts o similares del público).
b) O bien en el servidor interno activáis el "UseCanonicalName" a "On" con lo cual apache forzará ese valor en la variable SERVER_NAME utilizada por Moodle.

pero estas dos soluciones dependen, también de si tenéis accesos diferentes desde fuera de la organización (utilizando el servidor público) y desde dentro de la organización (directamene al servidor interno) o si siempre accedéis a través del externo...

7.- En cualquier caso, es a través de la configuración de Apache como se consigue hacer funcionar todo. La idea, insisto, porque es lo más importante, es que el servidor interno tiene que construir correctamente la variable SERVER_NAME (y esto se consigue de alguna de las dos formas definidas en el punto 6).

8.- Por último, entiendo (aunque no lo he probado), que "toqueteando" en el código de Moodle encargado de obtener el contenido de la variable SERVER_NAME se podría forzar a Moodle a que utilice vuestra dirección pública pero, seguramente es una solución menos elegante ya que, con cada actualización, tendrías que repetir los cambios al código de Moodle.

9.- Todo lo especificado en los puntos 1-7 lo he comprobado "en mis carnes", utilizando un servidor apache como proxy-inverso y otro como servidor de Moodle y, aplicando cualquiera de las dos soluciones del punto 6, tanto los accesos externos (a través del proxy inverso) como internos (directamente al servidor Moodle) los tengo solucionados. guay

10.- Vaya rollo! sacar lengua

Espero que sirva para algo...ciao sonrisa
En respuesta a Eloy Lafuente (stronk7)

Re: Salta a login

de Juan Rodríguez -

Hola, Eloy

Muchas gracias, muchísimas gracias por tu detallada explicación.

Entiendo que en 4b se te ha deslizado un "on" cuando debería ser un "off"

¿Podemos concluir, por tanto, y resumir conque tu primera sugerencia (4a), como comprobé por mi mismo, es una solución inmediata y elegante del problema?

Gracias y "obrigado"

En respuesta a Juan Rodríguez

Re: Salta a login

de Eloy Lafuente (stronk7) -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodle HQ Imagen de Moodlers de gran ayuda Imagen de Testers

Hola,

ya he corregido el fallito de la 4b! Gracias!

Y, sí, es una buena solución, en tanto en cuanto alguna de las siguientes sean ciertas:

  • Si el servidor interno SOLO tiene que responder a peticiones de "http://www.usc.es", ajustando su "ServerName" a "http://www.usc.es" y "UseCanonicalName" a "On".

  • Si el servidor interno responde a peticiones de otros servidores públicos, ajustando los parámetros "ServerName" y "UseCanonicalName" a nivel de virtualhost, para que el resto de servidores virtuales (que corresponden a otras direcciones) siga funcionando.

Ciao sonrisa

En respuesta a Eloy Lafuente (stronk7)

Re: Salta a login

de Juan Rodríguez -

Hola, Eloy

Estas son las novedades: el encargado del servidor, insistiendo en que es un problema de Moodle, ha informado del bug en:

http://moodle.org/bugs/bug.php?op=show&bugid=2664.

Según se desprende, en las circunstancias que se dan en este caso concreto, cuando Moodle toma

$_SERVER["HTTP_HOST"]

debe tomar

$_SERVER["HTTP_X_FORWARDED_HOST"]

Su parche es una solución parcial y las alternativas parecen ser:

  • Completar el parche y aplicarlo cada vez que se actualice la versión
  • Pasarse a la versión 1.5 de Moodle

¿Se te ocurre alguna otra alternativa? ¿Qué solución me recomiendas?

Gracias sonrisa

En respuesta a Juan Rodríguez

Re: Salta a login

de Eloy Lafuente (stronk7) -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodle HQ Imagen de Moodlers de gran ayuda Imagen de Testers
Hola Juan,

si miras el Bug 2664 verás que ha sido soluciondo en la versión 1.5 de Moodle y, actualmente, esta siendo comprobado en unos cuantos servidores. Si todo va bien, seguramente será incluido en la version 1.4.x tambien.

La modificación es muy sencilla y consiste en evitar utilizar todas esas cabeceras HTTP_HOST y HTTP_SERVER que, a no ser que configures todo de forma apropiada, pueden dar problemas como los que comentabas en esta discusión (que insisto que son solucionables simplemente configurando, que algunos servidores detrás de proxies inversos voy viendo a lo largo de mi vida) sacar lengua

De todas formas, nos ha venido muy bien la discusión provocada por tí, ya que nos ha obligado a pensar en una solución estos días y al final, parece que Moodle va a ser un poco menos "exigente" en cuanto a configuraciones externas.

La función, tal y como está funcionando actualmente en la versión 1.5 queda así (en rojo el código que hemos añadido y que debería ser incluido en la 1.4:

function qualified_me() {

if (!empty($_SERVER['SERVER_NAME'])) {
$hostname = $_SERVER['SERVER_NAME'];
} else if (!empty($_ENV['SERVER_NAME'])) {
$hostname = $_ENV['SERVER_NAME'];
} else if (!empty($_SERVER['HTTP_HOST'])) {
$hostname = $_SERVER['HTTP_HOST'];
} else if (!empty($_ENV['HTTP_HOST'])) {
$hostname = $_ENV['HTTP_HOST'];
} else {
notify('Warning: could not find the name of this server!');
return false;
}
if (isset($_SERVER['HTTPS'])) {
$protocol = ($_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';
} else if (isset($_SERVER['SERVER_PORT'])) { # Apache2 does not export $_SERVER['HTTPS']
$protocol = ($_SERVER['SERVER_PORT'] == '443') ? 'https://' : 'http://';
} else {
$protocol = 'http://';
}

$url_prefix = $protocol.$hostname;
return $url_prefix . me();
}


Seguro que Pedro guiño la puede poner en vuestro servidor y probar si así va todo bien. Son solo 6 líneas y si van mal (cosa que no creo que pase) las podéis quitar en un plis-plas.

Gracias por los informes, bugs y detalles. Así da gusto encontrar los problemillas!

Ciao sonrisa
En respuesta a Eloy Lafuente (stronk7)

Re: Salta a login

de Angela Maria Valderrama -

Saludos Eloy,

Mi situación es la siguiente, tenia instalado moodle 1.4 en un servidor red-hat 9.0 ahora lo cambie a Debian, todo funcionaba bien, hasta que intente restaurar un curso (de un servidor en red-hat), me pregunta si estoy segura de restaurar el curso, le digo que si, pero la pantalla se queda en blanco y no hace nada. Tienes alguna idea. ya mire el archivo /etc/apache/conf/httpd.conf y cambie la variable UseCanonicalName a off.

De antemano muchas gracias por tu ayuda. Te envio el archivo a restaurar.

 

En respuesta a Angela Maria Valderrama

Re: Salta a login

de Eloy Lafuente (stronk7) -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodle HQ Imagen de Moodlers de gran ayuda Imagen de Testers
Hola Ángela,

acabo de restaurar tu backup en mi servidor y me ha funcionado correctamente, por lo que el problema debe estar en tu servidor Debian.

Lo primero recomendable es que actualices a la versión 1.4.4.+ que incorpora numeras mejoras desde la 1.4 inicial (que es con la que has creado la copia de seguridad).

Después, si coninua sin funcionarte, te recomiendo que actives el debug en "Administración/Configuración" para ver si, en vez de la pantalla en blanco, se muestra algún error. También puede ser recomendable echar un vistazo al fichero "error.log" de Apache para ver si te aparece algo.

Ya contarás, ciao sonrisa
En respuesta a Eloy Lafuente (stronk7)

Re: Salta a login

de Angela Maria Valderrama -

Hola Eloy,

Tengo la siguiente situación, estoy tratando de restaurar un curso en un servidor Debian, pero este no me trae los archivos que residen en el directorio archivos del curso. La aplicación no me muestra errores. Tienes alguna idea de lo que esta mal.

Ciao, y de antemano muchas gracias