1 votes

Nginx caching reverse proxy avec URL rewrite

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 :

Ce que je veux réaliser :

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;
    }

1voto

BarsMonster Points 634

Les suivants ont travaillé :

server {
listen 80;
listen      [::]:80;

server_name  blablabla.com;
proxy_cache one;

listen 443 ssl http2;
listen [::]:443 ssl http2;

ssl_certificate ....;
ssl_certificate_key ....;

location / {
   proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;

   proxy_pass https://f002.backblazeb2.com/file/some-directory/;##$request_uri appended automatically

   [...]
}

0voto

Tero Kilkanen Points 32968

Ce qui suit devrait fonctionner :

location / {
    proxy_pass http://f002.backblazeb2.com/test$request_uri;
    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;
}

0 votes

Cela me permet de faire des redirections illimitées vers le même serveur avec un code 301... Et cela me laisse perplexe. Il continue à ajouter des tests encore et encore avec 301 : HTTP/2.0 301 Moved Permanently location : s3.zeptobars.com/test/test/test/test/Asdfsdfsdffsfd.jpg

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X