Configurar domínio personalizado para buckets do Storin com NGINX
Visão geral
O Storin, serviço de Object Storage da SaveinCloud, disponibiliza acesso aos objetos por meio de endpoints compatíveis com S3, como no exemplo abaixo:
https://sp1-s3.saveincloud.io
Em muitos cenários, no entanto, é desejável publicar o conteúdo do bucket utilizando um domínio personalizado, por exemplo:
https://cdn.seudominio.com
Essa abordagem é amplamente utilizada em provedores de cloud pública e é recomendada para:
- distribuição de arquivos estáticos
- entrega de conteúdo público
- padronização de URLs
- utilização de domínio próprio (white-label)
- integração com aplicações web
Ao utilizar um proxy reverso com NGINX, você pode expor o conteúdo do bucket por meio do seu domínio, mantendo o endpoint S3 do Storin como origem.
O endpoint S3 pode variar de acordo com a região onde o bucket foi criado. Neste exemplo, utilizamos a região SP1.
Sempre valide o endpoint correspondente ao seu ambiente antes de publicar em produção. Alterações de endpoint podem impactar o funcionamento do domínio personalizado.
É de extrema importância ficar atento a comunicados de alterações do endpoint de S3 da região, pois isso impactará diretamente o acesso ao Storin
Arquitetura de referência
Cliente → Domínio personalizado → NGINX → Bucket no Storin
Pré-requisitos
Antes de iniciar, verifique se você possui:
- um bucket criado no Storin
- objetos disponíveis para teste
- servidor com NGINX instalado
- domínio ou subdomínio configurado
- certificado TLS válido para HTTPS
1. Configurar o DNS
Crie um subdomínio dedicado, por exemplo:
cdn.seudominio.com
Configure os registros DNS:
- Tipo A: apontando para o IPv4 do proxy
- Tipo AAAA: apontando para o IPv6 do proxy (opcional)
2. Configurar o NGINX para acesso HTTP
Use a configuração abaixo para publicar o bucket por meio do seu domínio:
server {
listen 80;
listen [::]:80;
server_name cdn.seudominio.com;
location / {
proxy_ssl_server_name on;
proxy_pass https://sp1-s3.saveincloud.io;
proxy_set_header Host sp1-s3.saveincloud.io;
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;
proxy_set_header X-Forwarded-Host $host;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
3. Habilitar HTTPS
Para ambientes de produção, é recomendado redirecionar HTTP para HTTPS e utilizar um certificado TLS válido no proxy reverso.
Redirecionamento HTTP para HTTPS
server {
listen 80;
listen [::]:80;
server_name cdn.seudominio.com;
return 301 https://$host$request_uri;
}
Configuração HTTPS
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name cdn.seudominio.com.br;
ssl_certificate /var/lib/jelastic/SSL/jelastic.chain;
ssl_certificate_key /var/lib/jelastic/SSL/jelastic.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
proxy_ssl_server_name on;
proxy_pass https://sp1-s3.saveincloud.io;
proxy_set_header Host sp1-s3.saveincloud.io;
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;
proxy_set_header X-Forwarded-Host $host;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
4. Acessar os objetos
Após concluir a configuração, os objetos poderão ser acessados utilizando o domínio personalizado:
https://cdn.seudominio.com/arquivo-publico.txt
É importante atentar-se caso possua a configuração de CORS do bucket, para que o bucket não bloqueie os acessos ao objeto
Boas práticas
- utilize HTTPS sempre que possível
- use alta disponibilidade nos nós de proxy para garantir que não haja interrupções no seu serviço
- mantenha objetos públicos apenas quando necessário
- valide o endpoint correto da região do bucket
- revise permissões e políticas do bucket antes da publicação
- considere o uso de cache no proxy ou em uma CDN externa para melhorar a performance e diminuir o volume de tráfego de saída
Solução de problemas
403 Forbidden
Esse erro normalmente indica uma das situações abaixo:
- o objeto não está público
- a política do bucket restringe o acesso
- o caminho configurado no
proxy_passestá incorreto
Conteúdo não encontrado
Verifique:
- se o nome do bucket está correto
- se o objeto realmente existe
- se a URL acessada corresponde ao caminho esperado
Suporte
Em caso de dúvidas ou problemas na configuração, entre em contato com o suporte da SaveinCloud.