AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 770302
Accepted
jarvis
jarvis
Asked: 2016-04-15 04:32:26 +0800 CST2016-04-15 04:32:26 +0800 CST 2016-04-15 04:32:26 +0800 CST

Nenhum cabeçalho de controle de cache para arquivos do AWS CloudFront com origem S3

  • 772

Acabamos de migrar para Amazon AWS. Atualmente, temos uma instância do EC2 que está funcionando bem. Ele está executando o Nginx na frente e o Apache no back-end. Isso está funcionando bem também. Todos os sites são iniciados corretamente e incluem o cabeçalho Cache-Control para arquivos que são servidos do EC2.

O problema está em TODOS os arquivos estáticos que colocamos no Amazon S3 que estão sendo acessados ​​por meio do CloudFront CDN . Podemos acessar os arquivos sem problemas (e sem problemas com o CORS), mas aparentemente o CloudFront não atende arquivos com o cabeçalho Cache-Control. Queremos aproveitar o cache do navegador.

A meu ver, a instância do EC2 não desempenha um papel aqui, pois os arquivos estáticos estão sendo atendidos diretamente pelo S3+CloudFront, a solicitação não vai para o servidor Web no EC2.

Estou completamente perdido.

Pergunta: 1) Como faço para configurar o Cache-Control neste caso? 2) É possível definir o Cache-Control? Do S3 ou do CloudFront?

Observação: encontrei algumas páginas no Google onde você pode definir o cabeçalho no S3 para objetos individuais. Essa não é realmente uma maneira produtiva de fazer isso, especialmente porque no meu caso estamos falando de vários objetos.

Obrigado!

cache amazon-s3 amazon-web-services amazon-cloudfront cdn
  • 2 2 respostas
  • 38040 Views

2 respostas

  • Voted
  1. Best Answer
    Michael - sqlbot
    2016-04-15T16:49:39+08:002016-04-15T16:49:39+08:00

    Encontrei algumas páginas no Google onde você pode definir o cabeçalho no S3 para objetos individuais. Essa não é realmente uma maneira produtiva de fazer isso, especialmente porque no meu caso estamos falando de vários objetos.

    Bem, "produtivo" ou não, é assim que ele foi projetado para funcionar.

    O CloudFront não adiciona Cache-Control: cabeçalhos.

    O CloudFront passa (e também respeita, a menos que configurado de outra forma) os Cache-Control:cabeçalhos fornecidos pelo servidor de origem, que neste caso é o S3.

    Para obter Cache-Control:cabeçalhos fornecidos pelo S3 quando um objeto é buscado, eles devem ser fornecidos quando o objeto é carregado no S3 ou adicionados aos metadados do objeto por uma operação put+copy subsequente, que pode ser usada para copiar internamente um objeto em si mesmo em S3, modificando os metadados no processo. Isso é o que o console faz, nos bastidores, se você editar os metadados do objeto.

    Também não há (caso você esteja se perguntando) nenhuma configuração global no S3 para forçar todos os objetos em um balde a retornar esses cabeçalhos - é um atributo por objeto.


    Atualização: Lambda@Edge é um novo recurso do CloudFront que permite disparar gatilhos contra solicitações e/ou respostas, entre visualizador e cache e/ou cache e origem, executando código escrito em Node.js em uma estrutura simples de objeto de solicitação/resposta expostos pelo CloudFront.

    Um dos principais aplicativos para esse recurso é a manipulação de cabeçalhos... portanto, embora o acima ainda seja preciso -- o próprio CloudFront não adiciona Cache-Control-- agora é possível para uma função do Lambda adicioná-los à resposta que é retornada do CloudFront.

    Este exemplo adiciona Cache-Control: public, max-age=86400apenas se não houver um Cache-Controlcabeçalho já presente na resposta.

    O uso desse código em um gatilho de resposta de origem faria com que ele disparasse sempre que o CloudFront buscasse um objeto da origem e modificasse a resposta antes que o CloudFront o armazenasse em cache.

    'use strict';
    
    exports.handler = (event, context, callback) => {
        const response = event.Records[0].cf.response;
    
        if(!response.headers['cache-control'])
        {
            response.headers['cache-control'] = [{ 
                key:   'Cache-Control', 
                value: 'public, max-age=86400' 
            }];
        }
    
        callback(null, response);
    };
    

    Atualização (20/06/2018): Recentemente, enviei uma solicitação de recurso à equipe do CloudFront para permitir a configuração de cabeçalhos de resposta de origem estática como atributos de origem, semelhante à maneira como os cabeçalhos de solicitação estática podem ser adicionados, agora... twist, permitindo que cada cabeçalho seja configurado para ser adicionado condicionalmente (somente se a origem não forneceu esse cabeçalho na resposta) ou incondicionalmente (adicionando o cabeçalho e substituindo o cabeçalho da origem, se presente).

    Com solicitações de recursos, você normalmente não recebe nenhuma confirmação se eles estão realmente pensando em implementar o novo recurso... ou mesmo se já podem estar trabalhando nele... é apenas anunciado quando eles terminam. Portanto, não tenho ideia se isso será implementado. Há um argumento a ser feito de que, como esse recurso já está disponível via Lambda@Edge, não há necessidade dele na funcionalidade básica... fazer uma manipulação simples e estática do cabeçalho de resposta e que, se esse for o único motivo pelo qual um gatilho é necessário, exigir gatilhos do Lambda é um custo desnecessário, financeiramente e em latência adicional (mesmo que nenhum dos dois seja necessariamente um custo exorbitante).

    • 42
  2. Andy
    2022-04-09T03:03:22+08:002022-04-09T03:03:22+08:00

    Desde novembro de 2021 , isso agora pode ser feito nativamente no Cloudfront sem usar uma função Lambda@Edge.

    1. Vá para Cloudfront > Políticas > Cabeçalhos de resposta e clique em "Criar política de cabeçalhos de resposta"
    2. Digite um nome, por exemplo, "CacheHeaders" e adicione um cabeçalho personalizado como: insira a descrição da imagem aqui
    3. Depois que a política for criada, edite o comportamento da sua distribuição e selecione a política na seção Política de cabeçalhos Resposne: insira a descrição da imagem aqui
    • 1

relate perguntas

  • Como desabilitar o cache do tomcat? Estou tendo problemas estranhos com arquivos estáticos

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve