Eu tenho o nginx e seu cache funcionando como esperado, além de um problema menor. Quando uma solicitação é feita pela primeira vez, ela atinge o servidor de origem, retorna um 200 e nginx armazena essa resposta. Se eu fizer outra solicitação, posso ver no cabeçalho X-Cache-Status
que o cache foi atingido. Quando eu esperar um tempo sabendo que o cache terá expirado, posso ver que o nginx atingiu meu servidor de origem fazendo um GET condicional porque eu tenho proxy_cache_revalidate on;
definido.
Quando eu verifico se o recurso foi alterado no meu aplicativo no servidor de origem, não vejo e retorno um 304 com um novo cabeçalho Expires
. Alguns podem argumentar por que você está retornando um novo Expires
cabeçalho se o servidor de origem diz que nada mudou e você está retornando 304. A resposta é, o HTTP RFC diz que isso pode ser feito link
Uma coisa que eu notei, não importa quais cabeçalhos eu adicione ou modifique, quando o servidor de origem retornar 304, o nginx dará uma resposta com o primeiro conjunto de cabeçalhos de resposta que ele viu para esse recurso.
Além disso, se eu alterar o valor do cabeçalho Cache-Control:max-age
da primeira solicitação quando eu retornar a resposta 304, parece que nginx obedece ao novo valor, pois meu recurso é armazenado em cachê para essa hora, mas o valor do cabeçalho de resposta é o que foi dado em a primeira solicitação não é o valor que modifiquei na resposta 304.
Estou executando nginx version: nginx/1.10.1