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
Odpowiedzi:
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_headers
imore_clear_headers
są tutaj sugerowane w celu zastąpienia lub wyczyszczenia nagłówków.źródło