O arquivo azion.config.js é um arquivo de configuração de IaC criado durante o processo de build da aplicação, com base no preset selecionado, e serve como a fonte de verdade para a configuração. Cada preset fornece um conjunto de configurações padrão, que podem ser substituídas pelo usuário. Se o arquivo for excluído, a configuração padrão será recriada na próxima vez que o processo de build for disparado.

As configurações definidas por este arquivo incluem:

  • Build Configurations
  • Origins
  • Cache Settings
  • Rules Engine
  • Network List
  • Purge Settings
  • Firewall Settings
  • WAF Settings

Referência da API

defineConfig

Configura e valida as opções para a Application.

Parâmetros:

  • config: AzionConfig - Objeto de configuração para Applications.

Tipos

AzionConfig

Propriedades:

  • build?: AzionBuild - A configuração de build.
  • domain?: AzionDomain - O objeto domínio.
  • origin?: AzionOrigin[] - Lista de origens.
  • cache?: AzionCache[] - Lista de configurações de cache.
  • rules?: AzionRules[] - Lista de regras de application.
  • purge?: AzionPurge[] - List de URLs ou CacheKeys to purge.
  • networkLists?: AzionNetworkList[] - Lista de network lists.
  • waf?: AzionWaf[] - Lista de configurações do WAF.

AzionBuild

A definição de tipos para a configuração de build.

Propriedades:

  • builder?: 'esbuild' | 'webpack' - O builder a ser utilizado.
  • preset?: string - O preset a ser utilizado.
  • entry?: string - O arquivo de entrada.
  • polyfills?: boolean - Se deve utilizar Polyfills
  • worker?: boolean - Se deve realizar o build de um worker.
  • custom?: Record<string, any> - Configurações customizadas de build.
  • memoryFS?: { injectionDirs: string[], removePathPrefix: string } - Configuração do sistema de arquivos em memória.

AzionDomain

Definição de tipo para a configuração de domínio.

Propriedades:

  • name: string - O nome do domínio.
  • cnameAccessOnly?: boolean - Se deve restringir o acesso apenas a CNAMEs.
  • cnames?: string[] - Lista de CNAMEs para o domínio.
  • id?: number - ID do domínio.
  • edgeApplicationId?: number - ID da application.
  • edgeFirewallId?: number - ID do firewall.
  • digitalCertificateId?: string | number | null - ID do certificado digital.
  • active?: boolean - Se o domínio está ativo.
  • mtls?: MTLSConfig - Configuração para mTLS.
    • verification: 'enforce' | 'permissive' - Modo de verificação mTLS.
    • trustedCaCertificateId: number - ID do certificado trusted CA.
    • crlList?: number[] - Lista de Certificate Revocation Lists (CRLs).

AzionOrigin

Definição de tipo para a configuração de origem.

Propriedades:

  • id?: number - ID da origem.
  • key?: string - Chave para a origem.
  • name: string - Nome da origem.
  • type: string - Tipo da origem. Por exemplo: ‘single_origin’, ‘load_balancer’.
  • bucket?: string | null - Nome do bucket para origens de armazenamento.
  • prefix?: string | null - Pefixo para origens de armazenamento.
  • addresses?: (string | { address: string; weight?: number })[] - Array de endereços para a origem.
  • hostHeader?: string - Header de host customizado.
  • protocolPolicy?: 'http' | 'https' | 'preserve' - Política de protocolo para a origem.
  • redirection?: boolean - Se deve ativar redirecionamento.
  • method?: 'ip_hash' | 'least_connections' | 'round_robin' - Método de balanceamento de carga.
  • path?: string - Caminho para a origem.
  • connectionTimeout?: number - Timeout de conexão em segundos.
  • timeoutBetweenBytes?: number - Timeout entre bytes em segundos.
  • hmac?: { region: string; accessKey: string; secretKey: string } - Configuração de HMAC para a origem.

AzionCache

Definição de tipo para a configuração de cache.

