# Como definir uma nova origem para sua aplicação

import Tabs from '~/components/tabs/Tabs'
import Code from '~/components/Code/Code.astro'
import Apiv4Rollout from '~/includes/snippets/apiv4Rollout/pt/snippet.mdx'

<Apiv4Rollout />

Este guia explica como configurar uma origem. Uma origem, também conhecida como backend, é o servidor de onde a Azion busca seu conteúdo. As origens podem incluir serviços de armazenamento de objetos, servidores em nuvem ou outras infraestruturas que hospedam os ativos ou dados da sua aplicação.

Existem instruções separadas para API v3 usando as configurações legadas de [Origem](/pt-br/documentacao/produtos/build/applications/domains/) e API v4 usando o novo produto [Connectors](/pt-br/documentacao/produtos/secure/connectors/).

:::tip
Se você não tem certeza de quais etapas se aplicam à sua conta, veja [o guia Verificar migração da conta](/pt-br/documentacao/produtos/guias/verificar-migracao-conta/) para determinar se sua conta já foi migrada.
:::

---

<Tabs client:visible>
    <Fragment slot="tab.consoleedgeconnector">Console - Connectors</Fragment>
    <Fragment slot="tab.consoleorigins">Console - Origens</Fragment>
    <Fragment slot="tab.apiv4">API v4</Fragment>
    <Fragment slot="tab.apiv3">API v3</Fragment>

<Fragment slot="panel.consoleedgeconnector">

