Distribuir imágenes desde PHP como portal cautivo

Mujiwara

Tengo una web en marcha desde hace una semana y monté un sistema sencillo para distribuir todas las imágenes del tipo las que están aceptadas están visibles para todos los usuarios, las que están en moderación solamente visibles para aquellos usuarios que en ese momento quieren moderar esa imagen y las eliminadas que solamente se muestran al administrador. En teoría agregue correctamente los headers() para definir el content-type, length, last modified y la cache, así que la distribución tendría que ser totalmente válida.

El servicio web corre sobre un nginx + php-fpm y me preocupa el tiempo de espera que el "portal cautivo (por llamarlo de alguna manera)" sea mayor y además afecte al rendimiento de la web.

La diferencia es realmente mínima: 144ms, pero si necesito coger 25 imágenes de golpe la cosa cambia son 3600ms = 3.6s que pierdo al tener que procesar las peticiones.

Había pensado en agregar un nuevo servidor y utilizar un Cookie-based tal y como he encontrado aquí: https://gist.github.com/rnorth/2031652

Así que me preguntaba, antes de liarla conocer si alguien ha lidiado con este problema antes y puede compartir su experiencia :)

RaymaN

No entiendo muy bien lo que quieres hacer. Si solo quieres limitar la carga de imágenes a usuarios con permiso, ¿por qué no lo haces con condiciones en la página en vez de generar la imagen dinámicamente?

1 respuesta
Mujiwara

#2 Pero necesito limitarlo en caso que alguien pille el enlace de la imagen que no pueda por ejemplo entrar de nuevo en ella cuando no está moderando esa imagen, o la imagen ha acabado como rechazada en el sistema por lo que necesito aplicar dichas condiciones cuando genero la imagen para que solamente los administradores puedan visualizarla.

1 respuesta
RaymaN

#3 en ese caso puedes probar la solución que comentas: meter la condición de la cookie en un nuevo servidor que contenga la ruta de las imágenes, aunque pierdes control puesto que, si no me equivoco, si una imagen acaba rechazada, los moderadores seguirán teniendo la cookie con el valor que les permite visualizarla.

La solución más segura es la inicial de generar las imágenes dinámicamente. No podrás optimizar demasiado porque siempre tendrás que cargar php-fpm, pero puedes usar algún método de lazy load. Además, si las imágenes aprobadas son invariables puedes pasarlas a estáticas.

1 1 respuesta
Mujiwara

#4 Podría meter la cookie con un max-age, pero supongo que sigue habiendo el problema de perder el control ya que la cookie se puede manipular, por lo que estoy descartando ya este método.

Por otra parte ya utilizo un método para el lazy load, y lo último que acabas de comentar me acaba de solucionar el problema parece, me explico, cuando son aceptadas las puedo mover a un directorio público y en caso de tener que retirar la imagen solamente tendría que borrarla de dicho directorio y la podría seguir accediendo desde el portal cautivo para gestionarla.

Muchas gracias, sin duda no había caído en que el mayor problema que tengo es cuando sirvo el contenido aceptado que es el que tendrá más público y desde donde se realizaran más peticiones y no es necesario distribuirlo mediante el backend de PHP.

1 respuesta
RaymaN

#5 también puedes reducir el nivel de compresión de gzip en nginx. Quizá uno o dos niveles menos quite carga de la cpu y mejore la velocidad.

1 respuesta
Mujiwara

#6 Acabo de configurar el entorno de desarrollo con la "CDN" y a pesar de que las fotografías de arriba son del entorno en producción y que la referencia última que he cogido en desarrollo es de:
Waiting: 701.30ms
Content Download: 16.55ms

Y con la CDN activa, he pasado a:
Waiting: 2.05ms
Content Download: 12.75ms

Ahora tocará ponerlo en producción jeje

Mil gracias :qq:

Edito con imágenes para que se puedan apreciar los resultados:

1

Usuarios habituales

  • Mujiwara
  • RaymaN