Eu mesmo criei uma solução, baseada na resposta @Richard Smith, desde que não fizesse exatamente o que eu precisava. Eu usei o cabeçalho de controle de cache mais e descartei a diretiva de expiração desnecessária.
Isso fica dentro do bloco do servidor
if ($skip_cache = 1) {
set $cacheControl "private, max-age=0, s-maxage=0, no-cache, no-store";
}
if ($skip_cache = 0) {
set $cacheControl "public, max-age=86400, s-maxage=86400";
}
Então isso vai dentro de cada bloco de localização aplicável
add_header Cache-Control $cacheControl;
Isso significa que não é necessário "se" dentro do bloco de localização. Acho que isso resolve o problema, mas ainda estou interessado se alguém tiver idéias alternativas.