Propriedades:

  • name: string - Nome da configuração de cache.
  • stale?: boolean - Se deve permitir conteúdo stale.
  • queryStringSort?: boolean - Se os parâmetros da string de consulta devem ser ordenados.
  • methods?: CacheMethods - HTTP a serem armazenados em cache.
    • post?: boolean - Se deve armazenar em cache requisições do tipo POST.
    • options?: boolean - Se deve armazenar em cache requisições do tipo OPTIONS.
  • browser?: BrowserCacheConfig - Configurações de cache do browser.
    • maxAgeSeconds: number | string - Validade máxima em segundos para o cache do browser.
  • edge?: EdgeCacheConfig - Configurações do Cache.
    • maxAgeSeconds: number | string - Validade máxima em segundos para o Cache.
  • cacheByCookie?: CacheByCookieConfig - Cache com base nas configurações de cookies.
    • option: 'ignore' | 'varies' | 'whitelist' | 'blacklist' - Opção de cache por cookie.
    • list?: string[] - Lista de cookies a serem usados para cache.
  • cacheByQueryString?: CacheByQueryStringConfig - Cache com base nas configurações de query string.
    • option: 'ignore' | 'varies' | 'whitelist' | 'blacklist' - Opção de cache por query string.
    • list?: string[] - Lista de Parâmetros query string a serem utilizados para cache.

AzionRequestRule

Definição de tipo para a configuração da regra de requisição.

Propriedades:

  • name: string - Nome da regra de requisição.
  • description?: string - Descrição da regra de requisição.
  • active?: boolean - Se a regra está ativa.
  • match: string - Critérios de correspondência para a regra.
  • variable?: string - Variável a ser usada na correspondência.
  • behavior?: RequestBehavior - Comportamento a ser aplicado quando a regra for correspondida.
    • setOrigin?: { name: string; type: string } - Definir uma nova origem.
    • rewrite?: string - Reescrever a requisição.
    • setHeaders?: string[] - Definir cabeçalhos.
    • bypassCache?: boolean | null - Ignorar cache.
    • httpToHttps?: boolean | null - Forçar HTTPS.
    • redirectTo301?: string | null - Redirecionar com status 301.
    • redirectTo302?: string | null - Redirecionar com status 302.
    • forwardCookies?: boolean | null - Encaminhar cookies.
    • setCookie?: string | null - Definir um cookie.
    • deliver?: boolean | null - Entregar o conteúdo.
    • capture?: { match: string; captured: string; subject: string } - Configuração de captura.
    • runFunction?: { path: string; name?: string | null } - Executar uma função serverless.
    • setCache?: string | { name: string; browser_cache_settings_maximum_ttl?: number | null; cdn_cache_settings_maximum_ttl?: number | null } - Configuração de cache.

AzionResponseRule

Definição de tipo para a configuração da regra de resposta.

Propriedades:

  • name: string - Nome da regra de resposta.
  • description?: string - Descrição da regra de resposta.
  • active?: boolean - Se a regra está ativa.
  • match: string - Critérios de correspondência para a regra.
  • variable?: string - Variável a ser usada na correspondência.
  • behavior?: ResponseBehavior - Comportamento a ser aplicado quando a regra for correspondida.
    • setCookie?: string | null - Definir um cookie.
    • setHeaders?: string[] - Definir cabeçalhos.
    • deliver?: boolean | null - Entregar o conteúdo.
    • capture?: { match: string; captured: string; subject: string } - Configuração de captura.
    • enableGZIP?: boolean | null - Habilitar compressão GZIP.
    • filterCookie?: string | null - Filtrar um cookie.
    • filterHeader?: string | null - Filtrar um cabeçalho.
    • runFunction?: { path: string; name?: string | null } - Executar uma função sem servidor.
    • redirectTo301?: string | null - Redirecionar com status 301.
    • redirectTo302?: string | null - Redirecionar com status 302.

AzionRules

