You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
3.8 KiB
100 lines
3.8 KiB
|
1 month ago
|
# Nginx por delante del servidor de Node.
|
||
|
|
#
|
||
|
|
# Copiar a /etc/nginx/sites-available/senzapaura, sustituir DOMINIO, y luego:
|
||
|
|
#
|
||
|
|
# sudo ln -s /etc/nginx/sites-available/senzapaura /etc/nginx/sites-enabled/
|
||
|
|
# sudo nginx -t # comprueba la sintaxis antes de recargar
|
||
|
|
# sudo systemctl reload nginx
|
||
|
|
#
|
||
|
|
# El certificado lo pone certbot, que reescribe este archivo al ejecutarse:
|
||
|
|
#
|
||
|
|
# sudo certbot --nginx -d DOMINIO -d www.DOMINIO
|
||
|
|
#
|
||
|
|
# Sin HTTPS no se puede publicar: aquí se escriben correos y se paga.
|
||
|
|
|
||
|
|
# Todo lo que llegue sin cifrar se manda a la versión segura. Certbot añade
|
||
|
|
# este bloque por su cuenta, pero se deja escrito para que no dependa de ello.
|
||
|
|
server {
|
||
|
|
listen 80;
|
||
|
|
listen [::]:80;
|
||
|
|
server_name DOMINIO www.DOMINIO;
|
||
|
|
return 301 https://$host$request_uri;
|
||
|
|
}
|
||
|
|
|
||
|
|
server {
|
||
|
|
listen 443 ssl;
|
||
|
|
listen [::]:443 ssl;
|
||
|
|
http2 on;
|
||
|
|
server_name DOMINIO www.DOMINIO;
|
||
|
|
|
||
|
|
# certbot rellena estas dos.
|
||
|
|
# ssl_certificate /etc/letsencrypt/live/DOMINIO/fullchain.pem;
|
||
|
|
# ssl_certificate_key /etc/letsencrypt/live/DOMINIO/privkey.pem;
|
||
|
|
|
||
|
|
# Los mp3 completos pesan varios megas; los fragmentos, cientos de kilos.
|
||
|
|
client_max_body_size 20m;
|
||
|
|
|
||
|
|
gzip on;
|
||
|
|
gzip_vary on;
|
||
|
|
gzip_min_length 1024;
|
||
|
|
gzip_types
|
||
|
|
text/plain text/css application/javascript application/json
|
||
|
|
image/svg+xml application/xml application/rss+xml;
|
||
|
|
|
||
|
|
# -----------------------------------------------------------------------
|
||
|
|
# Estáticos con huella en el nombre
|
||
|
|
#
|
||
|
|
# Todo lo de `_app/immutable` lleva el hash del contenido en el nombre: si
|
||
|
|
# cambia el archivo, cambia la URL. Por eso se puede cachear para siempre y
|
||
|
|
# servirlo desde nginx sin molestar a Node, que es lo que hace que abrir la
|
||
|
|
# web no despierte al proceso para devolver un CSS.
|
||
|
|
# -----------------------------------------------------------------------
|
||
|
|
location /_app/immutable/ {
|
||
|
|
root /var/www/senzapaura/build/client;
|
||
|
|
access_log off;
|
||
|
|
expires 1y;
|
||
|
|
add_header Cache-Control "public, immutable";
|
||
|
|
try_files $uri =404;
|
||
|
|
}
|
||
|
|
|
||
|
|
# Imágenes, fuentes, vídeo y los fragmentos de muestra. No llevan huella, así
|
||
|
|
# que se cachean un día: lo justo para no pedirlos en cada visita sin que un
|
||
|
|
# cambio tarde una semana en verse.
|
||
|
|
location ~* ^/(images|background|video|muestras|admin)/ {
|
||
|
|
root /var/www/senzapaura/build/client;
|
||
|
|
access_log off;
|
||
|
|
expires 1d;
|
||
|
|
add_header Cache-Control "public";
|
||
|
|
try_files $uri $uri/ =404;
|
||
|
|
}
|
||
|
|
|
||
|
|
# -----------------------------------------------------------------------
|
||
|
|
# Todo lo demás, a Node
|
||
|
|
#
|
||
|
|
# Incluidas /descargas/… —que comprueban la compra antes de entregar el
|
||
|
|
# archivo— y el webhook de Stripe. Ojo: las descargas NO se pueden servir
|
||
|
|
# desde nginx; el audio completo vive fuera de `build/` justamente para que
|
||
|
|
# no haya forma de pedirlo por URL sin haberlo comprado.
|
||
|
|
# -----------------------------------------------------------------------
|
||
|
|
location / {
|
||
|
|
proxy_pass http://127.0.0.1:3000;
|
||
|
|
proxy_http_version 1.1;
|
||
|
|
|
||
|
|
proxy_set_header Host $host;
|
||
|
|
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;
|
||
|
|
|
||
|
|
# El limitador de envíos cuenta por IP. Sin las cabeceras de arriba,
|
||
|
|
# todas las peticiones parecerían venir de 127.0.0.1 y el límite global
|
||
|
|
# se dispararía con una sola persona insistiendo.
|
||
|
|
|
||
|
|
# Un mp3 completo tarda en salir por una conexión lenta.
|
||
|
|
proxy_read_timeout 300s;
|
||
|
|
# Sin buffer: la descarga empieza a fluir en cuanto Node la manda, en
|
||
|
|
# vez de esperar a que nginx tenga el archivo entero.
|
||
|
|
proxy_buffering off;
|
||
|
|
}
|
||
|
|
}
|