【问题标题】:Setting content dispose based on url / nginx根据 url / nginx 设置内容 dispose
【发布时间】:2012-11-17 18:00:56
【问题描述】:

让 nginx 使用像 http://foobar.tld/<random_dir>/<file_md5sum_as_filename> 这样的 url 提供静态文件,如果我在 url 的末尾指定 ?f="filename.filetype",我想 - nginx 在末尾解析该查询字符串(如果指定)并准备新的内容处理指定的匹配参数,并且没有任何动态后端,这几乎是不可能的。

或实例http://foobar.tld/<random_dir>/<file_md5sum_as_filename>?f="foobar.pdf"

这样的事情可以用 nginx/lua 模块完成吗?有没有人有任何有用的例子或做过类似的事情?

【问题讨论】:

  • 让我重新表述你的问题,以确保我完全理解它。您希望用户下载一个名为 foobar.pdf 的文件或它设置为 f 参数的任何文件,从名为 <nginx_root>/random_dir/md5sum 的本地文件提供服务?
  • 在这两种情况下,您都从<nginx_root>/random_dir/md5sum 获取内容,但在第二种情况下,您设置参数?f= nginx 设置内容处置以及从参数值指定文件名。

标签: regex nginx lua content-disposition


【解决方案1】:

纯 Nginx 配置

location / {
  if ($arg_f) {
    add_header Content-Disposition "attachment; filename=$arg_f";
  }
}

【讨论】:

  • 是的,这是普通的 Nginx 配置
【解决方案2】:

使用 nginx-lua 确实可以做到这一点;特别是header_filter_by_lua 指令。

类似下面的东西应该可以解决问题:

location / {
  header_filter_by_lua '
    local args = ngx.req.get_uri_args()
    if not args.f then return end

    ngx.header["Content-Disposition"] = "attachment; filename=" .. args.f
  ';
}

【讨论】:

  • 耶!这就是我一直在寻找的。 10x
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 2013-12-03
相关资源
最近更新 更多