
Estoy tratando de encontrar la mejor manera de agregar una verificación de autenticación a las solicitudes de activos estáticos en mi servidor.
Estoy ejecutando Apache2.4 y PHP/Laravel, que se ejecuta entregando contenido estático directamente desde DocumentRoot
e ingresa para index.php
manejar las rutas dinámicas.
He estado buscando y encontré un par de opciones, pero no estoy seguro de cuál sería el consenso sobre las mejores prácticas y las más eficientes:
1) Cree y configure un ActionHandler en Apache para llamar a un script CGI para ofrecer contenido estático. Este script abriría una conexión de base de datos para cada solicitud, verificaría los derechos de control de acceso y devolvería un 301 o entregaría el contenido. Mi opinión sobre esto es que el rendimiento se verá muy afectado al abrir una nueva conexión de base de datos para cada solicitud.
Intenté agregar:
Action serve-static /var/www/file-server.py
AddHandler serve-static .js .css
al <Directory>
bloque, pero eso provocó que todos los css/js devolvieran 404.
2) Utilice una combinación de mod_rewrite
y mod_proxy
para enviar todas las solicitudes de archivos estáticos a otro servidor de aplicaciones (o equilibrar la carga a varios) que ya tendría una conexión de base de datos abierta, realizar una verificación de autenticación y devolver el archivo de manera adecuada. Mi preocupación con este enfoque es que creo que Apache podría convertirse en un cuello de botella en el enlace descendente de regreso al cliente.
Empiezo con un <Directory /var/www/html/app/public>
bloque que contiene toda la aplicación.
No estoy muy familiarizado con mod_rewrite
y mod_proxy
, así que creo que podría crear algo como
<Directory /var/www/html/app/public/static>
RewriteEngine on
RewriteRule "(.*)$" "http://fileserver/$1" [P]
ProxyPassReverse "/public/static" "http://fileserver/"
</Directory>
Pero no puedo hacer que esto envíe solicitudes de proxy a la capa del servidor de archivos para siquiera probar la eficiencia.
¡Cualquier idea aquí sería apreciada!
Respuesta1
Si el contenido estático ya está en el servidor web, comience de manera simple. Omita (por ahora) el script CGI, el proxy, la reescritura de URL y el almacenamiento en caché.
En una directiva de directorio para estática, usemódulos de autenticación de httpdpara bloquear eso. Implica una conexión de base de datos, lo que significa mod_authn_dbd y mod_authz_dbm, y requiere que su base de datos tenga hashes de contraseña admitidos por los módulos.
Con el tiempo querrás almacenar en caché, varias consultas de base de datos por documento no funcionan bien. Una implementación de Apache esmod_authn_socachey puede incluir autenticaciones en su caché de objetos compartidos, que puede estar respaldada por memoria compartida, memcached y más.
Podrías realizar un almacenamiento en caché similar en el marco de tu aplicación web. Ese es un ejercicio para el lector, ya que es más un desarrollo que configurar un servidor web.