Proxy de caché HLS con Nginx

Nginx podría utilizarse en servidores edge para actuar como proxy de caché HLS. Si una solicitud de un archivo no se encuentra en la caché, se recupera del servidor de origen con dirección http://192.168.88.100:8000. Archivo almacenado en el /opt/ramcache y luego se sirve al cliente.

Crear un archivo de configuración Nginx para HLS Caching Proxy en /etc/nginx/conf.d/hls_proxy.conf:

proxy_cache_path "/opt/ramcache" use_temp_path=off keys_zone=hls:1m inactive=30s max_size=10g;

server {
    listen 4000;
    server_name _;

    location ~* \.(m3u8)$ {
        proxy_cache off;
        expires -1;
        proxy_pass http://192.168.88.100:8000;
        include /etc/nginx/hls_proxy_params.conf;
    }

    location ~* \.(ts)$ {
        proxy_pass http://192.168.88.100:8000;
        proxy_cache hls;
        proxy_cache_key $request_uri;
        proxy_cache_valid 200 10s;
        proxy_cache_lock on;
        proxy_cache_lock_timeout 5s;
        proxy_cache_lock_age 5s;
        include /etc/nginx/hls_proxy_params.conf;
    }
}

y opciones de representación comunes en /etc/nginx/hls_proxy_params.conf:

proxy_redirect              off;

proxy_connect_timeout       5s;
proxy_send_timeout          180s;
proxy_read_timeout          180s;

# Buffer for headers
proxy_buffer_size           16k;
proxy_buffers               512  32k;
proxy_temp_file_write_size  512k;
proxy_max_temp_file_size    256m;

# For keepalive
proxy_http_version          1.1;

proxy_set_header            Host $host;
proxy_set_header            X-Real-IP $remote_addr;
proxy_set_header            X-Forwarded-For $remote_addr;
proxy_set_header            X-Forwarded-Proto $scheme;

proxy_next_upstream         error timeout http_502 http_504;
proxy_next_upstream_tries   2;

Cree un directorio para la caché de nginx y establezca el propietario en el usuario adecuado:

mkdir -p /opt/ramcache
chown -R nginx:root /opt/ramcache

Cabecera Expires

Es importante que el servidor de origen envíe una respuesta con las cabeceras adecuadas que definan el tiempo de caducidad del contenido que se está sirviendo.

En Expires y X-Accel-Expires se pueden utilizar para especificar la cantidad de tiempo que una respuesta debe ser considerada fresca y puede ser almacenada en caché por nginx. La cabecera Expires se puede utilizar para especificar un tiempo de caducidad absoluto para el contenido, mientras que la cabecera X-Accel-Expires se puede utilizar para especificar un tiempo de caducidad relativo en segundos.

En los ajustes de Astra puede activar las cabeceras en Ajustes -> HLS -> Usar cabecera Expires