Jak mogę wymusić buforowanie pliku wideo w Nginx


2

Mam dwa serwery skonfigurowane prawie dokładnie tak samo. Jeden to mój serwer produkcyjny, a drugi to mój serwer pomostowy. Konfiguracja nginx na obu są kopiami siebie, z wyjątkiem nazwy serwera (i gdziekolwiek indziej używam nazwy serwera)

Oto konfiguracja z mojego serwera pomostowego.

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";
  }

}

Serwer pomostowy nazywa się johnvarghese.info. Na serwerze produkcyjnym zamieniłem wszystkie wystąpienia johnvarghese.info na servername.com.

Linie, które mnie interesują, to ostatnie trzy linie w konfiguracji - chcę tylko buforować plik wideo webm (który powtarzam odtwarzając w pętli). Działa idealnie na serwerze pomostowym. Po pobraniu wideo mogę wyłączyć sieć bezprzewodową na moim laptopie, a wideo ciągle się zapętla i nie jest wymagane dalsze pobieranie. Kod odpowiedzi w konsoli to 206 za każdym razem, zaczynając od drugiego razu. Serwer nie jest już trafiany.

Na serwerze produkcyjnym serwer jest trafiany za każdym razem, gdy wideo jest zapętlone. Kod odpowiedzi to 304 (niezmodyfikowany). Jeśli włączę sieć bezprzewodową na swoim laptopie, po zakończeniu odtwarzania wideo zostanie zatrzymane, ponieważ nie będzie można pobrać go ponownie w celu powtórzenia.

Dlaczego ta sama konfiguracja

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

pracować inaczej na tych podobnie skonfigurowanych serwerach? Chcę, aby serwer produkcyjny działał tak samo jak serwer pomostowy. Co powinienem zrobić?

Dzięki


1
Konfigurujesz buforowanie po stronie klienta. Pamiętaj, że jeśli twoje pliki są zbyt duże, większość przeglądarek prawdopodobnie ich nie buforuje. / edit: I zrób to, o co prosił harrymc: w swoim pytaniu uwzględnij nagłówki z serwera i klienta dla żądań w obu środowiskach.
Daniel B

Odpowiedzi:


1

Powinieneś raczej spojrzeć na nagłówki otrzymane przez przeglądarkę klienta, ponieważ buforowanie odbywa się w przeglądarce klienta, a nie na serwerze. Nginx może dodawać własne nagłówki, które mogą powodować konflikty z twoimi, w zależności od konfiguracji serwera i dodanych modułów Nginx.

W celu dalszej analizy dodaj zrzut nagłówków otrzymanych przez przeglądarkę klienta w obu przypadkach, w których działał, a gdzie nie. To porównanie może dać nam odpowiedź na tajemnicę.

Zobacz ten post, aby uzyskać więcej pomysłów na przyczynę: Nginx add_header i kontrola pamięci podręcznej .
Moduły more_set_headersi more_clear_headerssą tutaj sugerowane w celu zastąpienia lub wyczyszczenia nagłówków.


Dzięki harrymc i Danielowi B. Chętnie przyznam ci punkty nagrody, nie dlatego, że twoje rozwiązanie pomogło mi to naprawić, ale dlatego, że przynajmniej odpowiedziałeś. To dobra wiadomość. Lepszą wiadomością jest to, że mój problem właśnie zniknął. Myślę, że może dlatego, że minęło dziesięć dni od pierwszego pobrania filmu. Nie mogłem zrzucić tutaj nagłówków, ponieważ 1. Nie wiem jak. oraz 2. Nazwa domeny, którą miałem dla serwera pomostowego, wygasła i nie mogę tego idealnie odtworzyć. W każdym razie wszystko dobrze się kończy. Jestem w stanie uruchomić wideo i rozłączyć się. Ładnie zapętla się wideo.
patrz

Jeśli to się powtórzy, możesz zrzucić nagłówki w przeglądarce Firefox za pomocą dodatku Firebug . W przypadku rozwiązania zewnętrznego w stosunku do przeglądarki możesz użyć pakietu Wireshark (Firebug jest łatwiejszy).
harrymc

Lub jeszcze lepiej: użyj specjalistycznego serwera proxy, takiego jak Fiddler . Bardzo przydatne jest sprawdzenie, co się właściwie dzieje.
Daniel B

@DanielB: Fiddler jest cudowny, ale niestety jest to produkt Microsoft tylko dla systemu Windows.
harrymc
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.