【问题标题】:nginx serve static file in response to POST requestnginx 为响应 POST 请求提供静态文件
【发布时间】:2016-07-15 13:36:05
【问题描述】:

我将 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 子文件夹: 文件:

【问题讨论】:

标签: node.js bash nginx


【解决方案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'));

【讨论】:

  • 谢谢!我也这么认为,但希望社区参与进来。
猜你喜欢
  • 2021-06-15
  • 2016-01-28
  • 2016-12-23
  • 2018-10-23
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 2023-04-07
  • 2015-08-29
相关资源
最近更新 更多