Para armazenar as coisas em cache, primeiro você precisa criar um caminho do cache do proxy dentro do http
contexto, como este:
proxy_cache_path /var/cache/nginx/site1 levels=1:2 keys_zone=site1:10m max_size=1G;
Em seguida, você também pode definir opcionalmente a chave do cache do proxy . Qualquer solicitação que tenha a mesma chave de cache que uma entrada armazenada em cache receberá a resposta armazenada em cache, se houver uma. Mas o padrão já pode ser bom o suficiente, então, isso é totalmente opcional.
Em seguida, para ativar o cache em um determinado contexto, basta mencionar qual cache deve ser usado, assim:
proxy_cache site1;
De acordo com a descrição da diretiva cache de proxy válido , o nginx já respeita X-Accel-Expires
e age sobre isso, então, você está basicamente pronto neste momento. Como você não deseja armazenar em cache nada que não inclua X-Accel-Expires
, provavelmente desejará adicionar um valor 0 como o tempo válido padrão (a configuração X-Accel-Expires
em seu conteúdo deve substituir esse valor padrão).
proxy_cache_valid 0m;
Eu presumo que, além da falta de qualquer cache, seu arquivo de configuração é válido e seu próprio proxy já funciona.
Então, basicamente, tudo que você precisa fazer para corrigir sua configuração é adicionar o seguinte ao seu contexto http
, server
ou location
:
proxy_cache cache;
proxy_cache_valid 0m;
(Além disso, você pode querer garantir que o caminho do cache exista e tenha permissões corretas, é claro).
Com relação ao artigo / exemplo mencionado habrahabr , não acho que esteja correto incluir $http_if_modified_since
no chave de cache, porque você pode potencialmente acabar com muitas entradas em cache, efetivamente desperdiçando seu cache.
Observe também que o nginx provavelmente não usa o cabeçalho X-Accel-Expires
do proxy - ele só o usa internamente e o IIRC não pode exibir esse cabeçalho adiante. Para alterar esse comportamento, você deve pedir explicitamente que ele também esteja em proxy (no caso de você querer depurar seu conteúdo por meio do nginx e ver como seu aplicativo define o cabeçalho, etc.):
proxy_pass_header "X-Accel-Expires";