1. [Acesse o Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Connectors**.
2. Clique no botão **+ Connector**.
3. Na seção **General**, dê ao seu conector um nome único e descritivo (por exemplo, `Meu Object Storage Connector`).
4. Na seção **Connector Type**, selecione **HTTP**.

:::tip
Para implementar algoritmos de balanceamento de carga para múltiplas origens, confira o [guia sobre múltiplas origens com Load Balancer](/pt-br/documentacao/produtos/guias/build/configure-multiplas-origens/).
:::

5. Na seção **Connection Options**, no campo **Transport Protocol Policy**, selecione **Force HTTPS**.
6. Na seção **Address Management**, no campo **Address**, adicione `httpbin.org`.
7. Em **Host**, adicione `customhost.com`.
8. Clique no botão **Save**.

:::note
Se sua origem estiver sob um host seguido por um caminho, como `https://bucket.s3.amazonaws.com/applications/your-app`, você deve separar a URL e adicionar o host `bucket.s3.amazonaws.com` no campo **Address** e o path `/applications/your-app` no campo **Origin path**.
:::

Para ativar o Connector na sua application:

1. Acesse a aba **Rules Engine**.
2. Edite a regra padrão ou adicione uma nova regra de request.
3. Dê um nome para sua regra.
4. Selecione **Request Phase**.
5. Na seção **Criteria**, selecione a variável `${uri}`.
6. Como operador de comparação, selecione **is equal**.
7. Como argumento, adicione `/httpbin`.
8. Na seção **Behaviors**, selecione **Set Connector** na lista de comportamentos.
9. Selecione o novo Connector que você criou.
10. Clique no botão **Save**.
11. Aguarde alguns minutos para que as alterações se propaguem e acesse `xxxxxxxxxx.map.azionedge.net/httpbin`.

</Fragment>

<Fragment slot="panel.consoleorigins">

Quando você [cria uma application](/pt-br/documentacao/produtos/comecar-com-um-template/), uma origem padrão é criada e ativada automaticamente. Este guia mostra como criar e ativar uma nova origem com diferentes configurações sem remover ou editar a origem padrão.

1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Applications**.
2. Clique na application para a qual você deseja configurar uma nova origem.
3. Selecione a aba **Origins**.
4. Clique no botão **+ Origin**.
5. Dê um nome à sua nova origem. Por exemplo: `httpbin.org`
6. Em **Type**, mantenha a opção **Single Origin** selecionada.

:::tip
Para implementar algoritmos de balanceamento de carga para múltiplas origens, confira o [guia sobre múltiplas origens com Load Balancer](/pt-br/documentacao/produtos/guias/build/configure-multiplas-origens/).
:::

7. Em **Protocol Policy**, selecione **Enforce HTTPS**.
8. Em **Address**, adicione `httpbin.org`.
9. Em **Host Header**, adicione `customhost.com`.

:::tip[Escolhendo o valor correto para o Host Header]
O **Host Header** controla qual valor a Azion envia no cabeçalho HTTP `Host` ao se conectar à sua origem.

- **Domínio específico** (ex.: `customhost.com`): a Azion sempre envia esse valor fixo para a origem, independentemente do domínio solicitado pelo usuário. Use quando sua origem serve um único virtualhost ou exige um hostname específico para rotear as requisições corretamente.
- **Variável `${host}`**: a Azion repassa o cabeçalho `Host` recebido da requisição do usuário diretamente para a origem. Use quando sua origem serve múltiplos virtualhosts a partir do mesmo endereço.

**Importante**: se sua origem aplica controles de acesso baseados no Host, allowlists de IP vinculadas a um hostname específico ou configurações de CDN que validam o cabeçalho `Host`, alterar esse valor pode fazer com que a origem rejeite as requisições. Verifique a configuração de virtualhost da sua origem antes de modificar este campo.
:::

10. Deixe **Path** em branco.
11. Clique no botão **Save**.

:::note
Se sua origem estiver sob um host seguido por um caminho, como `https://bucket.s3.amazonaws.com/applications/your-app`, você deve separar a URL e adicionar o host `bucket.s3.amazonaws.com` no campo **Address** e o path `/applications/your-app` no campo **Origin path**.
:::

Você criou uma nova origem, mas ela ainda não está ativa em sua aplicação. Você precisa definir o que acionará uma requisição para a nova origem.

1. Navegue até a aba **Rules Engine**.
2. Clique no botão **+ Rule**.
3. Dê um nome para sua regra.
4. Selecione **Request Phase**.
5. Na seção **Criteria**, selecione a variável `${uri}`.

:::note
A variável `${uri}` pode já estar selecionada por padrão se você não ativou o módulo **Application Accelerator**. Para mais informações sobre módulos de Applications, veja a [documentação de Applications](/pt-br/documentacao/produtos/build/applications/#modules).
:::

6. Como operador de comparação, selecione **is equal**.
7. Como argumento, adicione `/httpbin`.
8. Na seção **Behaviors**, selecione **Set Origin** na lista de comportamentos.
9. Selecione a nova origem que você criou.
10. Clique no botão **Save**.
11. Aguarde alguns minutos para que as alterações se propaguem e acesse `xxxxxxxxxx.map.azionedge.net/httpbin`.

</Fragment>

<Fragment slot="panel.apiv4">

1. Execute a seguinte requisição `POST` em seu terminal, substituindo `[TOKEN VALUE]` por seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/) e a variável `<application_id>` por [seu ID de application](/pt-br/documentacao/produtos/guias/build/definir-configuracoes-principais/):

<Code lang="bash" code={` 
curl --request POST \
  --url https://api.azion.com/v4/edge_connector/connectors \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "httpbin.org SO HTTPS Host:customhost.com",
    "active": true,
    "type": "http",
    "attributes": {
      "addresses": [
        {
          "active": true,
          "address": "httpbin.org",
          "http_port": 80,
          "https_port": 443
        }
      ],
      "connection_options": {
        "dns_resolution": "preserve",
        "transport_policy": "force_https",
        "http_version_policy": "http1_1",
        "host": "customhost.com",
        "path_prefix": "",
        "following_redirect": false,
        "real_ip_header": "X-Real-IP",
        "real_port_header": "X-Real-PORT"
      },
      "modules": {
        "load_balancer": {
          "enabled": false,
          "config": {
            "method": "round_robin",
            "max_retries": 0,
            "connection_timeout": 60,
            "read_write_timeout": 120
          }
        },
        "origin_shield": {
          "enabled": false,
          "config": null
        }
      }
    }
  }'
`} />

| Chave | Descrição |
| --- | --- |
| `name` | Define a string como o nome da origem. |
| `type` | Define o novo tipo de Connector como `http`. Para mais informações sobre balanceamento de carga, confira [como configurar múltiplas origens](/pt-br/documentacao/produtos/guias/build/configure-multiplas-origens/). |
| `addresses` | Recebe uma lista de objetos para cada endereço da origem. Como esta é uma entrada do tipo origem única, você pode enviar apenas um objeto com o valor de `address` dentro do array. |
| `transport_policy` | Quando `https`, força uma conexão HTTPS com a origem, não afetando o protocolo das requisições do usuário. |
| `host` | Define o valor do cabeçalho `Host` enviado para a origem. Use um FQDN específico (ex.: `customhost.com`) quando sua origem serve um único virtualhost. Use `${host}` para repassar o cabeçalho `Host` recebido da requisição do usuário, o que é útil quando sua origem serve múltiplos virtualhosts. Se sua origem aplica controles de acesso baseados no Host, certifique-se de que este valor corresponde ao que a origem espera. |

2. Você receberá uma resposta semelhante a esta:

<Code lang="json" code={`{
  "state": "pending",
  "data": {
    "id": <connector_id>,
    "name": "httpbin.org SO HTTPS Host:customhost.com",
    "last_editor": "your-email@example.com",
    "last_modified": "2025-08-14T18:12:20.161667Z",
    "active": true,
    "product_version": "1.0",
    "type": "http",
    "attributes": {
      "addresses": [
        {
          "active": true,
          "address": "httpbin.org",
          "http_port": 80,
          "https_port": 443,
          "modules": null
        }
      ],
      "connection_options": {
        "dns_resolution": "preserve",
        "transport_policy": "force_https",
        "http_version_policy": "http1_1",
        "host": "customhost.com",
        "path_prefix": "",
        "following_redirect": false,
        "real_ip_header": "X-Real-IP",
        "real_port_header": "X-Real-PORT"
      },
      "modules": {
        "load_balancer": {
          "enabled": false,
          "config": null
        },
        "origin_shield": {
          "enabled": false,
          "config": null
        }
      }
    }
  }
}
`} />

3. Execute a seguinte requisição `POST` em seu terminal para vincular o novo Connector à sua Applications, substituindo `[TOKEN VALUE]` por seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/), a variável `<application_id>` por [seu ID de application](/pt-br/documentacao/produtos/guias/build/definir-configuracoes-principais/), e a variável `<connector_id>` pelo ID do Connector do passo anterior:

