【问题标题】:nginx hook before upload上传前的 nginx 钩子
【发布时间】:2018-05-30 13:47:13
【问题描述】:

我创建了一个内部网 http 站点,用户可以在其中上传文件,我创建了一个类似这样的位置:

location /upload/ {
    limit_except POST          { deny all; }
    client_body_temp_path      /home/nginx/tmp;
    client_body_in_file_only   on;
    client_body_buffer_size    1M;
    client_max_body_size       10G;
    proxy_set_header           X-upload /upload/;
    proxy_set_header           X-File-Name $request_body_file;
    proxy_set_body             $request_body_file;
    proxy_redirect             off;
    proxy_pass_request_headers on;
    proxy_pass                 http://localhost:8080/;
}

按照官方文档中的建议非常简单。上传完成后,proxy_pass 指令调用自定义 URI 并对新创建的临时文件进行文件系统操作。

curl --request POST --data-binary "@myfile.img" http://myhost/upload/

这是我的问题:我需要某种自定义钩子/操作来告诉我何时开始上传,nginx 可以在 启动 http 流之前调用某些东西,有没有办法实现这一点?我的意思是,在上传大文件之前,我需要调用一个自定义 url(类似于proxy_pass)来通知服务器有关此上传并执行某些操作。

有没有办法实现它?我尝试过使用 echo-nginx 模块,但这些 http POST(二进制形式-urlencoded)没有成功。我不想使用外部脚本来处理上传并将这些操作保留在 nginx 中(性能更高)

提前致谢。

【问题讨论】:

    标签: nginx file-upload hook


    【解决方案1】:

    自我回复。 我发现这个指令是为了解决我自己的请求。

    auth_request <something>

    所以我可以这样做:

    location /upload/ {
        ...
        # Pre auth
        auth_request /somethingElse/;
        ...
    }
    
    # Newly added section
    location /somethingElse/ {
        ...
        proxy_pass ...;
    }
    

    这似乎很好并且有效,对于上传以及一般身份验证或基本预检查很有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多