1 votes

Comment transférer les paramètres url de Nginx vers l'API de mon serveur ?

J'essaie de créer une section "réservée aux utilisateurs" et j'ai réussi à aller jusqu'ici, mais je suis bloqué. Comment puis-je envoyer l'url demandée à mon api ?

Voici ma route API Express.js, très simple. L'utilisateur visite un lien (lien direct, liens/vidéos intégrés dans une page, etc) et essaie de le visualiser. Je redirige sa requête vers mon /api et vérifie s'il a le droit de le voir ou non. Les choses ci-dessous fonctionnent si j'enlève la partie :file et la teste avec 200 et 403, mais j'ai besoin de pouvoir les vérifier dynamiquement.

Une explication plus claire est donnée ci-dessous. "/" est l'URL générique, mais /api ne doit être déclenché que lorsqu'un visiteur tente d'accéder à un fichier, quel que soit l'emplacement / URL du fichier. Donc ce que je veux faire, c'est "ok, je suis Nginx et je vois qu'un visiteur essaie d'accéder à un fichier. Passons le nom de ce fichier au serveur Express.js et laissons-le vérifier si cet utilisateur est autorisé à voir cette image ou non. Si la réponse est 200, je l'autorise. Si c'est 403, alors non."

app.get('/api/:file', function(req,res,next) {
  // This part decides what you're allowed to see.
  // Redis database query. Returns 0 or 1. 
  // 1 returns 200, 0 returns 403.
  res.sendStatus(200); // It works, so this part is done.
});

Mais je ne sais pas comment transmettre le paramètre url demandé de Nginx à mon application Express.js (par exemple, image.jpg, vidéo.mp4 dans l'application Express.js). http://localhost/api/:file ) afin que je puisse vérifier les autorisations de l'utilisateur dans la base de données et renvoyer une réponse dynamique pour chaque fichier.

Voici ma configuration actuelle de Nginx.

upstream localhost {
  ip_hash;
  server 127.0.0.1:8000;
  server 127.0.0.1:8001;
  server 127.0.0.1:8002;
  server 127.0.0.1:8003;
}

server {
  listen 80;
  server_name localhost;

  location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$ {
    root images;
    auth_request /api;
  }

  location / {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_pass http://localhost;
  }
}

1voto

tputkonen Points 1799

Essayez :

location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$ {
    rewrite ^ /api/$1?$args permanent;
}

Cela devrait réécrire la demande de fichier vers le chemin de l'api. Ensuite, l'api peut décider de laisser l'utilisateur passer ou non.

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