Pular para o conteúdo

Proxy de cache HLS com Nginx

O Nginx pode ser usado em servidores de borda para funcionar como um proxy de cache HLS. Se a requisição de um arquivo não for encontrada no cache, ele é buscado no servidor de origem no endereço http://192.168.88.100:8000. O arquivo é guardado na pasta /opt/ramcache e depois entregue ao cliente.

Crie um arquivo de configuração do Nginx para o proxy de cache HLS em /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;
}
}

e as opções comuns de proxy em /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;

Crie o diretório para o cache do nginx e defina o dono como o usuário adequado:

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

É importante que o servidor de origem envie a resposta com os cabeçalhos adequados, que definem o tempo de expiração do conteúdo entregue.

Os cabeçalhos Expires e X-Accel-Expires podem ser usados para indicar por quanto tempo uma resposta deve ser considerada válida e pode ficar em cache no nginx. O cabeçalho Expires define um tempo de expiração absoluto para o conteúdo, enquanto o X-Accel-Expires define um tempo de expiração relativo, em segundos.

Nas configurações do Astra você pode ligar esses cabeçalhos em Settings -> HLS -> Use Expires header