<Code lang="bash" code={` 
curl --request POST \
  --url https://api.azion.com/v4/edge_application/applications/<application_id>/request_rules \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "string",
  "active": true,
  "criteria":
    [
      {
        "conditional": "if",
        "variable": "\${uri}",
        "operator": "is_equal",
        "argument": "/httpbin"
      }
    ],
  "behaviors": [
    {
      "type": "set_edge_connector",
      "attributes": {
        "value": "<connector_id>"
      }
    }
  ]
}'
`} />

4. Você receberá uma resposta confirmando que a regra foi criada.
5. Aguarde alguns minutos para que as alterações se propaguem e acesse `xxxxxxxxxx.map.azionedge.net/httpbin`. Além disso, tente acessar qualquer outro URI não configurado: você deve receber um erro `404`.

</Fragment>

<Fragment slot="panel.apiv3">

1. Execute a seguinte requisição `POST` em seu terminal, substituindo `[TOKEN VALUE]` por seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/) e a variável `<application_id>` por [seu ID de application](/pt-br/documentacao/produtos/guias/build/definir-configuracoes-principais/):

<Code lang="bash" code={`
curl --location 'https://api.azionapi.net/edge_applications/<application_id>/origins' \
--header 'Accept: application/json; version=3' \
--header 'Content-Type: application/json' \
--header 'Authorization: Token [TOKEN VALUE]' \
--data '{
        "name": "httpbin.org SO HTTPS Host:customhost.com",
        "origin_type": "single_origin",
        "addresses": [
            {
                "address": "httpbin.org"
            }
        ],
        "origin_protocol_policy": "https",
        "host_header": "customhost.com"
}'
`} />

