2011-07-09 10 views

Odpowiedz

39

To jest z nginx documentation.

gzip_vary 
syntax: gzip_vary on|off 
default: gzip_vary off 
context: http, server, location 

Włącza nagłówek reakcji "Vary: Accept-Encoding". Zauważ, że ten nagłówek powoduje, że IE 4-6 nie buforuje zawartości z powodu błędu (patrz 2).

Tam, jeśli po prostu dodasz gzip_vary on;, powinien to zrobić.

Upewnij się również, że masz jedną z dyrektyw: gzip, gzip_static lub gunzip są aktywne.

+2

Myślę, że to NIE jest poprawna odpowiedź - przynajmniej nie sam, a może nie dla wszystkich wersji nginx (to nie mogę powiedzieć). Tylko gzip_vary Wezwala gzip, jeśli jest wyłączony, ale zachowa domyślne gzip_types i nie włączy Vary dla zasobów innych niż domyślny mimet/text/html. http://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip (testowany na nginx 1.4.6) –

+0

@AlanFranzoni to pytanie nie ma nic wspólnego z włączeniem gzip lub zakodowaniem innych typów zawartości, chodzi tylko o dodawanie nagłówka vary. – jbg

+0

@jbg Myślę, że źle zrozumiałeś cel Vary, który jest często używany z kompresją (sprawdź https://www.fastly.com/blog/best-practices-for-using-the-vary-header). Jeśli gzip i vary nie mają ze sobą nic wspólnego, dlaczego opcja nginx ma nazywać się gzip_vary? –

24

Wewnątrz server { domeny/subdomeny, że chcesz go ustawić, dodać

gzip on; 
    gzip_min_length 1100; 
    gzip_buffers 4 32k; 
    gzip_types text/plain application/x-javascript text/xml text/css; 
    gzip_vary on; 

Zapisz plik i uruchom ponownie nginx.

+4

o ile mogę powiedzieć, jest to jedyna poprawna odpowiedź. gzip_types jest tutaj kluczem, ponieważ domyślnie jest to tylko tekst/html, a więc zmienne nie będą włączone dla różnych typów zawartości. –

+1

Pracowałem świetnie w moim pliku vhost na moim serwerze nginx. Dzięki! – jamescampbell

1

Prosty. W Nginx conf:

vim /etc/nginx/nginx.conf 

Dodaj następujący blisko dna pod odcinku:

## 
    # Gzip Settings 
    ## 

    gzip on; 
    gzip_disable "msie6"; 

    # gzip_vary on; 
    # gzip_proxied any; 
    # gzip_comp_level 6; 
    # gzip_buffers 16 8k; 
    # gzip_http_version 1.1; 
    # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 

Wystarczy odkomentować parametr gzip_vary on; i ponownie lub przeładować nginx usługę:

service nginx restart 

To powinno rozwiązać problem. Jeśli używasz starej wersji nginx, być może musisz włączyć gzip on;, ponieważ jest to wymagane, aby nagłówek differ działał.

Mam nadzieję, że to pomoże. FYI, dotyczy to wszystkich plików conf serwera/witryny, chyba że zostaną nadpisane w ich własnych blokach serwera. server {}

informacji źródło nginx, Apache i IIS: https://www.maxcdn.com/blog/accept-encoding-its-vary-important/

+0

Wyłącz gzip_types przyniesie więcej problemów. –

0

Jeśli po wypróbowaniu innych odpowiedzi i wciąż widząc zablokować (np jeśli testujesz szybkość strony przy użyciu GTMetrix) dodaje sił help:

Upewnij się, że wszystkie twoje gzip_types są również ustawione w sekcji /etc/nginx/nginx.conf http.

Blok serwera w/etc/nginx/sites-available/* to jedno miejsce, w którym można ustawić różne nagłówki i gzip_types, ale w zależności od konfiguracji witryny możesz przetwarzać i zwracać pliki przed dotrzeć do tego fragmentu konfiguracji.

W /etc/nginx/nginx.conf znajdziesz sekcję "http" - tutaj jest także gzip_types i gzip_vary.

Dla mnie - CSS i JS są plikami statycznymi i były podawane przed naciśnięciem pliku (wordpress) nginx-sites (mam przed sobą lakier).

Dodanie pełnej listy gzip_types do sekcji http w pliku nginx.conf poprawiło mój problem.