Definição de tipo para o conjunto de regras.

Propriedades:

  • request: AzionRequestRule[] - Conjunto de regras para a fase de requisição.
  • response?: AzionResponseRule[] - Conjunto de regras para a fase de resposta.

AzionPurge

Definição de tipo para a configuração de purge.

Propriedades:

  • type: 'url' | 'cachekey' | 'wildcard' - O tipo de purge a ser realizado.
  • urls: string[] - Lista de URLs que passarão por purge.
  • method?: 'delete' - Método HTTP para a requisição de purge.
  • layer?: 'edge_caching' | 'l2_caching' - Camada de cache para realizar o purge.

AzionNetworkList

Definição de tipo para a configuração da network list.

Propriedades:

  • id: number - ID da network list.
  • listType: 'ip_cidr' | 'asn' | 'countries' - Tipo da network list.
  • listContent: string[] | number[] - Lista de IP CIDRs, ASNs, ou países.

AzionFirewall

Definição de tipo para a configuração do Firewall.

Propriedades:

  • name: string - Nome do firewall.
  • domains?: string[] - Lista de domínios associados ao firewall.
  • active?: boolean - Se o firewall está ativo.
  • edgeFunctions?: boolean - Se as Functions estão habilitadas.
  • networkProtection?: boolean - Se a proteção de rede está habilitada.
  • waf?: boolean - Se o WAF está habilitado.
  • variable?: RuleVariable - Variável a ser usada nas correspondências.
  • rules?: AzionFirewallRule[] - Lista de regras do firewall.
  • debugRules?: boolean - Se o modo de depuração está habilitado para as regras.

AzionFirewallRule

Definição de tipo para as regras do firewall.

Propriedades:

  • name: string - Nome da regra.
  • description?: string - Descrição da regra.
  • active?: boolean - Se a regra está ativa.
  • match?: string - Critérios de correspondência para a regra.
  • variable?: RuleVariable - Variável a ser usada na correspondência.
  • criteria?: AzionFirewallCriteria[] - Array de critérios para condições complexas.
  • behavior: AzionFirewallBehavior - Comportamento a ser aplicado quando a regra for correspondida.

AzionFirewallBehavior

Definição de tipo para os comportamentos das regras do firewall.

Propriedades:

  • runFunction?: { path: string } - Executar uma function.
  • setWafRuleset?: { wafMode: FirewallWafMode; wafId: string } - Definir o conjunto de regras WAF.
  • setRateLimit?: - Definir a configuração de limite de taxa.
    • type: FirewallRateLimitType - Tipo de limite de taxa (segundo, minuto, hora).
    • limitBy: FirewallRateLimitBy - Limitar por (client_ip, global, token).
    • averageRateLimit: string - Limite médio de taxa.
    • maximumBurstSize: string - Tamanho máximo do pico.
  • deny?: boolean - Negar a requisição.
  • drop?: boolean - Descartar a requisição.
  • setCustomResponse?: - Definir resposta personalizada.
    • statusCode: number | string - Código de status HTTP (200-499).
    • contentType: string - Tipo de conteúdo da resposta.
    • contentBody: string - Corpo do conteúdo da resposta.

AzionFirewallCriteria

Definição de tipo para os critérios das regras do firewall.

Propriedades:

  • variable: RuleVariable - Variável a ser avaliada.
  • conditional: RuleConditional - Tipo de condicional.
  • operator: RuleOperatorWithValue | RuleOperatorWithoutValue - Operador de comparação.
  • inputValue?: string - Valor de entrada para comparação (obrigatório para operadores com valor).

AzionWaf

Definição de tipo para a configuração do Web Application Firewall (WAF).

