Je sers des fichiers statiques volumineux à partir d'un serveur de stockage dorsal dont les disques tournent lentement. Ce serveur est caché derrière un proxy inverse nginx rapide avec un cache local sur SSD. Il fonctionne parfaitement et rapidement.
Maintenant je veux changer de backend de stockage, et par conséquent je ne peux pas maintenir le même emplacement des fichiers stockés sur un backend. Au lieu de la racine du serveur, ils devront être servis à partir d'un sous-répertoire. Comment puis-je modifier la configuration du proxy inverse de nginx de manière à ce qu'il transmette toutes les requêtes non mises en cache vers le backend à un sous-répertoire, et que les clients ne soient pas conscients que quelque chose a changé ?
Je ne peux rien faire sur le serveur de stockage pour maintenir l'ancien schéma d'URL, je dois donc le faire sur un frontend. Les en-têtes 301/302 ne doivent être transmis nulle part.
Donc, actuellement, j'ai :
- Voir le client : https://frontend.com/file.txt
- Nginx récupère les fichiers non mis en cache à partir de : https://backend.com/file.txt
Ce que je veux réaliser :
- Voir le client : https://frontend.com/file.txt (aucun changement observable pour un client)
- Nginx récupère les fichiers non mis en cache à partir de : https://backend.com/directory/file.txt
J'ai essayé plusieurs dizaines de configurations, sans succès. Lorsque j'essaie cette configuration, au lieu d'extraire silencieusement les données de différentes URL, je me retrouve dans une boucle infinie d'ajout de tests via une expression rationnelle.
location / {
rewrite /(.*) /test/$1 break;
proxy_pass http://f002.backblazeb2.com;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
proxy_cache_revalidate on;
proxy_read_timeout 2;
proxy_connect_timeout 3;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_cache_valid 200 302 60s;
proxy_cache_valid 404 1m;
limit_conn perip 23;
limit_req zone=dynamic burst=60;
expires 24h;
}