Nginx не кэширует, когда заголовки Vary не игнорируются

Во-первых: у меня нет большого опыта работы с Nginx.

Я просто перейду непосредственно к проблеме:

Конфигурация Nginx:

    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    events {
        worker_connections 2048;
        multi_accept on;
     }
  http {
     proxy_cache_path /var/nginx_cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=10g;

upstream server {
    server -removed-;
 }

 server {
    listen 80;
    server_name -removed-;
    location / {
            gzip on;
            gzip_disable "MSIE [1-6]\.(?!.*SV1)";
            gzip_http_version 1.1;
            gzip_min_length 500;
            gzip_vary on;
            gzip_proxied any;
            gzip_types
                            application/atom+xml
                            application/javascript
                            application/json
                            application/ld+json
                            application/manifest+json
                            application/rss+xml
                            application/vnd.geo+json
                            application/vnd.ms-fontobject
                            application/x-font-ttf
                            application/x-web-app-manifest+json
                            application/xhtml+xml
                            application/xml
                            font/opentype
                            image/bmp
                            image/svg+xml
                            image/x-icon
                            text/cache-manifest
                            text/css
                            text/plain
                            text/vcard
                            text/vnd.rim.location.xloc
                            text/vtt
                            text/x-component
                            text/x-cross-domain-policy
                            text/js
                            text/xml
                            text/javascript;


                             add_header X-Cache-Status $upstream_cache_status;
                             proxy_cache STATIC;
                             proxy_set_header Host $host;

           ---->                  proxy_ignore_headers Vary;    <-----

                             proxy_cache_key $host$uri$is_args$args;
                             proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
                             proxy_pass -removed-;

    }



}

}

Когда строка 'proxy_ignore_headers Vary;' установлен, все будет кешировано, включая HTML-страницы. Когда я удаляю эту строку, все кэшируется, ЗА ИСКЛЮЧЕНИЕМ HTML-страниц. Почему это?

Я бы хотел, чтобы Nginx кэшировал HTML-страницы, даже когда исходный сервер отправляет Vary-заголовки.

Надеюсь, кто-нибудь может мне помочь :).

Заголовки ответа:

Варьируются: Хост, Content-Language, Content-Type, Content-Encoding

0
задан 10 November 2016 в 10:50
1 ответ

Исправлено:

В исходном коде В Nginx установлено не более 42 символов, используемых в заголовках Vary.В моем случае 51 символ, поэтому мои заголовки Vary обрабатываются как Vary: * (no-cache). Установка максимального значения 84 устранила это для меня.

Эта статья объясняет это более подробно.

https://thedotproduct.org/nginx-vary-header-handling/

Благодарность парню, разместившему эту короткую статью.

0
ответ дан 24 November 2019 в 05:27

Теги

Похожие вопросы