Propriedades:

  • id?: number - ID do WAF.
  • name: string - Nome do WAF.
  • active: boolean - Se o WAF está ativo.
  • mode: WafMode - Modo do WAF (learning, blocking, counting).
  • sqlInjection?: object - Configurações de SQL Injection.
    • sensitivity: string - Nível de sensibilidade (low, medium, high).
  • remoteFileInclusion?: object - Configurações de Remote File Inclusion.
    • sensitivity: string - Nível de sensibilidade (low, medium, high).
  • directoryTraversal?: object - Configurações de Directory Traversal.
    • sensitivity: string - Nível de sensibilidade (low, medium, high).
  • crossSiteScripting?: object - Configurações de Cross-Site Scripting.
    • sensitivity: string - Nível de sensibilidade (low, medium, high).
  • evadingTricks?: object - Configurações de Evading Tricks.
    • sensitivity: string - Nível de sensibilidade (low, medium, high).
  • fileUpload?: object - Configurações de File Upload.
    • sensitivity: string - Nível de sensibilidade (low, medium, high).
  • unwantedAccess?: object - Configurações de Unwanted Access.
    • sensitivity: string - Nível de sensibilidade (low, medium, high).
  • identifiedAttack?: object - Configurações de Identified Attack.
    • sensitivity: string - Nível de sensibilidade (low, medium, high).
  • bypassAdresses?: string[] - Lista de endereços IP para ignorar o WAF.

Exemplo

Aqui está um exemplo de implementação do arquivo azion.config.js:


