基于 URL / Nginx 的设置内容处理方式

让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模块类似的东西?是否有任何有用的示例或类似的操作?

点赞
用户1516484
用户1516484

使用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
  ';
}
2012-11-30 08:13:03
用户118613
用户118613

纯净的 Nginx 配置

location / {
  if ($arg_f) {
    add_header Content-Disposition "attachment; filename=$arg_f";
  }
}
2012-11-30 08:43:25