nginx 1.8.1 não está em cache com o cabeçalho Vary Accept

2

Eu tenho um estranho comportamento de cache nginx. Existem 2 respostas. O primeiro tinha parado o cache quando atualizei o servidor de 1.6 para 1.8.1, outro é o cache como antes. O primeiro (quebrado) tem os seguintes cabeçalhos de resposta:

Allow →GET, HEAD, OPTIONS

Connection →keep-alive

Content-Encoding →gzip

Content-Language →ru

Content-Type →application/json

Date →Tue, 15 Mar 2016 07:31:53 GMT

Server →nginx/1.8.1

Transfer-Encoding →chunked

Vary →Accept,Accept-Language,Cookie,Accept-Encoding

X-Frame-Options →SAMEORIGIN

Outra resposta (que funciona como esperado) tem os seguintes cabeçalhos:

Connection →keep-alive

Content-Encoding →gzip

Content-Language →ru

Content-Type →application/json

Date →Tue, 15 Mar 2016 07:32:40 GMT

Server →nginx/1.8.1

Transfer-Encoding →chunked

Vary →Accept-Language,Cookie,Accept-Encoding

X-Frame-Options →SAMEORIGIN

Não há cookies ou Aceitar cabeçalho no primeiro caso, mas apenas

proxy_ignore_headers Vary

salvou a situação. Funciona bem com isso. Parece mágica. Mas o que estava errado, o que estou perdendo? Abaixo estão as configurações atuais:

proxy_pass    http://localhost:7050;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
limit_req zone=banka burst=5 nodelay;
proxy_cache   cache;
proxy_cache_valid 5m;
proxy_ignore_headers Vary;
    
por dmitry 15.03.2016 / 10:14

1 resposta

2

Não sei se você consertou, vai deixar isso aqui caso alguém precise.

No código-fonte do Nginx, é definido um máximo de 42 caracteres sendo usados pelos cabeçalhos Vary. No meu caso, existem 51 caracteres, assim meus cabeçalhos Vary estão sendo tratados como Vary: * (no-cache). Definir o máximo para 84 corrigiu para mim.

Este artigo explica isso com mais profundidade.

link

Créditos para o cara postando aquele artigo curto.

    
por 21.11.2016 / 11:04

Tags