Use o Serverless App Engine (SAE) para hospedar um serviço Nginx em dois cenários comuns: servir um site estático ou atuar como proxy reverso que encaminha requisições de clientes para uma aplicação backend. Este guia aborda a criação de uma imagem personalizada do Nginx, o envio para um registro e a implantação no SAE.
Como funciona
O Nginx recebe requisições dos clientes e serve arquivos estáticos diretamente ou as encaminha para uma aplicação backend com base nos padrões de URI. A resposta retorna ao cliente por meio do Nginx.
Escolha seu cenário
Identifique qual cenário se aplica a você antes de começar, pois algumas etapas são específicas para cada caso.
|
Cenário |
Descrição |
Etapas a ignorar |
|
Site estático |
Servir HTML, CSS e imagens do contêiner Nginx |
Ignore as regras de encaminhamento na etapa 2; ignore o gateway NAT na etapa 4 |
|
Proxy reverso |
Encaminhar requisições de clientes para uma aplicação backend com base na URI |
Conclua todas as etapas |
O contêiner Nginx neste guia escuta na porta80. Ao associar uma instância do Classic Load Balancer (CLB) na etapa 4, defina a Container Port como80.
Pré-requisitos
Antes de iniciar, certifique-se de ter:
Docker instalado em seu ambiente local ou em uma instância do Elastic Compute Service (ECS)
Um repositório de imagens no Container Registry (ACR) — Enterprise Edition ou Personal Edition
(Apenas para proxy reverso) Uma aplicação backend acessível pela internet ou dentro da sua VPC
Etapa 1: Prepare os recursos do site estático
Este guia utiliza o seguinte arquivo de exemplo: nginx-demo.zip.
O arquivo compactado contém:
html/index.html— a página inicial padrãohtml/error.html— a página de erro 404 padrãoconf/nginx.conf— o arquivo de configuração do Nginx
Em produção, substitua esses arquivos pelos seus próprios recursos estáticos e configurações.
Etapa 2: Escreva o arquivo de configuração do Nginx
O exemplo conf/nginx.conf abrange duas configurações: acesso a recursos estáticos e encaminhamento de requisições.
Configure o acesso a recursos estáticos
...
server {
listen 80 default_server; # Listen on port 80.
...
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
# Serve index.html for requests to the root path.
location / {
root /usr/share/nginx/html; # Path where static files are stored in the container.
index index.html;
}
# Return error.html for 404 errors.
error_page 404 /error.html;
location = /error.html {
root /usr/share/nginx/html;
}
}
...
Configure as regras de encaminhamento (apenas proxy reverso)
Ignore esta seção se estiver construindo apenas um site estático.
Este exemplo considera que o endpoint da aplicação backend é 121.40.xx.xx:80. A configuração a seguir encaminha requisições com URIs correspondentes a /api/* para o backend e reescreve o caminho para /*:
...
# Forward /api/* requests to the backend application.
location /api/ {
proxy_pass http://121.40.xx.xx:80/;
}
...
Se o serviço Nginx e a aplicação backend estiverem na mesma VPC, use o endpoint privado do backend em vez de um endereço IP público. Nesse caso, não é necessário um gateway NAT de Internet.
Para obter todas as opções de configuração, consulte a documentação oficial do Nginx.
Etapa 3: Crie e envie a imagem
Escreva um Dockerfile
# Base image
FROM nginx:1.20.2
# Copy the Nginx configuration file into the container.
COPY conf/nginx.conf /etc/nginx/nginx.conf
# Copy static files into the container.
COPY html /usr/share/nginx/html
Crie a imagem
Execute o comando a seguir no diretório onde o Dockerfile está localizado:
docker build . -t my-nginx:1.0
# .: Use the current directory as the build context.
# -t: Set the image name and tag.
Teste a imagem localmente
# Start the container.
docker run -d -p 80:80 my-nginx:1.0
# Test static file access.
curl localhost:80/
# Test request forwarding (reverse proxy only).
curl localhost:80/api/
Envie a imagem para o ACR
Envie a imagem para o seu repositório no Container Registry (ACR). Para obter instruções, consulte Enviar e baixar imagens (Enterprise Edition) ou Enviar e baixar imagens (Personal Edition).
Etapa 4: Implante o Nginx e configure o acesso à rede
Implante a aplicação Nginx a partir da imagem enviada ao ACR. Consulte Implantar uma aplicação a partir de uma imagem.
(Apenas para proxy reverso com backend público) Por padrão, aplicações no SAE não têm acesso à internet. Caso seu serviço Nginx encaminhe requisições para um endpoint público, configure um gateway NAT de Internet para a VPC. Consulte Configurar um gateway NAT de Internet para permitir que aplicações SAE acessem a internet.
-
Associe uma instância CLB para expor o serviço Nginx em um endereço IP público. Consulte Associar uma instância CLB a uma aplicação para gerar um endpoint público ou privado. Defina a Container Port como
80.Para permitir que os clientes acessem o serviço Nginx por meio de um nome de domínio, configure a resolução DNS para o endereço IP público.
Abra um navegador e acesse o endereço IP público para verificar a implantação.
Etapa 5 (opcional): Atualize a configuração do Nginx sem recriar a imagem
Use um item de configuração (ConfigMap) para injetar um nginx.conf atualizado no contêiner em execução. Isso evita a necessidade de recriar a imagem sempre que você alterar a configuração.
Um arquivo de configuração injetado via ConfigMap sobrescreve o arquivo original na imagem do contêiner.
-
Crie um item de configuração (ConfigMap) no namespace da aplicação Nginx. Consulte Criar um item de configuração (ConfigMap). Defina o Configuration Item Name como
nginx. Adicione uma chave chamadanginx.confe defina seu valor como o conteúdo do arquivo de configuração atualizado.
-
Injete o arquivo de configuração e reimplante a aplicação. Consulte Injetar configurações. Para Configuration Item, selecione o ConfigMap
nginx. Para Key, selecionenginx.conf. Defina o Mount Path como/etc/nginx/nginx.conf.
-
Após a reimplantação da aplicação, use o WebShell para fazer login em uma instância da aplicação e verifique se o arquivo de configuração atualizado está no local correto.
