A maneira sugerida pelo @MichaelHampton é melhor para IMHO (mais fácil, mais eficiente), mas aqui está uma abordagem alternativa / adicional que pode ser útil em algumas situações. Vem do meu tutorial sobre o Wordpress / Nginx. Alguns temas mexem com cabeçalhos de cache de uma forma muito ruim, então eu basicamente quero reescrever todos os cabeçalhos de maneira diferente para diferentes áreas do site. Eu também removi o cabeçalho Pragma antigo.
Eu defino blocos para URLs ou subdiretórios específicos para que eu possa classificar os limites ou os cabeçalhos de controle com mais precisão.
Tenha em atenção que "more_clear_headers" e "add_header" fazem parte da extensão Headers More Nginx . Se você olhar para o tutorial que eu fiz o link acima, parte dois, ele dá instruções passo a passo de como construir o Nginx com esse módulo - é bem fácil.
# Rate limiting for login pages
limit_req_zone $binary_remote_addr zone=login:1m rate=5r/m;
# Rate limit wp-login.php to help prevent brute force attacks
location = /blog/wp-login.php {
# Next line applies the rate limit defined above
limit_req zone=login burst=3;
fastcgi_keep_conn on;
fastcgi_intercept_errors on;
fastcgi_pass php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
more_clear_headers "Cache-Control";
more_clear_headers Server; more_clear_headers "Pragma"; more_clear_headers "Expires";
# No caching
more_clear_headers "Cache-Control";
add_header Cache-Control "private, max-age=0, no-cache, no-store";
more_clear_headers "Expires";
# Debugging aid - remove
# add_header Z_LOCATION "WP-LOGIN"; add_header URI $uri;
}
# Wordpress admin caching headers are generally set correctly, for pages and resources. The only reason we define
# this block separately is to avoid messing with the headers in the main php block.
# This is probably unnecessary because of the skip_cache variable and may be removed
location ~* wp-admin {
fastcgi_keep_conn on;
fastcgi_intercept_errors on;
fastcgi_pass php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# Debugging aid - remove
# add_header Z_LOCATION "WP_ADMIN"; add_header URI $uri; add_header "Z_SKIP_CACHE" $skip_cache;
}
Para adicionar mais alguma coisa para adicionar à resposta de Michael, também uso esse bloco. Ele desativa o cache do Wordpress Admin de uma segunda maneira e também desabilita o armazenamento em cache de feeds, sitemap, xmlrpc e alguns outros. Parte disso é para o Wordpress, eu suspeito que parte dele é para um site PHP escrito que eu corro.
if ($request_uri ~* "/wp-admin/|/admin-*|/purge*|/xmlrpc.php|wp-.*.php|/feed/|sitemap(_index)?.xml|wp-cron") {
set $fastcgi_nocache "true";
}