Como posso forçar o armazenamento em cache de um arquivo de vídeo no nginx

2

Eu tenho dois servidores configurados quase exatamente da mesma forma. Um é o meu servidor de produção e o outro é o meu servidor de teste. A configuração nginx em ambas são cópias uma da outra, exceto pelo nome do servidor (e onde mais eu usar o nome do servidor)

Aqui está a configuração do meu servidor de teste.

server {
  listen 80;
  server_name *.johnvarghese.info johnvarghese.info;
  return 301 https://$host$request_uri;
}

server {
  listen 443;
  ssl on;
  ssl_certificate /etc/johnvarghese.info.ssl/star.johnvarghese.info.bundle.crt;
  ssl_certificate_key /etc/johnvarghese.info.ssl/star.johnvarghese.info.key;

  server_name support.johnvarghese.info;
  return 301 "$scheme://johnvarghese.info/support${request_uri}";
}

server {
  listen 443;
  ssl on;
  ssl_certificate /etc/johnvarghese.info.ssl/star.johnvarghese.info.bundle.crt;
  ssl_certificate_key /etc/johnvarghese.info.ssl/star.johnvarghese.info.key;

  server_name *.johnvarghese.info johnvarghese.info;

  passenger_ruby /usr/local/rvm/gems/ruby-2.1.0/wrappers/ruby;
  passenger_enabled on;
  root /var/www/johnvarghese.info/current/public;

  location ~* \.(mp4|ogg|webm)$ {
    expires 10d;
    add_header Cache-Control "max-age=864000";
  }

}

O servidor intermediário é chamado johnvarghese.info. No servidor de produção, substituí todas as instâncias de johnvarghese.info pelo servername.com.

As linhas que eu estou interessado são as últimas três linhas na configuração - eu só quero armazenar em cache o arquivo de vídeo webm (que repito jogando em um loop). Funciona perfeitamente no servidor de teste. Uma vez que o vídeo é baixado, posso desligar a rede sem fio no meu laptop e o vídeo continua em looping para sempre ou o download adicional é necessário. O código de resposta no console é 206 toda vez a partir da segunda vez. O servidor não é mais atingido.

No servidor de produção, o servidor é atingido toda vez que o vídeo é colocado em loop. O código de resposta é 304 (não modificado). Se eu mudar de rede sem fio no meu laptop, quando o vídeo terminar a reprodução atual, ele será interrompido porque não poderá fazer o download novamente para a repetição.

Por que a mesma configuração

  location ~* \.(mp4|ogg|webm)$ {
    expires 10d;
    add_header Cache-Control "max-age=864000";
  }

funciona de maneira diferente nesses servidores configurados de maneira semelhante? Eu quero fazer o servidor de produção funcionar como o servidor de teste. O que devo fazer?

Obrigado

    
por look 22.06.2014 / 12:01

1 resposta

1

Você deve observar os cabeçalhos recebidos pelo navegador do cliente, pois o armazenamento em cache é feito no navegador do cliente e não no servidor. O Nginx pode adicionar seus próprios cabeçalhos, que podem entrar em conflito com o seu, dependendo da configuração do servidor e dos módulos Nginx adicionados.

Para uma análise mais aprofundada, adicione um dump dos cabeçalhos recebidos pelo navegador do cliente em ambos os casos, onde funcionou e onde não funcionou. Essa comparação pode nos dar a resposta para o mistério.

Veja este post para mais ideias sobre a causa: Ninx add_header e controle de cache .
Os módulos more_set_headers e more_clear_headers são sugeridos aqui para substituir ou limpar os cabeçalhos.

    
por 28.06.2014 / 13:06