export default {
  build: {
    entry: './src/index.js',
    preset: 'angular',
  },
  domain: {
    name: 'my_domain',
    cnameAccessOnly: false, // Opcional, padrão é false
    cnames: ['www.example.com'], // Opcional
    edgeApplicationId: 12345, // Opcional
    edgeFirewallId: 12345, // Opcional
    digitalCertificateId: 'lets_encrypt', // 'lets_encrypt' ou null
    mtls: {
      verification: 'enforce', // 'enforce' ou 'permissive'
      trustedCaCertificateId: 12345,
      crlList: [111, 222],
    }, // Opcional
  },
  origin: [
    {
      id: 123, // Opcional. ID da origem. Obtido via requisição GET. Não pode ser alterado via API.
      key: 'myorigin', // Opcional. Chave da origem. Obtida via requisição GET. Não pode ser alterada via API.
      name: 'myneworigin', // Obrigatório
      type: 'single_origin', // Obrigatório. Opções: single_origin, load_balancer, object_storage, live_ingest. Padrão é single_origin se não fornecido.
      path: '', // Opcional. Padrão é '' se não fornecido.
      addresses: [
        // Obrigatório para single_origin, load_balancer, live_ingest. Opcional para object_storage.
        // ou addresses: ['http.bin.org']
        {
          address: 'http.bin.org',
          weight: 1, // Opcional. Define um número de 1 a 10 para determinar quanto tráfego um servidor pode suportar.
        },
      ],
      protocolPolicy: 'preserve', // Opcional. Opções: preserve, https, http. Padrão é preserve se não fornecido.
      hostHeader: '${host}', // Padrão é '${host}' se não fornecido.
      connectionTimeout: 60, // Opcional. Padrão é 60 se não fornecido.
      timeoutBetweenBytes: 120, // Opcional. Padrão é 120 se não fornecido.
      redirection: false, // Opcional. Padrão é false se não fornecido.
      hmac: {
        region: 'us-east-1', // Obrigatório para HMAC
        accessKey: 'myaccesskey', // Obrigatório para HMAC
        secretKey: 'secretKey', // Obrigatório para HMAC
      }, // Opcional
    },
    {
      id: 456, // Opcional. ID da origem. Obtido via requisição GET. Não pode ser alterado via API.
      key: 'myorigin', // Opcional. Chave da origem. Obtida via requisição GET. Não pode ser alterada via API.
      name: 'myneworigin', // Obrigatório
      type: 'object_storage', // Obrigatório. Opções: single_origin, load_balancer, object_storage, live_ingest. Padrão é single_origin se não fornecido.
      bucket: 'blue-courage', // Obrigatório para object_storage.
      prefix: '0101010101001', // Opcional. Padrão é '' se não fornecido.
    },
  ],
  cache: [
    {
      name: 'mycache',
      stale: false,
      queryStringSort: false,
      methods: {
        post: false,
        options: false,
      },
      browser: {
        maxAgeSeconds: 1000 * 5, // 5000 segundos
      },
      edge: {
        maxAgeSeconds: 1000,
      },
      cacheByQueryString: {
        option: 'blacklist', // Opções: ['blacklist', 'whitelist', 'varies', 'ignore']
        list: ['order', 'user'],
      },
      cacheByCookie: {
        option: 'whitelist', // Opções: ['blacklist', 'whitelist', 'varies', 'ignore']
        list: ['session', 'user'],
      },
    },
  ],
  rules: {
    request: [
      {
        name: 'rewriteRuleExample',
        description: 'Reescreve URLs, define cookies e cabeçalhos, e encaminha cookies.',
        active: true,
        variable: 'uri', // Opcional, padrão é 'uri' se não fornecido.
        match: '^/rewrite$',
        behavior: {
          setCache: 'mycache1',
          rewrite: `/new/%{captured[1]}`, // Reescreve /original/image.jpg para /new/image.jpg.
          setCookie: 'user=12345; Path=/; Secure',
          setHeaders: 'Cache-Control: no-cache',
          forwardCookies: true,
        },
      },
      {
        name: 'gzipCompressionRuleExample',
        description: 'Habilita a compactação GZIP para caminhos específicos.',
        active: true,
        variable: 'uri', // Opcional, padrão é 'uri' se não fornecido.
        match: '^/compress',
        behavior: {
          enableGZIP: true,
        },
      },
      {
        name: 'forceHttpsRuleExample',
        description: 'Redireciona requisições HTTP para HTTPS em áreas seguras.',
        active: true,
        variable: 'uri', // Opcional, padrão é 'uri' se não fornecido.
        match: '^/secure-area',
        behavior: {
          httpToHttps: true,
        },
      },
    ],
    response: [
      {
        name: 'apiDataResponseRuleExample',
        description: 'Gerencia cabeçalhos, cookies e compressão GZIP para respostas de API.',
        active: true,
        variable: 'uri', // Opcional, padrão é 'uri' se não fornecido.
        match: '^/api/data',
        behavior: {
          setHeaders: 'Content-Type: application/json',
          setCookie: 'session=abcdef; Path=/; HttpOnly',
          filterHeader: 'Server',
          filterCookie: 'tracking',
          enableGZIP: true,
        },
      },
      {
        name: 'computeResultFunctionRuleExample',
        description: 'Executa uma função e captura o caminho completo da URI para resultados computacionais.',
        active: true,
        variable: 'uri', // Opcional, padrão é 'uri' se não fornecido.
        match: '^/compute-result',
        behavior: {
          runFunction: {
            path: '.edge/computeResult.js',
          },
          // Captura o caminho completo da URI e armazena na variável 'full_path_arr'.
          capture: {
            match: '^(.*)$', // A expressão regular '^(.*)$' captura o caminho completo da URI.
            captured: 'full_path_arr', // O resultado da captura é armazenado na variável 'full_path_arr'.
            subject: 'uri', // A captura é baseada no valor da variável 'uri'.
          },
          // Redireciona permanentemente para o primeiro elemento capturado em 'full_path_arr'.
          redirectTo301: '%{full_path_arr[0]}', // Usa o primeiro elemento do array 'full_path_arr' como parte da nova URL.
        },
      },
    ],
  },
  purge: [
    {
      type: 'url',
      urls: ['http://www.example.com/image.jpg'],
    },
    {
      type: 'cachekey',
      urls: ['https://example.com/test1', 'https://example.com/test2'],
      method: 'delete',
    },
    {
      type: 'wildcard',
      urls: ['http://www.example.com/*'],
    },
  ],
};


Recursos Relacionados