Uso de la red interna de ECS para acceder a archivos OSS en Alibaba Cloud y evitar costes de tráfico externo

Los costes base de OSS (Object Storage Service) incluyen almacenamiento, tráfico y número de solicitudes. Además, servicios de procesamiento de datos (como edición de imágenes) se facturan por separado según el uso. Subir archivos no genera tráfico de pago, pero descargar desde Internet externo sí lo hace. En cambio, el tráfico interno (entre servicios del mismo centro de datos) es gratuito.

Si alguien malintencionado descargara repetidamente tus archivos, podrías enfrentarte a altos costes. La ventaja de OSS es la velocidda de subida y bajada. Por lo general, quienes contratan OSS también contratan ECS (Elastic Compute Service) con ancho de banda fijo. Desde ECS se puede acceder a OSS por la red interna, que es gratuita. Por tanto, podemos configurar ECS como proxy para exponer los archivos de OSS y así evitar costes de tráfico externo.

La desventaja es que el ancho de banda de ECS suele ser liimtado (especialmente en sitios pequeños), por lo que descargar archivos pesados (como vídeos) puede resultar lento. Para mejorar la experiencia, se puede integrar CDN más adelante. A continuación, los pasos prácticos:

1. Crear un bucket

El bucket debe estar en la misma región que el servidor ECS. Solo así la comunicación por red interna funcionará.

2. Añadir un registro CNAME para OSS en el DNS

Crea un subdominio (por ejemplo, oss.tudominio.com) que apunte al endpoint externo de OSS. Aunque en este esquema no se usará el endpoint externo directamente, este nombre se utilizará en la configuración de Nginx. No hace falta vincular el dominio al bucket.

3. Configurar Nginx como proxy inverso hacia la red interna

En la consola de OSS, dentro de la pestaña «Resumen», encontrarás dos endpoints: uno público y otro interno. Copia el interno (por ejemplo, xxx.oss-cn-zhangjiakou-internal.aliyuncs.com).

Ejemplo con HTTPS:

server {
    listen 443 ssl;
    server_name oss.tudominio.com;          # el subdominio configurado
    ssl_certificate     /ruta/cert.pem;
    ssl_certificate_key /ruta/key.pem;
    ssl_session_timeout 5m;
    ssl_ciphers         ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
        # Redirige a la dirección interna de OSS
        proxy_pass https://xxx.oss-cn-zhangjiakou-internal.aliyuncs.com;
        proxy_set_header Host $host;
    }

    access_log /var/log/nginx/oss_access.log;
}

server {
    listen 80;
    server_name www.tudominio.com oss.tudominio.com;
    return 301 https://$host$request_uri;
}

Alternativa solo HTTP:

server {
    listen 80;
    server_name oss.tudominio.com;
    location / {
        proxy_pass http://xxx.oss-cn-zhangjiakou-internal.aliyuncs.com;
        proxy_set_header Host $host;
    }
    access_log /var/log/nginx/oss_access.log;
}

Antes accedías a un archivo medianet la URL pública, por ejemplo:

https://xxx.oss-cn-zhangjiakou.aliyuncs.com/files/imagen.jpg

Ahora usas tu dominio propio:

https://oss.tudominio.com/files/imagen.jpg

Nginx recibe la petición, realiza el proxy hacia la IP interna de OSS (sin coste de tráfico) y devuelve el archivo al cliente.

Etiquetas: Alibaba Cloud OSS ECS Nginx red interna

Publicado el 7-12 20:39