2016-07-14 151 views
-1

我将nginx设置为node.js的反向代理。对于文件上传,我要求NGINX将请求转发到node.js,但对于文件下载,我希望由NGINX完成。我可以使用GET请求来处理它。nginx提供静态文件以响应POST请求

但我真的想通过POST请求验证会话,然后提供文件。请告知如何实现这一点。

这里是我的 “默认” 的配置为NGINX位于下文件/ etc/nginx的/网站可用:

server { 
    listen 3000; 
    server_name X.Y.Z; 
    root /mnt/Files/; 
    error_log  /home/nginx/logs/error.log debug; 
    access_log /home/nginx/logs/access.log; 
    client_max_body_size 20M; 

    location /download/* { 
     root /mnt/Files/; 
     access_log on; 
     autoindex on; 

     set $var1 = $1 
     try_files $uri $uri/ =404; 

    } 

    location /upload { 
     proxy_pass http://127.0.0.1:3001; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection 'upgrade'; 
     proxy_set_header Host $host; 
     proxy_cache_bypass $http_upgrade; 
    } 

} 

实例的形式,我将提交将具有以下字段:

用户名:USER1 密码:pass1 子文件夹: 文件:

+0

https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/ – zerkms

+0

谢谢!这些例子都会派上用场。 – Pankaj

+0

为什么我会得到-1? – Pankaj

回答

1

您不能在nginx配置文件中放置如此​​多的逻辑。

首先你需要检索邮政参数。

然后你需要验证一些数据库,如mysql或mongoDB。

然后返回401(未授权)。

我不认为nginx可以做到这一切。

我建议做所有这些作为快速静态功能的一部分。

var express = require('express'); 

var app = express(); 

var auth = express.basicAuth(function(user,password) { 
    return 'john' === user && '1234' === password; 
}); 

app.use('/media', auth);//should be before static 
app.use('/media', express.static(__dirname + '/media')); 
+0

谢谢!我也这么认为,但希望社区权衡。 – Pankaj