Um proxy reverso Nginx em uma instância ECS permite o encaminhamento de URLs HTTPS e o mapeamento de portas, recursos que o Alibaba Cloud DNS não oferece nativamente. Para cenários padrão, prefira adicionar um registro DNS.
Casos de uso
O Alibaba Cloud DNS apresenta as seguintes limitações:
Restrição de protocolo: O serviço DNS não gerencia certificados SSL; portanto, não há suporte para encaminhamento de URL de
HTTPSparaHTTPS.Limitação de porta: O DNS resolve nomes de domínio para endereços IP, não para portas. Se o backend operar em uma porta não padrão (como 3000), os usuários precisarão adicionar a porta à URL:
http://www.example.com:3000.
Arquitetura da solução
Caminho original: O cliente resolve o nome de domínio via DNS e conecta-se diretamente ao IP do serviço de backend.
-
Novo caminho: Com um proxy reverso Nginx, as requisições seguem este fluxo:
O cliente resolve o nome de domínio pelo DNS, que retorna o IP público do servidor Nginx.
O cliente envia uma requisição HTTP ou HTTPS para esse endereço IP público.
O Nginx compara o cabeçalho
Hostcom as regras de encaminhamento e encaminha a requisição ao serviço de backend apropriado.O backend processa a requisição e devolve a resposta ao cliente por meio do Nginx.
Procedimento
Este tutorial utiliza uma instância ECS com Alibaba Cloud Linux 3. Se o Nginx já estiver implantado, acesse a Etapa 3: Configure o Nginx para diferentes cenários.
Etapa 1: Preparar o ambiente ECS
-
Crie uma instância ECS. Consulte Criar uma instância usando o assistente.
Sistema operacional: Selecione Alibaba Cloud Linux 3.
Rede: Atribua um endereço IP público à instância.
Adicione uma regra de entrada no grupo de segurança para permitir TCP nas portas
22,80e443.
Etapa 2: Instale e inicie o Nginx
Conecte-se à instância ECS usando um cliente SSH.
-
Execute o comando abaixo para instalar o Nginx.
sudo yum install -y nginx -
Inicie o Nginx e configure-o para iniciar automaticamente na inicialização do sistema.
sudo systemctl start nginx sudo systemctl enable nginx -
Verifique se o Nginx está em execução.
sudo systemctl status nginxSe o status for
active (running), o serviço foi iniciado com sucesso. -
Recarregue a configuração do Nginx sem interromper as conexões ativas.
sudo systemctl reload nginx
Etapa 3: Configure o Nginx para diferentes cenários
O arquivo principal de configuração é o /etc/nginx/nginx.conf. Recomendamos criar um arquivo .conf separado para cada site no diretório /etc/nginx/conf.d/.
Cenário 1: Encaminhamento de URL HTTPS
O Alibaba Cloud DNS não suporta encaminhamento de HTTPS para HTTPS porque não permite o upload de certificados SSL. Com o Nginx, você pode instalar seu próprio certificado SSL e definir regras personalizadas de encaminhamento.
-
Redirecionamento de URL (encaminhamento explícito)
Redireciona permanentemente
https://example.comparahttps://aliyun.com. A barra de endereços do navegador é atualizada para a nova URL. Adicione o conteúdo abaixo ao arquivo/etc/nginx/conf.d/redirect.conf:server { listen 443 ssl http2; server_name example.com; # Configure the SSL certificate and private key for the source domain name ssl_certificate /etc/nginx/certs/example.com.fullchain.pem; ssl_certificate_key /etc/nginx/certs/example.com.key; location / { return 301 https://aliyun.com$request_uri; } } -
Proxy reverso (encaminhamento implícito)
Encaminha requisições de
https://example.comparahttps://aliyun.comvia proxy. A barra de endereços do navegador permanece inalterada enquanto o conteúdo é servido pelo backend. Adicione o seguinte ao arquivo/etc/nginx/conf.d/proxy.conf:# Proxy requests for example.com to aliyun.com server { listen 443 ssl http2; server_name example.com; # Configure the SSL certificate and private key for the source domain name ssl_certificate /etc/nginx/certs/example.com.fullchain.pem; ssl_certificate_key /etc/nginx/certs/example.com.key; location / { # Forward the request to the target server proxy_pass http://aliyun.com; # Key configuration: Set the Host request header to the target service's domain name to ensure the backend can process the request correctly. proxy_set_header Host "aliyun.com"; # Pass the client's real IP address for backend logging and analysis proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
Cenário 2: Mapear domínio para uma porta específica
Direciona o tráfego da porta 80 para uma aplicação backend em uma porta não padrão, como 3000, eliminando a necessidade de especificar a porta na URL. Adicione o trecho abaixo ao arquivo /etc/nginx/conf.d/port_mapping.conf:
# Access the service on local port 3000 through example.com
server {
listen 80;
server_name example.com;
location / {
# Forward requests to port 3000 on the local host
proxy_pass http://127.0.0.1:3000;
# Pass the original Host request header so the backend application can identify the domain name being accessed
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Etapa 4: Configure a resolução DNS
Após configurar o Nginx, adicione registros DNS para os domínios atendidos por ele.
Obtenha um nome de domínio. Caso ainda não possua um, registre-o em Alibaba Cloud Domain Names. Se o site estiver hospedado na China continental, conclua primeiro o ICP filing.
-
Obtenha o endereço IP público da instância ECS onde o Nginx está em execução.
Na página Instances do console ECS, localize sua instância e verifique a coluna IP Address.
Acesse o console Alibaba Cloud DNS - Public Zone e encontre o nome de domínio desejado.
-
Adicione ou modifique um registro DNS.
Se nenhum registro DNS estiver configurado, adicione um registro DNS. Crie um registro A para cada nome de domínio configurado no Nginx, como
example.com, apontando para o endereço IP público da sua instância ECS.-
Caso já exista um registro DNS, atualize seu valor para o IP público do servidor Nginx. As alterações de DNS podem levar de 5 a 10 minutos para propagar.
No painel Add Record, defina o record type como A -- Maps a domain name to an IPv4 address, o host record como
demo, a Resolution Line como Default, o TTL como 10 minutes e o record value como o IP público do servidor Nginx.
Custos e riscos
Custo: O principal custo refere-se à instância ECS. Os preços variam conforme as especificações da instância, a região e o método de faturamento. O Nginx é gratuito e open source.
Riscos e manutenção: Você é responsável pela operação do proxy reverso, incluindo a aplicação de patches de segurança, o monitoramento da integridade do serviço e o backup das configurações. Uma configuração inadequada ou a falta de manutenção pode resultar em interrupções ou vulnerabilidades de segurança.
Recomendação para produção: Reforce as configurações de segurança do Nginx e implemente soluções de monitoramento e análise de logs.