2012-11-29 85 views
3

讓nginx提供類似http://foobar.tld/<random_dir>/<file_md5sum_as_filename>的URL的靜態文件,我想如果我指定在url的末尾?f="filename.filetype" - nginx在最後解析查詢字符串(如果指定)並準備新的內容處理符合指定的參數,並且沒有任何動態後端,這是不可能的。根據url/nginx設置內容處置

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

能像這樣用的nginx/LUA模塊來完成?有沒有人有任何有用的例子或做過類似的事情?

+0

讓我改一下你的問題,以確保我很好理解它。你希望用戶下載一個名爲'foobar.pdf'的文件,或者是下載一個名爲'/random_dir/md5sum'的本地文件作爲'f'參數的文件? –

+0

在這兩種情況下,您都會從'/random_dir/md5sum'獲得內容,但在第二種情況下,您可以通過設置參數'?f ='nginx設置內容處置以及從參數值指定文件名稱。 – yekwol

回答

3

這確實可能與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 
    '; 
} 
+0

耶!這就是我一直在尋找的。 10x – yekwol

6

純Nginx的配置

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

所以我可以跳過LUA部分? – yekwol

+0

是的,這是香草Nginx配置 –

+0

確認,這個也適用。謝謝 – yekwol