Nginx + Kubernetes: Personalizando Páginas de Erro HTTP

Nginx + Kubernetes: Personalizando Páginas de Erro HTTP

As páginas de erro 404 e 500 são parte fundamental da navegação na web. Tem outros erros, mas vamos falar de pelo menos um nesse laboratório. Elas surgem quando algo não ocorre como esperado durante a interação do usuário com um site. Esses erros não são apenas inevitáveis em muitos casos, mas também oferecem uma oportunidade valiosa para otimizar a experiência do usuário, evitando frustrações e proporcionando uma navegação mais amigável e informativa.

Erro 404

O erro 404, frequentemente encontrado por quem navega na web, ocorre quando o servidor não consegue localizar o conteúdo solicitado. Isso pode acontecer por diversos motivos, como links quebrados, URLs digitadas incorretamente ou até mesmo quando uma página é removida sem ser redirecionada. Apesar de ser um erro comum, sua importância não deve ser subestimada.

Quando um usuário se depara com uma página 404 genérica e fria, a sensação de frustração é quase inevitável. A falta de informações adicionais pode fazer com que o visitante se sinta perdido e desmotivado a continuar explorando o site. No entanto, ao personalizar a página 404, o proprietário do site tem a chance de transformar uma experiência negativa em algo mais construtivo. Em vez de simplesmente mostrar uma mensagem de erro, uma página 404 personalizada pode oferecer links para outras áreas relevantes do site, um mecanismo de busca ou até mesmo uma mensagem divertida e acolhedora que ajude o usuário a se sentir mais confortável. A personalização transforma uma simples falha técnica em uma oportunidade para manter o engajamento e o interesse do usuário.

Erro 500

O erro 500, por sua vez, é um pouco mais grave. Ele ocorre quando há um problema inesperado no servidor que impede o processamento da solicitação. Ao contrário do 404, o erro 500 não é causado por uma ação do usuário, mas sim por uma falha técnica interna do próprio servidor. Essa falha pode resultar de uma sobrecarga de tráfego, problemas com o código do site ou com o banco de dados, ou ainda falhas de configuração.

Diferentemente de outros erros, o 500 pode ser mais angustiante, tanto para o usuário quanto para o administrador do site. O usuário é simplesmente informado de que houve um erro no servidor, sem entender o que exatamente aconteceu ou como pode ser resolvido. Para o administrador, o erro 500 pode ser uma indicação de que há algo seriamente errado no funcionamento do site, que precisa ser corrigido rapidamente.

Personalizar a página de erro 500, portanto, é uma maneira eficaz de suavizar essa experiência. Ao invés de deixar o visitante em frente a uma tela de erro genérica, uma página personalizada pode ser projetada para informar o usuário de forma educada sobre o problema e até oferecer alternativas, como voltar à página inicial, acessar outras páginas ou retornar mais tarde. Isso não só mantém o tom profissional do site, mas também transmite transparência e respeito ao visitante, que se sente valorizado mesmo diante de uma falha.

Qual o sentido de Personalizar as Páginas de Erro

A personalização dessas páginas não é apenas uma questão estética ou técnica, mas uma estratégia de usabilidade e relacionamento com o usuário. Elas representam um ponto de contato com o visitante que, se bem administrado, pode transformar uma falha em uma experiência positiva.

Páginas de erro personalizadas demonstram que o proprietário do site se preocupa com a experiência do usuário. Elas transmitem um sentimento de que o erro não foi ignorado, mas sim compreendido e tratado de forma a não prejudicar a navegação. Isso pode aumentar a confiança do usuário no site, encorajá-lo a voltar, ou até mesmo ajudá-lo a resolver o problema sozinho. Por exemplo, em uma página 404 bem desenhada, o usuário pode ser redirecionado para o conteúdo correto rapidamente, sem precisar procurar por conta própria. Da mesma forma, uma página 500 personalizada pode dar um toque de empatia, explicando que a equipe está trabalhando para resolver o problema, o que humaniza ainda mais a experiência.

Além disso, personalizar essas páginas também pode refletir a identidade da marca. As mensagens, o design e os recursos presentes nessas páginas podem ser alinhados com o tom e a voz do site, criando uma continuidade na comunicação. Isso é crucial em uma época onde os usuários esperam que os sites ofereçam uma experiência coesa e sem fricções.

Pronto pessoal, depois de uma leitura didática e téorica, vamos para o que interessa, mão na massa. Vem comigo!

Mão na massa

Como pré-requisito, tenha um K8s em execução, seja na nuvem, bare-metal, minukube, kind, k3s, a sua escolha. E não podemos esquecer do helm e um copo de café.

Vamos começar adicionando o chart no Nginx:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

helm repo update

Agora, instalando chart:

helm install 4labs-nginx ingress-nginx/ingress-nginx

Pronto, instalado.

