如何将URL参数从Nginx转发到我的服务器的API?

我试图创build“用户唯一”部分,我设法得到这一点,但我卡住了。 我怎样才能发送请求的url到我的api?

这是我的Express.js API路由,非常简单。 用户访问链接(直接链接,页面上embedded的链接/video等),并尝试查看它。 我将他的请求redirect到我的/ api,并检查他是否被允许看到它。 如果我删除:文件部分,并使用200和403进行testing,但是我需要能够dynamic检查它们。

下面更清楚的解释。 “/”是通用的URL,但是只有当访问者试图访问文件时,/ api才会被触发,而不pipe文件的位置/ URL是什么。 所以我想要做的是,“好吧,我是Nginx,我发现有些访问者试图访问某个文件,我们把这个文件的名字传给Express.js服务器,让它检查是否允许这个用户看到这个图片如果是200,我会允许的,如果是403,那么不。

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

但我不知道如何将请求的url参数从Nginx传递到我的Express.js应用程序(例如, http:// localhost / api /:file format中的image.jpg,video.mp4),以便我可以检查用户的权限数据库并为每个文件返回一个dynamic响应。

这是我目前的Nginxconfiguration。

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

尝试:

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

这应该重写文件请求的APIpath。 然后你可以决定是否让用户通过。