| Chave | Descrição |
| --- | --- |
| `name` | Define a string como o nome da origem. |
| `origin_type` | Define o novo tipo de origem para `single_origin`. Para mais informações sobre balanceamento de carga, confira [como configurar múltiplas origens com Load Balancer](/pt-br/documentacao/produtos/guias/build/configure-multiplas-origens/). |
| `addresses` | Recebe uma lista de objetos para cada endereço da origem. Como esta é uma entrada do tipo origem única, você pode enviar apenas um objeto com o valor de `address` dentro do array. |
| `origin_protocol_policy` | Quando `https`, força uma conexão HTTPS com a origem, não afetando o protocolo das requisições do usuário. |
| `host_header` | Define o valor do cabeçalho `Host` enviado para a origem. Use um FQDN específico (ex.: `customhost.com`) quando sua origem serve um único virtualhost. Use `${host}` para repassar o cabeçalho `Host` recebido da requisição do usuário, o que é útil quando sua origem serve múltiplos virtualhosts. Se sua origem aplica controles de acesso baseados no Host, certifique-se de que este valor corresponde ao que a origem espera. |

2. Você receberá uma resposta semelhante a esta:

<Code lang="json" code={`{
    "results": {
        "origin_id": <origin_id>,
        "origin_key": <origin_key>,
        "name": "httpbin.org SO HTTPS Host:customhost.com",
        "origin_type": "single_origin",
        "addresses": [
            {
                "address": "httpbin.org",
                "weight": null,
                "server_role": "primary",
                "is_active": true
            }
        ],
        "origin_protocol_policy": "https",
        "is_origin_redirection_enabled": false,
        "host_header": "customhost.com",
        "method": "",
        "origin_path": "",
        "connection_timeout": 60,
        "timeout_between_bytes": 120,
        "hmac_authentication": false,
        "hmac_region_name": "",
        "hmac_access_key": "",
        "hmac_secret_key": ""
    }
}
`} />

:::caution[Atenção]
Endpoints que requerem identificação de origem usam o valor `origin_key`. Por exemplo, uma requisição `PATCH` para uma origem deve ser feita para a URL `https://api.azionapi.net/edge_applications/<application_id>/origins/<origin_key>`. Isso não se aplica a casos em que você deve referenciar uma origem fora dos endpoints `/origins/`, como ao criar uma nova regra para ativar sua origem.
:::

3. Execute a seguinte requisição `POST` em seu terminal, substituindo `[TOKEN VALUE]` por seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/), a variável `<application_id>` por [seu ID de application](/pt-br/documentacao/produtos/guias/build/definir-configuracoes-principais/), e a variável `<origin_id>` pelo ID da origem de quando você [criou uma nova origem via API](#via-api):

<Code lang="bash" code={`
curl --location 'https://api.azionapi.net/edge_applications/<application_id>/rules_engine/request/rules' \
--header 'Accept: application/json; version=3' \
--header 'Content-Type: application/json' \
--header 'Authorization: Token [TOKEN VALUE]' \
--data '{
    "name": "Set httpbin /httpbin",
    "behaviors": [
        {
            "name": "set_origin",
            "target": "<origin_id>"
        }
    ],
    "criteria": [
        [
            {
                "variable": "\${uri}",
                "operator": "is_equal",
                "conditional": "if",
                "input_value": "/httpbin"
            }
        ]
    ]
}'
`} />

4. Você irá receber uma resposta confirmando que a regra foi criada.
5. Aguarde alguns minutos para que as alterações se propaguem e acesse `xxxxxxxxxx.map.azionedge.net/httpbin`. Além disso, tente acessar qualquer outro URI não configurado: você deve receber um erro `404`.

:::tip
Confira a [documentação da API da Azion](https://api.azion.com/) e a [especificação OpenAPI](https://github.com/aziontech/azionapi-openapi/) para saber mais sobre todos os recursos disponíveis via API.
:::

</Fragment>
</Tabs>