Eu tenho uma configuração de proxy muito simples:
http {
proxy_cache_path /var/www/cache levels=1:2 keys_zone=s3-images-cache:50m inactive=1M max_size=1000m;
proxy_temp_path /var/www/cache/tmp;
server {
listen 80;
server_name images.example.com;
location / {
proxy_cache s3-images-cache;
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
proxy_cache_bypass $http_purge_cache;
proxy_cache_valid any 1y;
proxy_pass http://images-example.s3.amazonaws.com;
add_header X-Cache $upstream_cache_status;
proxy_intercept_errors on;
error_page 404 = @no_image;
}
location @no_image {
return 403;
}
}
}
Agora me siga aqui:
Mas, se verificarmos / var / www / cache / folder neste momento, veremos que não há nenhum item de cache criado para este pedido. Então isso significa que o Nginx mantém o cache para ele na memória e esqueceu de gravar no arquivo?
Se verificarmos / var / www / cache /, veremos que o arquivo de cache agora está finalmente criado para este pedido. Olhando dentro do arquivo em cache, vemos que é a nossa imagem.
Minha única explicação para isso é que parece que o Nginx está armazenando em cache a resposta na memória e não escreve no arquivo quando estamos atingindo o erro com a nossa página de erro customizada nas respostas do proxy. Além disso, ao usar proxy_cache_bypass, ele não sobrescreve o cache na memória, de modo que as solicitações subseqüentes ao mesmo item usem o cache antigo que está armazenado na memória e não o novo criado na pasta cache.
Alguém poderia, por favor, me avisar se eu estou fazendo algo errado ou isso realmente é um bug. Passou 3 dias lutando contra isso.
UPDATE: Backend retorna um conjunto normal de cabeçalhos que você esperaria do S3 nas respostas 200 e 404:
404
Connection:close
Content-Type:application/xml
Date:Fri, 20 Nov 2015 07:41:39 GMT
Server:AmazonS3
Transfer-Encoding:chunked
x-amz-id-2:bH8L/1dOVGShsGJdZZ/zS/X6UkHS+KMAxDxnPvOkIalpPphFJXr9zZ1RiV6L2a13NXoZ3QdCOeE=
x-amz-request-id:D66FDBFAA9643252
200
Accept-Ranges:bytes
Connection:keep-alive
Content-Length:10533
Content-Type:image/jpeg
Date:Fri, 20 Nov 2015 07:47:12 GMT
ETag:"061b4dae0b2bbdf4a4fa212951f4ba79"
Last-Modified:Wed, 11 Nov 2015 14:29:09 GMT
Server:AmazonS3
x-amz-id-2:qsSmH/gkvql2jnj67p0vguZBXQJHfS+Yk70llBaDvbgH0xSCbvj9G9JlKn5WhWTdty0+JzApN7k=
x-amz-request-id:8CF04EA869190E63
Tags cache nginx reverse-proxy