---
name: azion-mostre-a-sua-propria-pagina-quando-nenhuma-origem-responde
description: >-
  Substitua as respostas 502, 503 e 504 de um workload pela sua própria página, servida por um connector que não alcança nenhuma das origens que falham.
---

# Mostre a sua própria página quando nenhuma origem responde

Você substitui o erro que um [workload](/pt-br/documentacao/plataforma/workloads/) retorna quando nenhuma origem responde por uma página sua, pelo Azion Console ou pela API. Para substituir outros códigos de status, como um `404`, consulte [Personalize uma página de erro](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/personalizar-pagina-resposta-erro/).

Quando nenhum servidor de origem pode ser selecionado, uma requisição traz o status upstream `502`. Quando uma origem HTTPS recusa o handshake TLS, o cliente recebe `502` com a página intitulada `Azion - Default error page`. Um custom page set vincula um código de status a uma página que um [connector](/pt-br/documentacao/plataforma/connectors/) serve. Uma página para um código marcado como Azion no Console substitui a página padrão da Azion.

```mermaid
%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "13px"}, "flowchart": {"nodeSpacing": 12, "rankSpacing": 12, "padding": 6, "wrappingWidth": 70, "minNodeWidth": 40, "useMaxWidth": true}}}%%
flowchart TD
  Req["Uma requisição chega ao connector da aplicação"] --> Answer{"Alguma origem responde?"}
  Answer -->|"sim"| Origin["O cliente recebe a resposta da origem"]
  Answer -->|"não: 502 ou 504"| Set["O set do deployment tem uma página para o código"]
  Set --> Fetch["A página é buscada no próprio connector dela"]
  Fetch --> Client["O cliente recebe a página, com o código de status personalizado"]
```

1. Uma requisição chega ao connector que a regra *Set Connector* da aplicação nomeia.
2. Quando uma origem responde, o cliente recebe a resposta dela.
3. Quando nenhuma origem responde, a resposta traz um `502` ou um `504`, e o custom page set do deployment do workload contém uma página para esse código.
4. A Azion busca a página no próprio connector dela, no caminho da página.
5. O cliente recebe a página no lugar da resposta, sem redirecionamento e com o código de status personalizado da página.

---

## Pré-requisitos

