Saiba mais sobre os passos de resolução de problemas que podem ser úteis se tiver os seguintes problemas ao usar o Cloud CDN.
Se o problema que está a ver estiver relacionado com backends externos, consulte também o artigo Resolução de problemas de backends externos e NEG da Internet.
Problemas e soluções gerais
Esta secção descreve alguns problemas comuns e as respetivas soluções.
As respostas não estão a ser colocadas em cache
Se as respostas não estiverem a ser colocadas em cache, primeiro, verifique se o Cloud CDN está ativado para o seu serviço de back-end ou contentor de back-end. Quando ativa a CDN na nuvem, podem demorar alguns minutos até que as respostas comecem a ser colocadas em cache.
O Cloud CDN coloca em cache apenas respostas com conteúdo colocável em cache.
Estas informações são transmitidas nos cabeçalhos de resposta HTTP, em combinação com a configuração de back-end. Quando configura um cabeçalho de resposta personalizado
com cdn_cache_status
, pode observar o estado da cache nos
registos do Cloud CDN e determinar
se uma resposta foi publicada como resultado de uma falha de cache.
Se as respostas para um URL não estiverem a ser colocadas em cache, verifique que cabeçalhos estão a ser devolvidos para esse URL e como a capacidade de colocação em cache está configurada para o seu back-end.
Existem várias formas de verificar os cabeçalhos de resposta:
- No Google Chrome, o painel de rede das DevTools
- No Mozilla Firefox, o Monitor de rede das ferramentas para programadores
- Uma ferramenta de linha de comandos, como o curl ou o GNU Wget
O exemplo seguinte demonstra a utilização de curl
para verificar os cabeçalhos de resposta HTTP de http://example.com/style.css
:
curl -s -D - -o /dev/null http://example.com/style.css
Saída:
HTTP/1.1 200 OK
Date: Tue, 16 Feb 2016 12:00:00 GMT
Content-Type: text/css
Content-Length: 1977
Via: 1.1 google
A comparação destes cabeçalhos com os requisitos de conteúdo
em cache revela que a resposta não tem o cabeçalho Cache-Control
necessário (partindo do princípio de que o modo
de cache está definido como USE_ORIGIN_HEADERS
).
O método de definição dos cabeçalhos depende do tipo de servidor de origem. Se estiver a executar um servidor Web no Compute Engine, consulte a documentação do software do servidor Web para obter detalhes sobre a configuração dos cabeçalhos de resposta. Para o Cloud Storage, marcar o objeto como partilhado publicamente faz com que os cabeçalhos adequados sejam enviados.
Depois de reconfigurar o servidor de origem para adicionar o cabeçalho necessário, pode usar curl
novamente para verificar o resultado:
curl -s -D - -o /dev/null http://example.com/style.css
Saída:
HTTP/1.1 200 OK
Date: Tue, 16 Feb 2016 12:00:30 GMT
Content-Type: text/css
Content-Length: 1977
Cache-Control: max-age=86400,public
Via: 1.1 google
curl -s -D - -o /dev/null http://example.com/style.css
Saída:
HTTP/1.1 200 OK
Date: Tue, 16 Feb 2016 12:00:31 GMT
Content-Type: text/css
Content-Length: 1977
Cache-Control: max-age=86400,public
Via: 1.1 google
curl -s -D - -o /dev/null http://example.com/style.css
Saída:
HTTP/1.1 200 OK
Date: Tue, 16 Feb 2016 12:00:30 GMT
Content-Type: text/css
Content-Length: 1977
Cache-Control: max-age=86400,public
Via: 1.1 google
Age: 2
A última resposta neste exemplo inclui um cabeçalho Age
.
A RFC adiciona um cabeçalho Age
às respostas que serve a partir da
cache. Aqui, o cabeçalho indica que a resposta foi publicada com êxito a partir da cache através de uma entrada de cache criada há dois segundos.
Além disso, se os ETags estiverem ativados nas instâncias de back-end, o Cloud CDN baseia-se nos ETags para confirmar a atualidade do objeto. Se as instâncias de back-end disponibilizarem diferentes ETags no mesmo objeto, o Cloud CDN contabiliza as incompatibilidades como um erro de cache e atualiza o objeto. Para evitar esta situação, as instâncias de back-end têm de publicar o mesmo ETag ou os ETags têm de ser desativados.
Para verificar isto, execute curl
repetidamente e procure alterações no valor de ETag
:
curl -s -D - -o /dev/null http://example.com/image.png
Saída:
HTTP/2 200 date: Fri, 20 Mar 2020 15:02:30 GMT server: Apache strict-transport-security: max-age=31536000; includeSubDomains last-modified: Mon, 16 Mar 2020 04:20:59 GMT etag: "10f-5a0f1256f1402" accept-ranges: bytes content-length: 271 cache-control: public, max-age=864000 expires: Mon, 30 Mar 2020 15:02:30 GMT vary: Accept-Encoding x-xss-protection: 1; mode=block x-content-type-options: nosniff content-type: image/png via: 1.1 google alt-svc: clear
curl -s -D - -o /dev/null http://example.com/image.png
Saída:
HTTP/2 200 date: Fri, 20 Mar 2020 15:03:11 GMT server: Apache strict-transport-security: max-age=31536000; includeSubDomains last-modified: Mon, 16 Mar 2020 04:18:31 GMT etag: "10f-5a0f11ca09b7a" accept-ranges: bytes content-length: 271 cache-control: public, max-age=864000 expires: Mon, 30 Mar 2020 15:03:11 GMT vary: Accept-Encoding x-xss-protection: 1; mode=block x-content-type-options: nosniff content-type: image/png via: 1.1 google alt-svc: clear
Não é possível aceder aos objetos do Cloud Storage
Para conceder acesso a objetos no Cloud Storage, tem de configurar URLs
assinados ou conceder acesso público ao contentor e a todos os respetivos objetos para o
allUsers
.
Se decidir conceder acesso allUsers
, pode validar o acesso ao nível do objeto
da seguinte forma.
Consola
Na Google Cloud consola, abra o navegador do Cloud Storage.
Clique num grupo para ver a página Detalhes do grupo.
Na coluna Acesso público, passe o cursor do rato sobre o ícone de ponto de exclamação e clique em Editar acesso.
Para cada objeto no contentor, certifique-se de que a seguinte autorização está definida:
- Entidade: utilizador
- Nome: allUsers
- Acesso: leitor
Para saber mais sobre o controlo de acesso para o Cloud Storage, consulte a documentação da gestão de identidade e acesso (IAM) para o Cloud Storage.
Para saber mais sobre os URLs assinados, consulte o artigo Usar URLs assinados.
Se os objetos estiverem acessíveis, mas não estiverem a ser colocados em cache, consulte o artigo As respostas não estão a ser colocadas em cache.
O conteúdo privado foi colocado em cache ou o conteúdo em cache está incorreto
Se souber por que motivo o servidor de origem publicou o conteúdo privado ou incorreto e puder corrigir o problema, pode invalidar as caches da CDN da Google Cloud através do seguinte processo:
- Certifique-se de que o servidor de origem já não devolve conteúdo privado ou incorreto.
- Peça uma anulação da cache para indicar ao Cloud CDN que pare de publicar o conteúdo em cache.
Para mais informações, consulte a Vista geral da invalidação de cache.
A RFC armazena em cache apenas respostas com conteúdo armazenável em cache e publica respostas da cache apenas até ao prazo de validade especificado na resposta. Se não souber por que motivo o conteúdo foi colocado em cache ou não conseguir corrigir o problema rapidamente, recomendamos que desative o Cloud CDN até conseguir compreender e corrigir o problema e, em seguida, reative-o. Para mais informações sobre o conteúdo que é colocado em cache e durante quanto tempo, consulte a Vista geral da colocação em cache.
A relação de resultados da cache é baixa
Para o desempenho e a escalabilidade, é importante otimizar as taxas de acerto da cache. Se estiver a ter taxas de acertos da cache inferiores ao esperado, certifique-se de que está a seguir as práticas recomendadas para otimizar a taxa de acertos da cache.
Use a tabela seguinte para compreender alguns dos possíveis motivos para uma baixa taxa de acertos da cache e as potenciais correções.
Motivos | Comentários | Correções |
---|---|---|
O seu conteúdo não é armazenável em cache. | Uma resposta colocável em cache é uma resposta HTTP que a RFC pode armazenar. | Certifique-se de que o seu conteúdo é armazenável em cache. |
O modo de cache não é ideal para a sua aplicação. | A RFC na nuvem tem vários modos de cache. | Se não estiver a usar cabeçalhos de controlo da cache para controlar o comportamento da colocação em cache, a prática recomendada é permitir que o Cloud CDN coloque em cache todo o conteúdo estático. |
Existe uma pequena quantidade de tráfego. | Durante os testes e as experiências, é provável que a quantidade de tráfego que está a gerar seja baixa. A Google tem uma cache distribuída global e as solicitações de diferentes localizações geográficas são encaminhadas para diferentes localizações do front-end da Google. Em cada localização de front-end, a Google pode ter várias instâncias discretas da cache. |
|
As respostas para URLs específicos não são colocadas em cache. | A RFC de multimédia na nuvem incorpora o URI do pedido completo nas respetivas chaves de cache, pelo que http://example.com/cat.jpg?color=orange e http://example.com/cat.jpg?color=gray têm entradas de cache separadas. |
Use sempre um único URL para um determinado recurso. Se precisar de transmitir parâmetros para o JavaScript em execução numa página que, de resto, é armazenável em cache, considere usar identificadores de fragmentos em vez de strings de consulta. |
A cache está desnecessariamente dividida devido ao campo do cabeçalho Vary . |
O campo do cabeçalho Vary numa resposta descreve que partes de uma mensagem de pedido (além do método, do campo do cabeçalho Host e do destino do pedido) podem influenciar o processo do servidor de origem para selecionar e representar uma resposta. Por exemplo, pode querer usar o cabeçalho Vary: Accept-Encoding se publicar conteúdo diferente para clientes que podem processar respostas comprimidas e clientes que não podem. |
Use o cabeçalho de resposta Vary apenas quando for necessário. |
Não está a usar chaves de cache personalizadas. | Por predefinição, a RFC usa o URL do pedido completo para criar a chave da cache. Pode personalizar as chaves da cache para incluir ou omitir qualquer combinação de protocolo, anfitrião e string de consulta. Por exemplo, se dois domínios usarem o mesmo conteúdo estático, pode criar uma chave de cache personalizada que omita o campo de anfitrião. | Use chaves de cache personalizadas, quando necessário. |
Existem vários preenchimentos da cache para o mesmo conteúdo
Em geral, pode reduzir o número de preenchimentos da cache aumentando os tempos de expiração das respostas memorizáveis em cache. Sendo tudo o resto igual,
vê menos preenchimentos da cache para uma resposta com
Cache-Control: public, max-age=86400
do que uma com
Cache-Control: public, max-age=1
.
Para mais informações sobre os prazos de validade, consulte o artigo Prazos de validade e pedidos de validação. Para informações sobre a configuração dos cabeçalhos de resposta adequados, consulte a documentação do software do seu servidor Web.
A RFC opera várias caches em todo o mundo e as entradas de cache antigas são removidas rotineiramente para dar lugar a novo conteúdo. Como resultado, são esperados vários preenchimentos da cache por recurso como parte do funcionamento normal.
A compressão não está a funcionar
A RFC do Google Cloud oferece compressão dinâmica para origens que não conseguem comprimir as respetivas respostas. Sempre que possível, recomendamos que use a compressão na origem, uma vez que reduz os custos de preenchimento da cache.
Se as respostas publicadas pela RFC do Google Cloud não estiverem comprimidas, mas deveriam estar, verifique se o software do servidor Web em execução nas suas instâncias está configurado para comprimir as respostas. Por predefinição, alguns softwares de servidor Web desativam automaticamente a compressão para pedidos que incluem um cabeçalho Via
. A presença de um cabeçalho Via
indica que o pedido foi encaminhado por um proxy. Os proxies HTTP, como o balanceador de carga de aplicações externo, adicionam um cabeçalho Via
a cada pedido, conforme exigido pela especificação HTTP.
Para ativar a compressão, pode ter de substituir a configuração predefinida do servidor Web para lhe indicar que comprima as respostas, mesmo que o pedido tenha um cabeçalho Via
.
Se estiver a usar o software do servidor Web nginx, modifique o ficheiro de configuração nginx.conf
para ativar a compressão. A localização deste ficheiro depende do local onde o nginx está instalado. Em muitas distribuições Linux, o ficheiro é armazenado em /etc/nginx/nginx.conf
.
Para permitir que a compressão nginx funcione com o seu Application Load Balancer externo, adicione as seguintes duas linhas à secção http
de nginx.conf:
gzip_proxied any; gzip_vary on;
A primeira linha ativa a compressão mesmo para pedidos encaminhados por um proxy, como o Application Load Balancer externo.
A segunda linha adiciona um cabeçalho
Vary: Accept-Encoding
às respostas.Vary: Accept-Encoding
notifica os proxies de colocação em cache, como a rede de fornecimento de conteúdos (CDN) na nuvem, de que devem manter entradas de cache separadas para variantes comprimidas e não comprimidas de recursos comprimíveis.
Depois de modificar o ficheiro nginx.conf, tem de reiniciar o nginx antes de usar a nova configuração. Em muitas distribuições Linux, pode reiniciar o nginx executando sudo service nginx restart
ou /etc/init.d/nginx restart
.
As respostas terminam com erros byte_range_caching_aborted
Quando a RFC monta uma resposta a partir de vários pedidos de intervalo de bytes, verifica se esses intervalos são da mesma versão do recurso comparando os cabeçalhos de resposta ETag
e Last-Modified
. Se o Cloud CDN determinar que o valor de qualquer um dos cabeçalhos é inconsistente com os intervalos que já publicou para o cliente, aborta a resposta.
Se notar respostas terminadas inesperadamente,
entradas de registo do Cloud Logging
com byte_range_caching_aborted
statusDetails ou as suas instâncias a devolverem
respostas 412 Precondition Failed
, certifique-se de que o software do servidor Web em execução
em todas as instâncias de máquinas virtuais (VM) devolve os mesmos valores ETag
e
Last-Modified
para um determinado recurso.
Quando serve ficheiros a partir do disco, é comum o software do servidor Web derivar os valores ETag
e Last-Modified
da hora de modificação do ficheiro. Neste caso, pode garantir que as suas instâncias de VM comunicam valores consistentes usando a mesma imagem para todas as instâncias. Para ver detalhes sobre como o software do servidor Web determina os valores ETag
e Last-Modified
, consulte a documentação do software do servidor Web.
Resolução de problemas com cookies assinados
Os seguintes problemas podem ocorrer quando está a usar cookies assinados.
Codificação
Quando gera uma assinatura, o pedido é inesperadamente rejeitado devido a uma incompatibilidade de assinatura.
Ao codificar os valores URL
e Signature
, certifique-se de que está a usar a variante segura para URL da base64. O base64 padrão falha quando os carateres gerados não são seguros para URLs. O preenchimento é aceite.
Assinatura
O seu pedido é rejeitado pela CDN da nuvem.
Certifique-se de que está a usar o HMAC-SHA-1 como algoritmo de assinatura e não outra variante do HMAC.
Confirme que o parâmetro
KeyName
(sensível a maiúsculas e minúsculas) corresponde a um nome de chave válido para o serviço de back-end ou o contentor de back-end) usado pelo Cloud CDN.Não assine os parâmetros de consulta quando gerar e assinar um
URLPrefix
. Certifique-se de queURLPrefix
contém apenas os componentes de esquema, anfitrião e (parciais) de caminho do URL.Certifique-se de que o bloco de assinatura (
URLPrefix
,Expires
,KeyName
e o próprioSignature
) são as últimas secções delimitadas por:
do cookie.Certifique-se de que
URLPrefix
,Expires
,KeyName
eSignature
ocorrem por esta ordem.Não inclua um caráter de asterisco (
*
) no final de umURLPrefix
num cookie assinado.
Cookies
Normalmente, os navegadores limitam os cookies a 4 KB por domínio, com um limite de 50 cookies por domínio no total. Tenha em atenção outros cookies que está a emitir e a exigir que os seus clientes enviem, porque muitos servidores Web também têm limites máximos de cabeçalhos de pedidos.
Certifique-se de que está a usar o caráter dois pontos (
:
), o ponto de código UnicodeU+003A
, como delimitador para os parâmetros com nome num cookie assinado, e não o caráter comercial (&) (&
).Certifique-se de que a data/hora
Expires
nos cookies que está a emitir não é desnecessariamente curta. Os períodos de validade inferiores a um a dois minutos podem ser propensos a problemas de desvio de tempo entre a app de emissão e a infraestrutura da CDN na nuvem.Certifique-se de que não está a definir vários cookies para o mesmo
Domain
ePath
com valores diferentes. Defina um único cookie por utilizador com um valor de prefixo de URL que abranja todo o conteúdo ao qual o utilizador precisa de aceder.
Mensagens de erro
Esta secção fornece informações sobre algumas mensagens de erro comuns e como as resolver.
Erros de invalidação de cache
Código de erro | Notas |
---|---|
Invalid value for field 'resource.path' |
O valor do caminho tinha um formato inválido. Os caminhos têm de começar com um
Os caminhos não podem ter mais de 1024 carateres. Se receber este erro, verifique o valor do caminho e corrija quaisquer erros de formato. Este erro aborda apenas o formato do caminho. Um caminho com um formato válido, mas que não existe, continua a ser tratado como válido. |
Rate Limit Exceeded |
A CDN da nuvem restringe a taxa à qual as operações de invalidação da cache podem ser realizadas. Só é permitida uma invalidação por minuto. No entanto, cada operação pode especificar um padrão de caminho que corresponda a qualquer número de objetos. |
Problemas conhecidos
As invalidações da cache estão limitadas a uma invalidação por mapa de URLs por minuto.
Resolução: aguarde, pelo menos, um minuto antes de tentar invalidar outro mapa de URLs.
Para mais informações sobre a limitação da taxa de invalidação de cache, consulte as limitações.