Set Vary: Accept-Encoding Header (nginx)

2020-05-24 20:25发布

问题:

I have an nginx server and can't seem to find any information on how to send Vary: Accept-Encoding headers for CSS and JS files. Does anyone have info about this?

Thanks!

回答1:

This is from the nginx documentation.

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

Enables response header of "Vary: Accept-Encoding". Note that this header causes IE 4-6 not to cache the content due to a bug (see 2 ).

There if you just add gzip_vary on; it should do it's job.

Also make sure you have any one of the directives gzip, gzip_static, or gunzip are active.



回答2:

Inside the server { of the domain/subdomain that you want to set it, add

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

Save the file and restart nginx.



回答3:

Simple. In Nginx conf:

vim /etc/nginx/nginx.conf

Add the following near the bottom under the section:

    ##
    # 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;

Just uncomment the gzip_vary on; parameter and restart or reload nginx service:

service nginx restart

This should fix the issue. If you are running an old version of nginx, you may need to enable gzip on;, as this is required for the vary header to work.

I hope this helps. FYI, this applies to all server/site conf files unless overwritten in their own respective server blocks. server {}

Source info for nginx, apache and IIS: https://www.maxcdn.com/blog/accept-encoding-its-vary-important/



回答4:

If you've tried the other answers and are still seeing vary off (e.g. if you are testing speed of your page using GTMetrix), the following might help:

Make sure all your gzip_types are also set in /etc/nginx/nginx.conf http section.

The server block in /etc/nginx/sites-available/* is one place where you can set the vary header and gzip_types, but depending on how you have your site setup you may be processing and returning files before they reach that bit of config.

In /etc/nginx/nginx.conf you will find an 'http' section - in here, there is also a gzip_types and gzip_vary.

For me - CSS and JS are static files and were being served up before hitting the (wordpress) nginx sites-available file (I have varnish in front of it).

So adding the full list of gzip_types to the http section in nginx.conf fixed my issue.



标签: nginx