- Um workload cujo deployment nomeia uma aplicação. Para criar um, consulte [Primeiros passos com Workloads](/pt-br/documentacao/plataforma/workloads/primeiros-passos/).
- Um connector que serve a sua página de erro em um caminho e não alcança nenhuma das suas origens, como um connector do tipo `storage` que lê um bucket de [Object Storage](/pt-br/documentacao/plataforma/object-storage/). Para os campos dele, consulte [Configurações de connector](/pt-br/documentacao/plataforma/connectors/configuracoes/#storage).
- Acesso ao Azion Console, para o procedimento pelo Console. Consulte [Como acessar o Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/).
- Um [personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/) para o procedimento pela API, com o ID do connector da página, do workload, do deployment dele e da aplicação que o deployment nomeia. Se o deployment nomeia um firewall, o ID dele também.

Os exemplos servem a página em `/errors/503.html` em um connector chamado `error-pages`, para o domínio `www.example.com`. Substitua-os pelos seus.

---

## Crie um set com uma página para cada código

O set vincula `502`, `503` e `504` à mesma página. Nas [Configurações de custom page](/pt-br/documentacao/plataforma/workloads/custom-pages/configuracoes/#codigos-de-status), `502` é um gateway que recebeu uma resposta inválida, `503` um servidor que não está pronto e `504` um gateway que não recebeu resposta a tempo. Cada página responde com `503`, que marca uma condição temporária.

A página vem de um connector que não alcança nenhuma das suas origens, porque uma página buscada em uma origem que falha falha junto com ela. **Response TTL** define por quantos segundos a página fica em cache, de 0 a 31.536.000. Uma página de erro é estática e raramente muda, então um valor alto, como `86400`, um dia, afasta as requisições do connector da página.

**Console**

Para criar o set pelo Azion Console:

1. **Abra a página Custom Pages**

   Acesse [Azion Console](https://console.azion.com/) > **Custom Pages**.

2. **Inicie o set**

   Selecione **Create Custom Page**.

3. **Dê um nome ao set**

   Em **Name**, insira um nome que identifique o set, como `origin-down`.

4. **Selecione Create Custom Page Code**

5. **Selecione o código de status**

   Em **Page Code**, selecione `502`.

6. **Mantenha o tipo de página de connector**

   Em **Type**, mantenha *Page Connector*.

7. **Selecione o connector da página**

   Em **Connector**, selecione `error-pages`.

8. **Insira o caminho da página**

   Em **Page Path (URI)**, insira `/errors/503.html`.

9. **Defina o tempo de cache e o status**

   Insira `86400` em **Response TTL** e `503` em **Response Custom Status Code**.

10. **Adicione os códigos 503 e 504**

    Selecione **Create Custom Page Code** de novo para **Page Code** `503` e `504`, com o mesmo connector, o mesmo caminho e os mesmos **Response TTL** e **Response Custom Status Code**.

11. **Selecione Create**

A tabela **Page Codes** lista uma linha por página, com **Page Status Code**, **Page Path (URI)**, **Custom Status Code** e **Response TTL**.

**API**

Para criar o set pela API, envie uma requisição `POST` ao endpoint de custom pages, com uma entrada em `pages` por código de status. Substitua `<connector-id>` pelo ID de `error-pages`:

```bash
curl --request POST \
  --url https://api.azion.com/v4/workspace/custom_pages \
  --header 'Accept: application/json' \
  --header 'Authorization: Token <personal-token>' \
  --header 'Content-Type: application/json' \
  --data '{"name": "origin-down", "active": true, "pages": [
  {"code": "502", "page": {"type": "page_connector", "attributes": {"connector": <connector-id>, "ttl": 86400, "uri": "/errors/503.html", "custom_status_code": 503}}},
  {"code": "503", "page": {"type": "page_connector", "attributes": {"connector": <connector-id>, "ttl": 86400, "uri": "/errors/503.html", "custom_status_code": 503}}},
  {"code": "504", "page": {"type": "page_connector", "attributes": {"connector": <connector-id>, "ttl": 86400, "uri": "/errors/503.html", "custom_status_code": 503}}}
]}'
```

A API responde `201` com o novo set, incluindo o `id` dele. Anote o `id` para a próxima tarefa.

O set contém uma página para cada um dos três códigos. Ele não serve nada até que o deployment de um workload o nomeie.

---

## Atribua o set no deployment do workload

O deployment de um workload nomeia a aplicação, o firewall e o custom page set dele. Só o custom page set muda aqui, então a aplicação e o firewall mantêm os valores que o workload usa hoje. A Azion CLI define o custom page set só quando cria um deployment, e um workload tem um deployment, então esta tarefa usa o Azion Console ou a API.

**Console**

Para atribuir o set pelo Azion Console:

1. **Abra a página Workloads**

   Acesse [Azion Console](https://console.azion.com/) > **Workloads**.

2. **Abra o workload**

   Selecione o workload que atende `www.example.com`.

3. **Selecione o set**

   Em **Deployment Settings**, selecione `origin-down` em **Custom Page**. Mantenha **Application** e **Firewall** como estão.

4. **Selecione Save**

O Azion Console mostra `Your workload has been updated`.

**API**

Para atribuir o set pela API, envie uma requisição `PATCH` ao deployment do workload, com a aplicação que o deployment nomeia hoje e o ID do set em `custom_page`. Deixe `firewall` de fora se o deployment não tiver firewall:

```bash
curl --request PATCH \
  --url https://api.azion.com/v4/workspace/workloads/<workload-id>/deployments/<deployment-id> \
  --header 'Accept: application/json' \
  --header 'Authorization: Token <personal-token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "strategy": {
    "type": "default",
    "attributes": {
      "application": <application-id>,
      "firewall": <firewall-id>,
      "custom_page": <custom-page-id>
    }
  }
}'
```

A API responde `202`.

O deployment do workload nomeia o set. Uma alteração de deployment leva vários minutos para chegar à infraestrutura distribuída da Azion, e as requisições podem receber a página padrão da Azion até que ela chegue.

---

## Confirme que a página substitui o erro

A verificação tira as suas origens de serviço, então execute-a em uma janela de manutenção.

Para confirmar a página:

1. **Pare todas as origens do connector da aplicação**

   Pare o servidor web em cada origem ou bloqueie as conexões da Azion no firewall dela.

2. **Requisite o seu domínio**

   ```bash
   curl -s -D - https://www.example.com/
   ```

3. **Inicie as origens de novo**

A resposta traz o status `503`, do **Response Custom Status Code** da página, e o corpo de `/errors/503.html`, não a página intitulada `Azion - Default error page`. Ela não traz header `Location`, então o cliente não é redirecionado. Se a página padrão ainda chegar depois que a alteração do deployment se propagou, consulte [Solucionar problemas de Workloads](/pt-br/documentacao/plataforma/workloads/solucao-de-problemas/#custom-pages).

---

## Próximos passos

- [Configurações de custom page](/pt-br/documentacao/plataforma/workloads/custom-pages/configuracoes.md): Todos os campos de um set e das páginas dele, e os 22 códigos de status que uma página pode substituir.
- [Adicione uma origem de backup a um connector](/pt-br/documentacao/guias/performance-e-confiabilidade/disponibilidade/adicionar-uma-origem-de-backup-a-um-connector.md): Mantenha uma origem de reserva respondendo antes que a página de erro seja necessária.
- [Personalize uma página de erro](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/personalizar-pagina-resposta-erro.md): Substitua as respostas de erro de outros códigos de status, cada página com o próprio tempo de cache.
- [Manter uma aplicação no ar quando uma origem falha](/pt-br/documentacao/casos-de-uso/melhorar-performance-e-confiabilidade/manter-uma-aplicacao-no-ar-quando-uma-origem-falha.md): Uma origem primária e uma de reserva em um pool, com esta página quando as duas falham.
