Tras migrar el nodo de Mastodon, fue necesario reconfigurar Nginx Proxy para que respondiera con un dominio propio en lugar de la URL predeterminada del dominio proporcionado por el servicio S3. En este caso, utilizaremos BackBlaze y explicaremos cómo configurar Nginx como un Proxy Caché, optimizando así la latencia y reduciendo los costos asociados.
Configuración de Nginx
Como se menciona en la documentación oficial de Mastodon, se recomienda encarecidamente configurar un proxy local en el servidor para almacenar en caché los medios solicitados desde el bucket en tu servidor. Si cada solicitud se dirigiera directamente al bucket, el medidor de tráfico podría aumentar rápidamente, generando más costes de los necesarios.
A continuación, nuestro la configuración del archivo /etc/nginx/sites-available/media.conf:
proxy_cache_path /cache levels=1:2 keys_zone=MEDIA_CACHE:10m max_size=10g inactive=36h use_temp_path=off;
server {
listen 443 ssl;
server_name [DOMAIN];
access_log /var/log/nginx/mstdn-media-access.log;
error_log /var/log/nginx/mstdn-media-error.log;
ssl_certificate /etc/letsencrypt/live/[DOMAIN]/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/[DOMAIN]/privkey.pem;
keepalive_timeout 30;
client_max_body_size 100M;
location = / {
index index.html;
}
location ~ /.well-known {
allow all;
}
location / {
try_files $uri @s3;
}
set $s3_hostname "s3.us-west-004.backblazeb2.com";
set $s3_backend 'https://$s3_hostname';
set $s3_bucket "[BUCKET]";
location @s3 {
limit_except GET {
deny all;
}
resolver 8.8.8.8 ipv6=off;
proxy_set_header Connection '';
proxy_set_header Authorization '';
proxy_hide_header Set-Cookie;
proxy_hide_header 'Access-Control-Allow-Origin';
proxy_hide_header 'Access-Control-Allow-Methods';
proxy_hide_header 'Access-Control-Allow-Headers';
proxy_hide_header x-amz-id-2;
proxy_hide_header x-amz-request-id;
proxy_hide_header x-amz-meta-server-side-encryption;
proxy_hide_header x-amz-server-side-encryption;
proxy_hide_header x-amz-bucket-region;
proxy_hide_header x-amzn-requestid;
proxy_ignore_headers Set-Cookie;
proxy_ssl_server_name on;
proxy_pass $s3_backend/$s3_bucket$uri;
proxy_intercept_errors off;
proxy_cache MEDIA_CACHE;
proxy_cache_valid 200 5d;
proxy_cache_valid 403 15m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
expires 1y;
add_header Cache-Control public;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
add_header X-Cache-Status $upstream_cache_status;
}
}
server {
if ($host = [DOMAIN]) {
return 301 https://$host$request_uri;
}
listen 80;
server_name [DOMAIN];
return 404;
}En el fichero de configuración también hay tres variables importantes que modificar:
set $s3_hostname "s3.us-west-004.backblazeb2.com";
set $s3_backend 'https://$s3_hostname';
set $s3_bucket "[BUCKET]";- s3_hostname: Aquí tendremos que poner el hostname que hemos configurado en la variable
S3_HOSTNAMEde.env.productionde Mastodon y que nos lo ofrece en la web de BackBlaze. - s3_backend: esta variable no la deberemos de modificar.
- s3_bucket: Tendremos que poner el nombre del bucket en BackBlaze.
Deberemos de guardar la configuración y si es necesario, generar el certificado SSL, para ello puedes seguir estas instrucciones:

Recargamos la configuración de Nginx:
systemctl reload nginxAquí podemos probar que funciona correctamente, si cogemos una URL completa de algún avatar o header y cambiamos la URL de BackBlaze por la del proxy que hemos configurado.
Finalmente, para activar el Proxy en la configuración de Mastodon, tendremos que editar .env.production y añadir la variable S3_ALIAS_HOST. A continuación la configuración completa para el S3 (ofuscando información sensible):
# File storage (optional)
# -----------------------
S3_ENABLED=true
S3_PROTOCOL=https
S3_ENDPOINT=https://s3.us-west-004.backblazeb2.com
S3_HOSTNAME=s3.us-west-004.backblazeb2.com
S3_ALIAS_HOST=[dominio]
S3_BUCKET=[bucket]
AWS_ACCESS_KEY_ID=*****************
AWS_SECRET_ACCESS_KEY=*****************
S3_OPEN_TIMEOUT=15
S3_READ_TIMEOUT=15
S3_DISABLE_CHECKSUM_MODE=trueTras este cambio, tendremos que reiniciar los servicios de Mastodon:
systemctl restart mastodon-*.serviceY con esto, deberemos de revisar que las imágenes de nuestra instancia carga correctamente con el subdominio que hemos configurado.
Más sobre ./voidNull
- 📖 Aprende todos sobre los comandos de GNU/Linux en nuestro Diccionario "De la A a la Z: Los comandos de GNU/Linux"
- 💪 ¡Forma parte de la Comunidad de ./voidNull!
- 🤖 Disfruta de todos nuestros Cursos sobre Ansible, Proxmox, Home Assistant entre otros.
- 📩 Mantente actualizado con lo último en GNU/Linux y Software Libre. Recibe nuestra Newsletter mensual.

Comentarios