Configurar dominio personalizado para buckets de Storin con NGINX
Visión general
Storin, servicio de Object Storage de SaveinCloud, ofrece acceso a los objetos mediante endpoints compatibles con S3, como en el siguiente ejemplo:
https://sp1-s3.saveincloud.io
En muchos escenarios, sin embargo, es deseable publicar el contenido del bucket utilizando un dominio personalizado, por ejemplo:
https://cdn.seudominio.com
Este enfoque es ampliamente utilizado en proveedores de nube pública y se recomienda para:
- distribución de archivos estáticos
- entrega de contenido público
- estandarización de URLs
- uso de dominio propio (white-label)
- integración con aplicaciones web
Al utilizar un proxy inverso con NGINX, puedes exponer el contenido del bucket mediante tu dominio, manteniendo el endpoint S3 de Storin como origen.
El endpoint S3 puede variar según la región donde se creó el bucket. En este ejemplo, utilizamos la región SP1.
Siempre valida el endpoint correspondiente a tu entorno antes de publicar en producción. Cambios en el endpoint pueden afectar el funcionamiento del dominio personalizado.
Es de suma importancia estar atento a comunicados sobre cambios en el endpoint S3 de la región, ya que esto impactará directamente el acceso a Storin
Arquitectura de referencia
Cliente → Domínio personalizado → NGINX → Bucket no Storin
Requisitos previos
Antes de comenzar, verifica que tienes:
- un bucket creado en Storin
- objetos disponibles para prueba
- servidor con NGINX instalado
- dominio o subdominio configurado
- certificado TLS válido para HTTPS
1. Configurar el DNS
Crea un subdominio dedicado, por ejemplo:
cdn.seudominio.com
Configura los registros DNS:
- Tipo A: apuntando al IPv4 del proxy
- Tipo AAAA: apuntando al IPv6 del proxy (opcional)
2. Configurar NGINX para acceso HTTP
Usa la configuración siguiente para publicar el bucket mediante tu dominio:
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 entornos de producción, se recomienda redirigir HTTP a HTTPS y usar un certificado TLS válido en el proxy inverso.
Redirección HTTP a HTTPS
server {
listen 80;
listen [::]:80;
server_name cdn.seudominio.com;
return 301 https://$host$request_uri;
}
Configuración 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. Acceder a los objetos
Después de completar la configuración, los objetos podrán ser accedidos usando el dominio personalizado:
https://cdn.seudominio.com/arquivo-publico.txt
Es importante prestar atención si tienes configurado CORS en el bucket, para que el bucket no bloquee los accesos al objeto
Buenas prácticas
- utiliza HTTPS siempre que sea posible
- usa alta disponibilidad en los nodos de proxy para garantizar que no haya interrupciones en tu servicio
- mantiene objetos públicos solo cuando sea necesario
- valida el endpoint correcto de la región del bucket
- revisa permisos y políticas del bucket antes de la publicación
- considera el uso de caché en el proxy o en una CDN externa para mejorar el rendimiento y reducir el volumen de tráfico saliente
Solución de problemas
403 Forbidden
Este error normalmente indica una de las siguientes situaciones:
- el objeto no es público
- la política del bucket restringe el acceso
- la ruta configurada en
proxy_passes incorrecta
Contenido no encontrado
Verifica:
- que el nombre del bucket sea correcto
- que el objeto realmente exista
- que la URL accedida corresponda a la ruta esperada
Soporte
En caso de dudas o problemas con la configuración, contacta con el soporte de SaveinCloud.