Eu tive resultados de desempenho muito bons usando o microcaching NGINX .
No entanto, ainda não tenho certeza de como lidar melhor com as respostas do servidor que têm o Set-Cookie
cabeçalho.
- As respostas do servidor de origem com
Set-Cookie
cabeçalho podem ser armazenadas em cache pelo NGINX?
Se a resposta for negativa e Set-Cookie
as respostas devem sempre ignorar a camada de cache, isso terá consequências muito negativas no desempenho.
Por exemplo, quando você visita um site de e-commerce médio rodando WooCommerce, esses cookies seriam configurados na sua primeira visita:
Set-Cookie:PHPSESSID=xxyy
Set-Cookie:wp_woocommerce_session_xx=yy
Se Set-Cookie
as respostas fossem excluídas do cache, isso significaria que o conteúdo em cache nunca seria servido para uma primeira visita em qualquer loja de comércio eletrônico.
Além disso, ao navegar por produtos em uma loja WooCommerce, o plug-in definiria o woocommerce_recently_viewed=xxxx
cookie. woocommerce_recently_viewed
o cookie seria atualizado em cada exibição de produto, de modo que todas as solicitações subsequentes para outros produtos fariam com que o servidor incluísse o Set-Cookie
cabeçalho.
- O cache pode ser ativado em tal cenário?
Algumas configurações de cache padrão que estou usando com meu NGINX incluem isso:
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
set $skip_cache 1;
}
Se eu incluir woocommerce_recently_viewed
o cookie na lista, o cache será ignorado na maioria das vezes.
- Qual é a melhor prática para lidar com cache e cookies em um cenário como este?
Em geral, o cache funciona mal com conteúdo dinâmico, especialmente com conteúdo que contém coisas como "visualizado recentemente" que mudará a cada carregamento de página. Se você realmente deseja usar o cache, a primeira etapa é desabilitar esse plug-in para que haja uma chance teórica de alguém receber a mesma página duas vezes. A segunda etapa é iniciar uma sessão apenas quando alguém fizer algo que exija: faça login, coloque um item no carrinho etc. se o cliente acessar o cache apenas por um tempo, a sessão expirará no cliente e no servidor).
Acho que para conteúdo como esse, o cache é melhor feito no próprio aplicativo. O aplicativo deve entender quais partes da página da Web são dinâmicas e precisam ser regeneradas a cada carregamento de página e pode montar a página da Web a partir de partes novas e usadas para fornecer ao usuário a resposta correta.
DerfK está certo sobre o conteúdo dinâmico no nível da página inteira , você absolutamente não deseja que ocorra vazamento de cookies.
No entanto, você pode fazer mais cache nas camadas upstream - com o WordPress especificamente, ele possui um cache de objeto conectável decente. Isso significa que, embora a própria página não seja armazenada em cache, você pode armazenar grande parte da carga do banco de dados em um armazenamento efêmero, como memcached (batcache) ou redis. Esses armazenamentos KV são muito mais rápidos que o MySQL e, como funcionam no nível de objeto e aplicativo, não são afetados diretamente pelos cookies enviados pelo WooCommerce.