Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

254
Visualizações
¿Cómo servir parte de un archivo con Nginx?

Estoy usando X-Accel para servir contenido protegido, usando X-Accel-Redirect.

¿Es posible servir solo una parte del archivo? por ejemplo, el rango de bytes 0-x, o los primeros 5 minutos de un video (mi objetivo final)

Es importante hacerlo en el lado del servidor, para que el cliente no tenga acceso al resto del archivo.

Actualmente así es como envío el archivo completo:

 X-Accel-Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Content-Type: application/octet-stream Content-Length: {file_size} Content-Disposition: attachment; filename="myfile.mp4" Accept-Ranges: bytes X-Accel-Buffering: yes X-Accel-Redirect: /protected/myfile.mp4

Conferencia Nginx:

 location /protected { internal; alias /dir/of/protected/files/; if_modified_since off; output_buffers 2 1m; open_file_cache max=50000 inactive=10m; open_file_cache_valid 15m; open_file_cache_min_uses 1; open_file_cache_errors off; }
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

El truco masivo sería usar nginx como proxy a sí mismo con un encabezado de Range que limitaría la solicitud a un rango de bytes.

algo como esto (no probado, por lo que probablemente no funcione, pero la idea debería funcionar):

 { ... snip config ... server { listen 80 default_server; listen [::]:80 default_server; root /html; index index.html; location / { proxy_pass http://localhost/content; add_header Range btyes=0,100000; } location /content { try_files $uri $uri/ =404; } } }
over 4 years ago · Santiago Trujillo Relatório

0

No he probado Slice y X-Accel juntos. Si cada archivo puede tener un límite diferente definido por el backend, puede configurar Slice en la ubicación y enviar el límite con la URL X-Accel-Redirect como se muestra a continuación:

 X-Accel-Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Content-Type: application/octet-stream Content-Length: {file_size} Content-Disposition: attachment; filename="myfile.mp4" Accept-Ranges: bytes X-Accel-Buffering: yes X-Accel-Redirect: /protected/myfile.mp4?s=0&e=$PHP_VAR

Nginx.conf

 location /protected { slice; # enable slicing slice_start_arg s; slice_end_arg e; internal; alias /dir/of/protected/files/; if_modified_since off; output_buffers 2 1m; open_file_cache max=50000 inactive=10m; open_file_cache_valid 15m; open_file_cache_min_uses 1; open_file_cache_errors off; }

Un límite de archivo global

Deberá redirigir la solicitud original, incluidos los parámetros de Slice, para truncar el archivo que se está sirviendo.

Conferencia Nginx:

 location /sample { slice; # enable slicing slice_start_arg s; slice_end_arg e; internal; alias /dir/of/protected/files/; if_modified_since off; output_buffers 2 1m; open_file_cache max=50000 inactive=10m; open_file_cache_valid 15m; open_file_cache_min_uses 1; open_file_cache_errors off; } location /protected { rewrite ^ /sample&s=0&e=1024; # replace for the desired file limit in bytes }

Si la directiva de rewrite anterior no funciona, sugiero la siguiente opción usando proxy_pass .

 location /protected { set $file_limit 1024 # replace for the desired file limit in bytes set $delimiter ""; if ($is_args) { set $delimiter "&"; } set $args $args${delimiter}s=0&e=$file_limit; proxy_pass $scheme://127.0.0.1/sample; }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda