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