Tutorial: Solución a problemas de carga de Moodle con Nginx

Entre las cosas que he aprendido, también he desplegado un sistema Moodle en aulavirtual.interlan.ec con apache2, pero tras algunos cambios me he enfrentado a la tarea de configurar Moodle con Nginx. Moodle es una plataforma de gestión del aprendizaje (LMS) de código abierto que permite a los instructores crear y gestionar cursos en línea. Para comenzar, primero necesito instalar Nginx en mi servidor.

Repaso de la instalación de Nginx

Primero, instalo Nginx en mi servidor utilizando el siguiente comando:

sudo apt-get update
sudo apt-get install nginx

Configuración de Nginx: Luego, creo un archivo de configuración para Moodle en el directorio /etc/nginx/sites-available/. Este archivo incluye la configuración básica de Nginx para servir Moodle:

server {
    listen 80;
    server_name tu_dominio.com;
    root /ruta/a/moodle;
    index index.php index.html index.htm;

    location / {
        try_files \$uri \$uri/ /moodle/index.php?\$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
}

Reinicio de Nginx: Después de guardar el archivo de configuración, reinicio Nginx para aplicar los cambios:

sudo systemctl restart nginx

Como advertencia, esto es solo valido para nginx instalado desde los repositorios. Luego haré un articulo explicando como funcionan los archivos conf de nginx oficiales.

El Problema

El problema que me he encontrado, es que la pagina inicial carga sin formato.

Al revisar en el inspector de elementos, descubro que los elementos fallidos, aunque dan un estado 200, llegan con un content-type text/html

Y no solo eso, al revisar el archivo en cuestión, es posible ver que ha cargado la pagina inicial. Lo ha hecho en todos los archivos js y css del sitio.

Solución

El primer acercamiento que tuve, fue culpar a Nginx. Tratando de forzar el MIME, reescribiendo las reglas y preguntándole mucho a la IA, sin resultados.

Por cierto, la IA seguro sabia la respuesta, pero no supe preguntarle apropiadamente.

Tras mucho revisar por internet, encontré que la solución era simplemente agregar una linea de código al archivo config.php de Moodle para que funcione.

$CFG->slasharguments = false;

Con esto queda resuelto el problema de forma parcial. todavía queda un problema registrado por la documentación de Moodle, que indica que cosas como SCORN podrían no funcionar. Todavía queda algo por arreglar.

Según la documentación oficial en los ajustes de nginx hay que poner lo siguiente:

location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info  ^(.+\.php)(/.+)$;
    fastcgi_index            index.php;
    fastcgi_pass             127.0.0.1:9000 (or your php-fpm socket);
    include                  fastcgi_params;
    fastcgi_param   PATH_INFO       $fastcgi_path_info;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

alternativamente también sugiere lo siguiente:

location ~ ^(.+\.php)(.*)$ {
    root /usr/share/nginx/html/moodle/;
    fastcgi_split_path_info  ^(.+\.php)(.*)$;
    fastcgi_index            index.php;
    fastcgi_pass             127.0.0.1:9000;
    include /etc/nginx/mime.types;
    include                  fastcgi_params;
    fastcgi_param   PATH_INFO       $fastcgi_path_info;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Siendo esta ultima la que me funcionó en mi caso.

Conclusiones

Nginx todavía me parece confuso. Pero esta vez he aprendido que hay errores que pueden tenerme dando vueltas sin posibilidad de resolverlo excepto por la experiencia de otros. Comparto este articulo para que otras personas también encuentren solución a problemas similares. También es interesante notar que aunque la IA sepa la respuesta, sin las preguntas apropiadas, esta igual de perdida que uno jajaja

También puedes revisar mis otros artículos resolviendo problemas

Únete a mi red poniendo la URL de tu blog. Aprender más

 

Descubre más desde Interlan

Suscríbete y recibe las últimas entradas en tu correo electrónico.

,

Deja un comentario

Interlan