PHP-FPM e try_rewrite
Freqüentemente, com aplicativos baseados em PHP, você reescreve URLs inexistentes (no sistema de arquivos, pelo menos) em um script que executa o roteamento index.php
.
Ao usar PHP-FPM, isso geralmente se parece com (exemplo incompleto):
location / {
try_files $uri $uri/ /index.php;
}
location ~ [^/].php(/|$) {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
...
}
Cache de resposta
fastcgi_cache
é uma ótima maneira de acelerar as páginas armazenáveis em cache, especialmente se você usar um pequeno tmpfs
volume para armazenamento.
A maioria das referências online mostram aproximadamente como configurar o cache:
# In an http{} block
# Cache HTTP 200s from PHP-FPM for 1 hour, 60mb cache in /var/cache/nginx/fastcgi_cache.
fastcgi_cache_valid 200 1h;
fastcgi_cache_path /var/cache/nginx/fastcgi_cache levels=1:2 keys_zone=DEFAULT:10m max_size=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache DEFAULT;
mas não como incluir / excluir do armazenamento em cache dependendo do URI.
Então …
Inclusão e exclusão de cache
Se quiséssemos armazenar em cache /routeX
(que seria servido por index.php
meio de nossa try_files
diretiva), passaríamos um mapa para fastcgi_cache_bypass
:
# Still in the http{} block
# 0 is cacheable, otherwise bypass fastcgi_cache entirely
map $request_uri $no_cache {
default 1;
~/routeX 0;
}
fastcgi_cache_bypass $no_cache;
A chave aqui é usar $ request_uri como a variável mapeada ao invés de $ uri . O último foi alterado para index.php
por try_files
, o que significaria que o cache sempre seria ignorado!
Para uma depuração mais fácil, experimente add_header X-Cache $upstream_cache_status
no seu FastCGI location
.