Habilitar la caché de proxy solo para contenido multimedia en Nextcloud
Hola, soy un inútil.
Mi hobby es escuchar música.
He cancelado todos los servicios de suscripción y he auto-alojado toda mi música, pero mi queja con Nextcloud es que la carga es lenta.
Entorno
Servidor doméstico Apache: Donde está alojado Nextcloud
VPS Nginx: Servidor proxy inverso y de caché
Dado que el contenido en sí accede al servidor principal cada vez, lo que contribuye a la carga del servidor, decidí revisar la caché del proxy en el lado del VPS, que también actúa como proxy inverso, para mejorar esto.
Aquí está rápidamente la sintaxis de nginx.conf.
location / {
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_pass http://192.168.10.101/;
}
location /remote.php/dav/ {
# Caching
proxy_cache zone2;
add_header X-Cache-Status $upstream_cache_status; # debug
proxy_cache_valid 200 90d;
proxy_pass http://192.168.10.101/remote.php/dav/;
proxy_ignore_headers Cache-Control Expires;
proxy_hide_header Cache-Control;
proxy_hide_header Pragma;
}
location /remote.php/webdav/ {
proxy_cache zone2;
add_header X-Cache-Status $upstream_cache_status; # debug
proxy_cache_valid 200 90d;
proxy_pass http://192.168.10.101/remote.php/webdav/;
proxy_ignore_headers Cache-Control Expires;
proxy_hide_header Cache-Control;
proxy_hide_header Pragma;
}
location /index.php/apps/music/api/file/ {
proxy_cache zone2;
add_header X-Cache-Status $upstream_cache_status; # debug
proxy_cache_valid 200 90d;
proxy_pass http://192.168.10.101/index.php/apps/music/api/file/;
proxy_ignore_headers Cache-Control Expires;
proxy_hide_header Cache-Control;
proxy_hide_header Pragma;
}
De hecho,
proxy_ignore_headers Cache-Control Expires;
proxy_hide_header Cache-Control;
No sé si tiene sentido llamar a Cache-Control dos veces aquí, pero por ahora funciona bien.

Además, para **/index.php/apps/music/api/file/**, he instalado un plugin de reproducción de música, y probablemente el plugin en sí llama a la API de Nextcloud, lo que difiere del comportamiento normal de reproducción de medios de Nextcloud, por eso lo añadí.
Si no lo tienes instalado, creo que no necesitas añadirlo.

Es bastante cómodo.
Fuente de referencia y modificaciones
Fuente de referencia: How to use caching reverse proxy with NextCloud, problems with NC setting “cache-control”
proxy_pass https://x.x.x.x/remote.php/webdav/;
Esta persona lo hizo así, pero en mi caso no funcionó bien.
Me di cuenta de que en Nextcloud hay dos formas de especificarlo: /webdav/ y /dav/, y logré que funcionara escribiendo la sintaxis para cada una.
En particular, cuando intenté cachear Nextcloud por completo al principio, el comportamiento se volvió un desastre y, como era de esperar, no funcionó (risas).
Pensé que la caché se llenaría rápidamente debido a la gran cantidad de contenido, pero es efectivo para archivos como imágenes y música.
También he logrado varias otras optimizaciones de velocidad, así que actualizaré si me apetece.