Personalizações

Agora, iremos criar um arquivo chamado custom-error-pages.yaml e adicione o contéudo abaixo:

apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-error-pages
data: 
  404.html: | 
    <!DOCTYPE html>
    <html lang="pt-br">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Erro 404 - Página Não Encontrada</title>
        <style>
            body { text-align: center; font-family: Arial, sans-serif; background-color: #222; color: #fff; }
            h1 { font-size: 5rem; }
            p { font-size: 1.5rem; }
            img { width: 300px; margin-top: 20px; }
        </style>
    </head>
    <body>
        <h1>404</h1>
        <p>Oops! A página não foi encontrada!</p>
        <p><a href="/">Voltar para o Home</a></p>
    </body>
    </html>

E apliquei esse ConfigMap:

kubectl apply -f custom-error-pages.yaml

Agora vamos configurar o um arquivo de values personalizado para carregar essa configuração.

custom-backend-values.yaml


controller:
  config:
    custom-http-errors: "404"
  enabled: true
  image:
    registry: registry.k8s.io
    image: ingress-nginx/custom-error-pages
    tag: v1.1.1@sha256:8c10776191ae44b5c387b8c7696d8bc17ceec90d7184a3a38b89ac8434b6c56b
  extraVolumes:
  - name: custom-error-pages
    configMap:
      name: custom-error-pages
      items:
      - key: "404.html" 
        path: "404.html"     
  extraVolumeMounts:
  - name: custom-error-pages
    mountPath: /www

Agora vamos aplicar essa personalização e criar um novo microserviço chamado backend.

helm install 4labs-nginx ingress-nginx/ingress-nginx

Vocês vão ter o seguinte resultado:

kubectl get pods,svc

NAME                                                       READY   STATUS    RESTARTS      AGE
pod/4labs-nginx-ingress-nginx-controller-5c4797fff4-xttbc      1/1     Running   0 (1s)   1s
pod/4labs-nginx-ingress-nginx-defaultbackend-fbdc6987c-d7n82   1/1     Running   0 (1s)   1s

NAME                                                 TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)                      AGE
service/4labs-nginx-ingress-nginx-controller             LoadBalancer   10.109.118.177   192.168.56.100   80:30910/TCP,443:31572/TCP   142m
service/4labs-nginx-ingress-nginx-controller-admission   ClusterIP      10.103.142.127   <none>           443/TCP                      142m
service/4labs-nginx-ingress-nginx-defaultbackend         ClusterIP      10.101.15.139    <none>           80/TCP                       133m

O que estamos fazendo de fato?

O serviço do 4labs-nginx-ingress-nginx-defaultbackend, vai ser responsável por tratar os erros de HTTP que o Nginx Controller receber, como criamos uma página personalizada, ela quem vai aparece em erros 404 HTTP.

Vamos simular?

Se você não estiver usando um LoadBalancer para acessar o IP dele, use o port-forward:

kubectl -n nginx port-forward service/4labs-nginx-ingress-nginx-controller 8080:80

Resultado:

Conclusão

É isso pessoal, dessa forma vocês podemos personalizar a página de Erro do Nginx. Não se esqueçam de compartilhar em suas redes sociais e marcar a 4Linux.

Referências

https://github.com/kubernetes/ingress-nginx/tree/main/docs/examples/customization/custom-errors

https://github.com/kubernetes/ingress-nginx/tree/main/charts/ingress-nginx

https://kubernetes.github.io/ingress-nginx/user-guide/custom-errors/

Anterior Load Balancer, Proxy e Proxy Reverso: Entendendo as Diferenças e Aplicações Técnicas
Próxima Como Rodar o DeepSeek-R1 GRÁTIS no Linux

About author

Emerson Silva
Emerson Silva 14 posts

Desenvolvedor de Infraestrutura e Monitoramento, atua como Engenheiro DevOps na 4Linux, entusiasta DevOps e apaixonado por software livre

View all posts by this author →

Você pode gostar também

DevOps

Aumente sua empregabilidade: Conheça Linux e entre no mundo DEVOPS

Em 2013 eu escrevi um artigo intitulado “Por que você deve aprender Linux?” e quem teve a oportunidade de aprender linux nestes últimos 4 anos deve estar bem feliz com

Infraestrutura TI

O que é o Model Context Protocol (MCP) da Anthropic — e por que ele pode mudar a forma como interagimos com a IA

Nos últimos anos, os assistentes de inteligência artificial avançaram muito. Eles estão mais rápidos, mais úteis e, em muitos casos, já fazem parte do dia a dia de empresas e

Infraestrutura TI

Segurança em Acesso: Entenda a Importância do Controle de Acesso

O controle de acesso é uma prática voltada para segurança do ambiente e que visa garantir que somente pessoas autorizadas tenham permissão para visualizar e realizar operações dentro de uma