Ubuntu 16.04 / Apache / Cómo arreglar el acceso a la carpeta javascript
Si aparece un 403 Prohibido al acceder a /javascript/ en Apache en Ubuntu, verifica si el alias de Apache creado por el paquete javascript-common entra en conflicto con la ruta del sitio. Sin embargo, los errores 403 también pueden ocurrir debido a permisos o configuraciones de listado de directorios, por lo que debes revisar la respuesta real del archivo y la configuración del servidor juntos antes de tomar medidas.
Cosas que revisar primero
Este artículo se basa en un entorno que utiliza Apache 2.4 en Ubuntu. El artículo original cubría Ubuntu 16.04 LTS, que es una versión antigua cuyo soporte estándar y soporte general de Ubuntu Pro han finalizado. Verifique las condiciones para soporte adicional heredado y planifique migrar a una versión compatible. El calendario de soporte se puede consultar en Calendario de Mantenimiento de Seguridad de Ubuntu.
El problema de ver un 403 al abrir solo la dirección de la carpeta /javascript/ en un navegador y no poder cargar los archivos JavaScript dentro de ella son problemas diferentes. Si no hay un archivo índice predeterminado en el directorio y la lista de directorios está desactivada, la dirección de la carpeta puede devolver 403, pero los archivos individuales aún pueden servirse normalmente.
Verifica la URL y el código de estado del archivo que realmente falló en la pestaña de Red (Network) de las herramientas de desarrollo del navegador. Por ejemplo, comprueba si /javascript/app.js referenciado por el sitio devuelve 200, 403 o 404, y también inspecciona el contenido de la respuesta. Incluso si muestra 200, puede devolverse un contenido distinto al archivo de JavaScript previsto.
¿Qué es un conflicto de alias?
En algunos entornos de Ubuntu y Debian, la configuración activa de javascript-common puede incluir alias como los siguientes. Cuando se aplica esta configuración, la ruta URL /javascript puede apuntar a un directorio distinto del que está bajo la raíz de documentos del sitio.
Alias /javascript /usr/share/javascript/
Por ejemplo, si Apache busca el /javascript/app.js solicitado bajo /usr/share/javascript/, los archivos en la carpeta original del sitio pueden no ser servidos. Si el archivo objetivo no existe, puede aparecer un 404, y si se deniega el acceso al objetivo o no se permite la lista de directorios, puede aparecer un 403. No se debe concluir un conflicto de alias basado únicamente en el código de estado.
Este alias está relacionado con solicitudes donde el primer segmento de la ruta de la URL es /javascript. No todas las carpetas javascript bajo otros segmentos, como /assets/javascript/app.js, coinciden automáticamente con ese alias. La asignación y prioridad reales pueden variar dependiendo de los hosts virtuales, otros alias, redireccionamientos y reglas de reescritura. Puede verificar la coincidencia de rutas y el orden de procesamiento en la documentación de alias de Apache.
Verificar configuraciones activas y registros de errores
Conéctese al servidor para verificar la versión de Apache y los hosts virtuales. Las siguientes búsquedas encuentran cadenas relevantes en los directorios de configuración, y también pueden aparecer configuraciones no utilizadas en los resultados.
apache2 -v
sudo apache2ctl -S
sudo grep -R -n -i javascript /etc/apache2
Si /etc/apache2/conf-available/javascript-common.conf aparece en los resultados, revise su contenido y verifique si está realmente activado y vinculado a /etc/apache2/conf-enabled/. Además, revise las configuraciones específicas de cada host virtual y otras reglas de URL. Si el archivo falta o el alias está deshabilitado, no asuma que esta configuración es la causa.
ls -l /etc/apache2/conf-enabled/javascript-common.conf
sudo cat /etc/apache2/conf-available/javascript-common.conf
Si recibes un mensaje de que el archivo o enlace simbólico no existe, entonces la instalación o el estado activo es diferente. Revisa los registros de errores de Apache en el momento de la solicitud para ver la ruta real y los errores encontrados. En la configuración predeterminada de Ubuntu, /var/log/apache2/error.log puede estar disponible, pero las rutas de los registros pueden diferir para cada host virtual.
sudo tail -n 50 /var/log/apache2/error.log
Elige un método de resolución
Si es posible cambiar la ruta del archivo en el sitio, use una ruta como /assets/js/ que no se superponga con el alias, y también modifique la dirección y la configuración de compilación de HTML script. Si hay páginas, cachés o enlaces externos que utilizan la dirección existente, verifique el impacto del cambio y solicite nuevamente los archivos reales después del despliegue. Simplemente cambiar el nombre de la carpeta sin modificar las referencias hará que las páginas existentes no puedan encontrar el archivo.
Si necesita conservar la dirección /javascript existente, el administrador del servidor puede revisar las dependencias de todos los hosts virtuales y paquetes antes de cambiar o deshabilitar el alias. Deshabilitar la configuración javascript-common también puede alterar las direcciones utilizadas por otros sitios o paquetes, por lo que primero debe investigar el impacto y preparar medidas de recuperación. Editar directamente el archivo de configuración del paquete puede complicar la gestión durante las actualizaciones de paquetes.
Las siguientes son opciones cuando ha confirmado que la configuración está habilitada y no es utilizada por otros servicios. Este comando puede afectar toda la configuración de Apache del servidor. Si la verificación de sintaxis falla después de la ejecución, no recargue; resuelva la causa o vuelva a habilitar la configuración primero.
sudo a2disconf javascript-common
sudo apache2ctl configtest
Recargue la configuración solo si la verificación de sintaxis confirma Syntax OK. El nombre del servicio puede variar según el entorno.
sudo systemctl reload apache2
Para revertir, reactive la configuración con los siguientes comandos y recargue solo cuando la verificación de sintaxis sea exitosa.
sudo a2enconf javascript-common
sudo apache2ctl configtest && sudo systemctl reload apache2
Verificar después de los cambios y otras causas
Solicite nuevamente la URL exacta del archivo que falló antes del cambio y verifique el código de estado y el contenido del archivo. Borre la caché de su navegador o configure sus herramientas de desarrollo para no usar la caché, luego verifique las solicitudes de red y los errores de la consola en la página. Además, inspeccione otros sitios o paquetes que usaron la ruta /javascript existente.
Si el alias no es la causa o el error 403 persiste después del cambio, revise las reglas de acceso de Apache Directory·Location, los permisos de lectura de archivos y acceso a directorios padre, la configuración de enlaces simbólicos y los archivos índice por defecto y las políticas de listado de directorios. No permita el acceso de manera aleatoria ni habilite el listado de directorios para eliminar el error, ya que podría exponer archivos que no desea hacer públicos; en su lugar, primero verifique los archivos y políticas realmente necesarios.




