Weserv Images#
El módulo weserv redimensiona, recorta y convierte imágenes al vuelo.
Forma parte del proyecto weserv/images, el código que hay detrás del servicio
wsrv.nl.
El módulo funciona en uno de dos modos:
proxy— obtiene la imagen del servidor remoto indicado en el parámetro de consultaurl;filter— procesa las imágenes de las respuestas generadas por otros manejadores, como los archivos estáticos.
En ambos modos, la cadena de consulta define el procesamiento: Para instalar el módulo, utilice uno de los siguientes paquetes: Angie: Angie PRO: Directivas principales del módulo: En el modo proxy, la variable Todas las directivas con sus valores por defecto se describen en la
documentación del módulo. Para utilizar el módulo, debe cargarse en el contexto Aquí, las solicitudes con el parámetro Angie resuelve los nombres de host de Supongamos que un servidor en En el modo proxy, el módulo obtiene la imagen indicada en La cabecera En el modo filter, los mismos parámetros se aplican a un archivo local; aquí la
imagen se recorta para llenar un cuadrado de 50 × 50 y se convierte a WebP: El archivo Cuando el módulo no puede devolver una imagen, responde con un error en JSON: Versión: v5.1.0 La documentación detallada y el código fuente están disponibles en:
weserv/imagesw y
h establecen el ancho y el alto de destino, fit define cómo se
ajusta la imagen a ellos, output define el formato de salida, etc.
La lista completa de parámetros está en la
documentación de wsrv.nl.Instalación#
angie-module-weserv-imagesangie-pro-module-weserv-imagesDirectivas#
weserv — habilita el módulo en un location y selecciona el
modo, proxy o filterweserv_deny_ip — prohíbe obtener imágenes de las direcciones o
rangos CIDR indicados; se aplica solo a las direcciones IP escritas
directamente en el parámetro url, no a los nombres de hostweserv_connect_timeout, weserv_send_timeout,
weserv_read_timeout — establecen los tiempos de espera para
conectarse al servidor remoto, enviarle la solicitud y leer su respuestaweserv_max_size — limita el tamaño de una imagen a procesarweserv_limit_input_pixels, weserv_limit_output_pixels — limitan
el número de píxeles de las imágenes de entrada y de salidaweserv_savers — enumera los formatos de salida que puede solicitar el
parámetro outputweserv_quality — establece la calidad de salida por defecto; las
directivas como weserv_jpeg_quality y weserv_webp_quality la
sustituyen para un solo formato$weserv_response_length contiene el
tamaño en bytes de la imagen original obtenida; en el modo filter, la variable
no se establece.Carga del módulo#
main{}:load_module modules/ngx_weserv_module.so;
Ejemplo de configuración#
server {
listen 80;
server_name images.weserv.local;
root /var/www/imagesweserv/public;
location / {
weserv proxy;
add_header X-Upstream-Response-Length $weserv_response_length;
}
location /static/ {
weserv filter;
alias /var/www/imagesweserv/public/;
}
}
url se procesan en modo proxy,
y para las solicitudes bajo /static/ el módulo procesa en modo filter
los archivos del directorio /var/www/imagesweserv/public/.
Una solicitud a / sin url no la procesa el módulo y recibe un
archivo estático de root.url con su propio resolvedor; por
defecto, consulta los servidores de nombres indicados en /etc/resolv.conf,
y no se consulta el archivo /etc/hosts. Para usar otros servidores DNS,
establezca la directiva resolver. Las direcciones IP en url no
necesitan resolución.Demostración#
127.0.0.1:8081 sirve la imagen original
sample.png (400 × 300 píxeles, 2351 bytes), y el mismo archivo
se encuentra en /var/www/imagesweserv/public/.url y la
escala al ancho w, manteniendo la proporción:$ curl -s -D - -o out.png 'http://localhost/?url=127.0.0.1:8081/sample.png&w=100'
HTTP/1.1 200 OK
...
Content-Type: image/png
Content-Length: 15633
Content-Disposition: inline; filename=image.png
Link: <http://127.0.0.1:8081/sample.png>; rel="canonical"
...
X-Upstream-Response-Length: 2351
$ file out.png
out.png: PNG image data, 100 x 75, 8-bit/color RGB, non-interlaced
Link apunta a la imagen original, y
X-Upstream-Response-Length contiene su tamaño, que la configuración
de ejemplo añade a partir de $weserv_response_length.
El prefijo http:// en url es opcional; al añadir
&output=jpg a la misma solicitud se obtiene una imagen JPEG.$ curl -s -D - -o small.webp 'http://localhost/static/sample.png?w=50&h=50&fit=cover&output=webp'
HTTP/1.1 200 OK
...
Content-Type: image/webp
Content-Length: 250
...
small.webp es una imagen WebP de 50 × 50.
La respuesta no tiene la cabecera X-Upstream-Response-Length: la
ubicación /static/ no la añade, y en el modo filter
$weserv_response_length no se establece.$ curl -s 'http://localhost/?url=127.0.0.1:8081/missing.png'
{"status":"error","code":404,"message":"The requested URL returned error: 404"}
Información adicional#