nginx提供静态文件以响应POST请求

时间:2016-07-14 23:39:09

标签: node.js bash nginx

我将nginx设置为node.js的反向代理。对于文件上传,我要求NGINX将请求转发给node.js,但是对于文件下载,我希望NGINX完成。我可以使用GET请求让它工作。

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

这是位于/ etc / nginx / sites-available下的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 子文件夹: 档案:

1 个答案:

答案 0 :(得分: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'));