Configuração do tráfego no CDN cdn-configuring-cloud
A AEM as a Cloud Service oferece uma coleção de recursos configuráveis na camada CDN gerenciada pela Adobe que modificam a natureza das solicitações de entrada ou respostas de saída. As seguintes regras, descritas em detalhes nesta página, podem ser declaradas para alcançar o seguinte comportamento:
- Solicitar transformações - modifique aspectos de solicitações de entrada, incluindo cabeçalhos, caminhos e parâmetros.
- Transformações de resposta - modifique cabeçalhos que estão no caminho de volta para o cliente (por exemplo, um navegador da Web).
- Redirecionamentos do lado do servidor - acione um redirecionamento do navegador.
- Seletores de origem - proxy para um back-end de origem diferente.
Também podem ser configuradas na CDN as Regras de filtro de tráfego (incluindo o WAF), que controlam qual tráfego é permitido ou negado pela CDN. Este recurso já foi lançado e você pode saber mais sobre ele na página Regras de filtro de tráfego, incluindo regras de WAF.
Além disso, se a CDN não puder entrar em contato com sua origem, você poderá escrever uma regra que faça referência a uma página de erro personalizada auto-hospedada (que é renderizada). Saiba mais sobre isso lendo o artigo Configurando páginas de erro de CDN.
Todas essas regras, declaradas em um arquivo de configuração no controle do código-fonte, são implantadas usando o pipeline de configuração do Cloud Manager. Observe que o tamanho cumulativo do arquivo de configuração, incluindo as regras de filtro de tráfego, não pode exceder 100 KB.
Para obter mais trechos de código para cenários comuns, consulte o artigo Trechos de Configuração CDN para Cenários Comuns.
Ordem de avaliação order-of-evaluation
Funcionalmente, os vários recursos mencionados anteriormente são avaliados na seguinte sequência:
Configurar initial-setup
Antes de configurar o tráfego na CDN, é necessário fazer o seguinte:
-
Crie um arquivo com o nome
cdn.yamlou semelhante, referenciando os vários trechos de configuração nas seções abaixo.Todos os trechos têm estas propriedades comuns, que estão descritas em Pipeline de configuração. O valor da propriedade
kinddeve ser CDN e a propriedadeversiondeve ser definida como 1.code language-none kind: "CDN" version: "1" -
Coloque o arquivo em algum lugar em uma pasta de nível superior chamada config ou similar, conforme descrito em Pipeline de configuração.
-
Crie um Pipeline de configuração no Cloud Manager, conforme descrito em Pipeline de configuração.
-
Implante a configuração.
Sintaxe de regras configuration-syntax
Os tipos de regra nas seções abaixo compartilham uma sintaxe comum.
A sintaxe de regra típica é uma entrada de lista com um nome, uma condição when e uma ação ou ações:
- name: <name>
when: <condition>
action: <action>
Cada seção de nível superior (requestTransformations, responseTransformations, redirects, originSelectors e trafficFilters em Regras de filtro de tráfego) dá suporte a seu próprio conjunto de tipos de ação e propriedades; os valores e campos type permitidos são definidos nas tabelas e exemplos dessa seção, não compartilhados entre todos os tipos de regra. Seções como requestTransformations e responseTransformations dão suporte a várias ações especificadas como uma lista yaml na propriedade actions.
A cláusula “when” determina se uma regra será avaliada com base nas propriedades, incluindo domínio, caminho, sequências de consulta, cabeçalhos e cookies. A sintaxe é a mesma em todos os tipos de regras; consulte Estrutura de Condição abaixo. As regras de filtro de tráfego (incluindo o WAF) usam a mesma sintaxe de condição; consulte Regras de filtro de tráfego incluindo regras do WAF para ações, limites de taxa e comportamento específico do WAF.
Estrutura de condição condition-structure
Uma Condição pode ser uma Condição simples ou um grupo de Condições.
Condição simples
Uma Condição simples é composta por um getter e um predicado.
{ <getter>: <value>, <predicate>: <value> }
Agrupar Condições
Um Grupo de condições é composto por várias Condições simples e/ou de grupo.
<allOf|anyOf>:
- { <getter>: <value>, <predicate>: <value> }
- { <getter>: <value>, <predicate>: <value> }
- <allOf|anyOf>:
- { <getter>: <value>, <predicate>: <value> }
array[Condition]array[Condition]Getter
stringPropriedade de solicitação.
Um de:
path: Retorna o caminho completo de uma URL sem os parâmetros de consulta. (usepathRawpara a variante sem escape)originalPath: retorna o caminho original imutável da solicitação sem os parâmetros de consulta — o caminho antes de qualquer transformação de solicitação CDN.url: Retorna a URL completa, incluindo os parâmetros de consulta. (useurlRawpara a variante sem escape)originalUrl: Retorna a URL original completa e imutável da solicitação, incluindo os parâmetros de consulta — a URL antes de qualquer transformação de solicitação CDN.queryString: Retorna a parte da consulta de uma URLmethod: retorna o método HTTP usado na solicitação.tier: Retorna um deauthor,previewoupublish.domain: retorna a propriedade de domínio (conforme definido no cabeçalhoHost) em minúsculasclientIp: Retorna o IP do cliente.forwardedDomain: retorna o primeiro domínio definido no cabeçalhoX-Forwarded-Hostem minúsculasforwardedIp: retorna o primeiro IP no cabeçalhoX-Forwarded-For.clientRegion: Retorna o código de subdivisão do país que identifica a região em que o cliente está localizado, conforme descrito em ISO 3166-2.clientCountry: retorna um código de duas letras (Símbolo de indicador regional) que identifica o país em que o cliente está localizado.clientContinent: Retorna um código de duas letras (AF, AN, AS, EU, NA, OC, SA) que identifica em qual continente o cliente está localizado.clientAsNumber: Retorna o número Sistema Autônomo associado ao IP do cliente.clientAsName: Retorna o nome associado ao número do Sistema Autônomo.
stringstringstringstringapplication/x-www-form-urlencodedPredicado
stringstringstringstringstringstringarray[string]array[string]booleanNotas
- A propriedade de solicitação
clientIpsó pode ser usada com os seguintes predicados:equals,doesNotEqual,in,notIn.clientIptambém pode ser comparado a intervalos IP ao usar os predicadosinenotIn. O exemplo a seguir implementa uma condição para avaliar se um IP de cliente está no intervalo de IP de 192.168.0.0/24 (então de 192.168.0.0 a 192.168.0.255):
when:
reqProperty: clientIp
in: [ "192.168.0.0/24" ]
- A Adobe recomenda o uso do regex101 e do Fastly Fiddle ao trabalhar com o regex. Você também pode saber mais sobre como o Fastly lida com o regex no fastly documentation - Regular expressions in Fastly VCL.
Os detalhes do nó de ações diferem por tipo de regra e são descritos nas seções individuais abaixo.
Nas regras de configuração, você pode referenciar segredos definidos como variáveis de ambiente (consulte Segredos de configuração).
Solicitar transformações request-transformations
As regras de transformação de solicitação permitem modificar solicitações recebidas. As regras oferecem suporte para a configuração, remoção e alteração de caminhos, parâmetros de consulta e cabeçalhos (incluindo cookies) com base em várias condições correspondentes, incluindo expressões regulares. Também é possível definir variáveis, que podem ser referenciadas posteriormente na sequência de avaliação.
Os casos de uso são variados e incluem regravações de URL para simplificação de aplicativos ou mapeamento de URLs herdados.
Como mencionado anteriormente, há um limite de tamanho para o arquivo de configuração, portanto, as organizações com requisitos maiores devem definir regras na camada apache/dispatcher.
Exemplo de configuração:
kind: "CDN"
version: "1"
data:
requestTransformations:
removeMarketingParams: true
rules:
- name: set-header-rule
when:
reqProperty: path
like: /set-header
actions:
- type: set
reqHeader: x-some-header
value: some value
- name: set-header-with-reqproperty-rule
when:
reqProperty: path
like: /set-header
actions:
- type: set
reqHeader: x-some-header
value: {reqProperty: path}
- name: unset-header-rule
when:
reqProperty: path
like: /unset-header
actions:
- type: unset
reqHeader: x-some-header
- name: unset-matching-query-params-rule
when:
reqProperty: path
equals: /unset-matching-query-params
actions:
- type: unset
queryParamMatch: ^removeMe_.*$
- name: unset-all-query-params-except-exact-two-rule
when:
reqProperty: path
equals: /unset-all-query-params-except-exact-two
actions:
- type: unset
queryParamMatch: ^(?!leaveMe$|leaveMeToo$).*$
- name: multi-action
when:
reqProperty: path
like: /multi-action
actions:
- type: set
reqHeader: x-header1
value: body set by transformation rule
- type: set
reqHeader: x-header2
value: '201'
- name: replace-html
when:
reqProperty: path
like: /mypath
actions:
- type: transform
reqProperty: path
op: replace
match: \.html$
replacement: ""
- name: log-on-request
when: "*"
actions:
- type: set
logProperty: forwarded_host
value:
reqHeader: x-forwarded-host
Ações
As ações disponíveis são explicadas na tabela abaixo.
As ações de substituição oferecem suporte aos grupos de captura, conforme ilustrado abaixo:
- name: extract-country-code-from-path
when:
reqProperty: path
matches: ^/([a-zA-Z]{2})(/.*|$)
actions:
- type: set
var: country-code
value:
reqProperty: path
- type: transform
var: country-code
op: replace
match: ^/([a-zA-Z]{2})(/.*|$)
replacement: \1
- name: replace-jpg-with-jpeg
when:
reqProperty: path
like: /mypath
actions:
- type: transform
reqProperty: path
op: replace
match: (.*)(\.jpg)$
replacement: "\1\.jpeg"
As ações podem ser encadeadas. Por exemplo:
actions:
- type: transform
reqProperty: path
op: replace
match: \.html$
replacement: ""
- type: transform
reqProperty: path
op: tolower
Variáveis variables
É possível definir variáveis durante a transformação da solicitação e, em seguida, referenciá-las posteriormente na sequência de avaliação. Consulte o diagrama ordem da avaliação para obter mais detalhes.
Exemplo de configuração:
kind: "CDN"
version: "1"
data:
requestTransformations:
rules:
- name: set-variable-rule
when:
reqProperty: path
equals: /set-variable
actions:
- type: set
var: some_var_name
value: some_value
responseTransformations:
rules:
- name: set-response-header-while-variable
when:
var: some_var_name
equals: some_value
actions:
- type: set
respHeader: x-some-header
value: some header value
Propriedade de log logproperty
Você pode adicionar suas próprias propriedades de log nos logs CDN usando transformações de solicitação e resposta.
Exemplo de configuração:
requestTransformations:
rules:
- name: log-on-request
when: "*"
actions:
- type: set
logProperty: forwarded_host
value:
reqHeader: x-forwarded-host
responseTransformations:
rules:
- name: log-on-response
when: '*'
actions:
- type: set
logProperty: cache_control
value:
respHeader: cache-control
Exemplo de log:
{
"timestamp": "2025-03-26T09:20:01+0000",
"ttfb": 19,
"cli_ip": "147.160.230.112",
"cli_country": "CH",
"rid": "974e67f6",
"req_ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15",
"host": "example.com",
"url": "/content/hello.png",
"method": "GET",
"res_ctype": "image/png",
"cache": "PASS",
"status": 200,
"res_age": 0,
"pop": "PAR",
"rules": "",
"forwarded_host": "example.com",
"cache_control": "max-age=300"
}
Transformações de resposta response-transformations
As regras de transformação de resposta permitem definir e cancelar a definição de cabeçalhos, cookies e status das respostas de saída do CDN. Além disso, consulte o exemplo acima para fazer referência a uma variável previamente definida em uma regra de transformação de solicitação.
Exemplo de configuração:
kind: "CDN"
version: "1"
data:
responseTransformations:
rules:
- name: set-response-header-rule
when:
reqProperty: path
like: /set-response-header
actions:
- type: set
value: value-set-by-resp-rule
respHeader: x-resp-header
- name: unset-response-header-rule
when:
reqProperty: path
like: /unset-response-header
actions:
- type: unset
respHeader: x-header1
- name: multi-action-response-header-rule
when:
reqProperty: path
like: /multi-action-response-header
actions:
- type: set
respHeader: x-resp-header-1
value: value-set-by-resp-rule-1
- type: set
respHeader: x-resp-header-2
value: value-set-by-resp-rule-2
- name: status-code-rule
when:
reqProperty: path
like: status-code
actions:
- type: set
respProperty: status
value: '410'
- name: set-response-cookie-with-attributes-as-object
when: '*'
actions:
- type: set
respCookie: first-name
value: first-value
attributes:
expires: '2025-08-29T10:00:00'
domain: example.com
path: /some-path
secure: true
httpOnly: true
extension: ANYTHING
- name: unset-response-cookie
when: '*'
actions:
- type: unset
respCookie: third-name
Ações
As ações disponíveis são explicadas na tabela abaixo.
Seletores de origem origin-selectors
Você pode aproveitar a CDN da AEM para rotear o tráfego para diferentes back-ends, incluindo aplicativos que não sejam da Adobe (talvez por caminho ou subdomínio).
As propriedades de solicitação originalPath e originalUrl são o caminho original imutável (sem parâmetros de consulta) e a URL completa (incluindo parâmetros de consulta), respectivamente, cada um obtido antes de qualquer solicitação de transformações de CDN. Use-as nas condições when quando precisar ancorar regras no que o cliente enviou inicialmente, em vez de valores que podem ter sido regravados anteriormente na sequência de avaliação. Use originalPath para correspondência somente de caminho; use originalUrl quando a cadeia de consulta precisar fazer parte da condição (por exemplo, roteamento ou filtragem em uma URL de solicitação inicial específica).
Exemplo de configuração:
kind: "CDN"
version: "1"
data:
originSelectors:
rules:
- name: example-com
when: { reqProperty: originalPath, like: /proxy* }
action:
type: selectOrigin
originName: example-com
# skipCache: true
# headers:
# Authorization: ${{AUTH_TOKEN}}
origins:
- name: example-com
domain: www.example.com
# ip: '1.1.1.1'
# forwardHost: true
# forwardCookie: true
# forwardAuthorization: true
# timeout: 20
Ações
A ação disponível é explicada na tabela abaixo.
{})static).{})Origens
As conexões com as origens são somente SSL e usam a porta 443.
.adobeaemcloud.com. Não é possível criar proxy diretamente para um domínio adobeaemcloud.com. Essa restrição protege contra loops de solicitação indesejados. Para usar o tráfego de proxy em seu ambiente AEM as a Cloud Service, use um domínio personalizado instalado em seu ambiente AEMaaCS como back-end de origem.Domínio personalizado de proxy para a camada estática do AEM proxy-custom-domain-static
Os seletores de origem podem ser usados para rotear o tráfego de publicação do AEM para o conteúdo estático do AEM implantado usando o pipeline de front-end. Os casos de uso incluem o fornecimento de recursos estáticos no mesmo domínio da página (por exemplo, example.com/static) ou em um domínio explicitamente diferente (por exemplo, static.example.com).
Este é um exemplo de uma regra de seletor de origem que pode fazer isso:
kind: CDN
version: '1'
data:
originSelectors:
rules:
- name: select-aem-static-origin
when:
reqProperty: domain
equals: static.example.com
action:
type: selectAemOrigin
originName: static
Utilização de proxy para o Edge Delivery Services proxying-to-edge-delivery
Há cenários em que os seletores de origem devem ser usados para rotear o tráfego por meio da Publicação do AEM para o AEM Edge Delivery Services:
- Parte do conteúdo é entregue por um domínio gerenciado pela AEM Publish, enquanto outro conteúdo do mesmo domínio é entregue pela Edge Delivery Services.
- O conteúdo entregue pelo Edge Delivery Services se beneficiaria das regras implantadas por meio do pipeline de configuração, incluindo regras de filtro de tráfego ou transformações de solicitação/resposta.
- O pipeline de configuração do Edge Delivery permite definir configurações de CDN gerenciadas pela Adobe definindo regras como
trafficFilters,originSelectorseredirects.
Este é um exemplo de uma regra de seletor de origem que pode fazer isso:
kind: CDN
version: '1'
data:
originSelectors:
rules:
- name: select-edge-delivery-services-origin
when:
allOf:
- reqProperty: tier
equals: publish
- reqProperty: domain
equals: <Production Host>
- reqProperty: path
matches: "^(/scripts/.*|/styles/.*|/fonts/.*|/blocks/.*|/icons/.*|.*/media_.*|/favicon.ico)"
action:
type: selectOrigin
originName: aem-live
origins:
- name: aem-live
domain: main--repo--owner.aem.live
Utilização de proxy no ambiente do AEMaaCS proxying-to-aemaacs
Você não pode usar um domínio adobeaemcloud.com diretamente como uma origem na sua configuração de CDN. Isso é rejeitado (o domínio não deve conter .adobeaemcloud.com) para proteger contra loops de solicitação indesejados. Isso também se aplica ao roteamento de um domínio instalado para um site do Edge Delivery.
Se o domínio personalizado (www.example.com) já estiver instalado em um ambiente AEMaaCS, o roteamento padrão será roteado para o back-end do AEM sem nenhuma regra CDN. Use seletores de origem quando precisar rotear entre ambientes (por exemplo, de pXXXX-eYYYY para pXXXX-eZZZZ) ou de um site do Edge Delivery para um ambiente do AEMaaCS.
Para direcionar o tráfego de proxy para o ambiente do AEM as a Cloud Service nesses casos (por exemplo, para rotear caminhos específicos como /graphql para um back-end), instale um domínio personalizado no ambiente do AEMaaCS e use esse domínio personalizado como a origem na sua configuração de CDN.
Exemplo: Se a camada de publicação do AEM estiver acessível em publish-pXXXXX-eYYYYY.adobeaemcloud.com, não use esse domínio em originSelectors. Em vez disso:
- Instale um domínio personalizado em seu ambiente AEMaaCS (por exemplo,
aem-publish-origin.example.com) que aponte para seu serviço de publicação. - Na configuração da CDN, defina uma origem com esse domínio personalizado e roteie os caminhos desejados (por exemplo,
/graphql) para ele.
kind: CDN
version: '1'
data:
originSelectors:
rules:
- name: graphql-to-aem-publish
when:
allOf:
- reqProperty: domain
equals: www.example.com
- reqProperty: originalPath
like: /graphql*
action:
type: selectOrigin
originName: aem-publish-origin
origins:
- name: aem-publish-origin
domain: aem-publish-origin.example.com
Redirecionamentos do lado do servidor server-side-redirectors
Você pode usar as regras de redirecionamento do lado do cliente para 301, 302 e redirecionamentos semelhantes do lado do cliente. Se uma regra for correspondente, o CDN responderá com uma linha de status que inclui o código de status e a mensagem (por exemplo, HTTP/1.1 301 Movido Permanentemente), bem como o conjunto de cabeçalhos do local.
São permitidas localizações absolutas e relativas com valores fixos.
Observe que o tamanho cumulativo do arquivo de configuração, incluindo as regras de filtro de tráfego, não pode exceder 100 KB.
Exemplo de configuração:
kind: "CDN"
version: "1"
data:
redirects:
rules:
- name: redirect-absolute
when: { reqProperty: originalPath, equals: "/page.html" }
action:
type: redirect
status: 301
location: https://example.com/page
- name: redirect-relative
when: { reqProperty: originalPath, equals: "/anotherpage.html" }
action:
type: redirect
location: /anotherpage
Os locais de um redirecionamento podem ser literais de cadeia de caracteres (por exemplo, https://www.example.com/page) ou o resultado de uma propriedade (por exemplo, caminho) que é transformada opcionalmente, com a seguinte sintaxe:
redirects:
rules:
- name: country-code-redirect
when: { reqProperty: path, like: "/" }
action:
type: redirect
location:
reqProperty: clientCountry
transform:
- op: replace
match: '^(.*)
replacement: 'https://www.example.com/\1/home'
- op: tolower
- name: www-redirect
when: { reqProperty: domain, equals: "example.com" }
action:
type: redirect
location:
reqProperty: url
transform:
- op: replace
match: '^/(.*)
replacement: 'https://www.example.com/\1'