有人能告诉我为什么nginx secure_link模块过期不起作用吗?

deyfvvtc  于 2023-01-25  发布在  Nginx
关注(0)|答案(1)|浏览(141)

我有一个使用nginx conf文件中的secure_link模块的块,包含在这个pastebin中:https://pastebin.com/dyZmNsRe

location ^~ /file/ {
                root /var/www/html;
                secure_link $arg_md5,$arg_expires;
                secure_link_md5 "$secure_link_expires$remote_addr$uri 6v#Q6zu3BEk4Y27Rkig7dKjW@Vd6YHV";
                if ($secure_link = "") { return 403; }
                if ($secure_link = "0") { return 410; }
                add_header Content-Disposition "attachment; filename=$arg_name";
        }

下面这个python脚本用来生成pastebin中的url:https://pastebin.com/DdNkhmBs

import base64, sys, hashlib
import time
 
# Set the expiration time (in seconds)
expires = int(time.time()) + 30
 
# Set the IP address of the client
ip_address = "192.168.60.10"
 
# Set the file name
file_name = "/file/test.mp3"
 
 
text = str(expires) + ip_address + file_name + " 6v#Q6zu3BEk4Y27Rkig7dKjW@Vd6YHV"
try:
    text = bytes(text, 'utf-8')
except:
    pass
auth = hashlib.md5(text).digest()
query = base64.b64encode(auth)
q = str(query).replace("+", "-").replace("/", "_").replace("=", "")
q = q.replace("b'", "").replace("'", "")
print(f"http://192.168.250.83{file_name}?md5={q}&expires={expires}")

python脚本可以工作,我可以生成网址,当输入到浏览器中时,允许我下载test.mp3文件。然而,我的印象是,链接应该在过期时间过后过期(在本例中,在网址生成后30秒)。这不是我所看到的。我生成的网址在过期一个多小时后仍然有效。
有人能告诉我我错过了什么吗?
谢谢!
我做了一些研究,并尝试添加过期$arg_expires;到nginx. conf块,没有运气。我也可以改变expires查询参数或md5,并得到一个403,正如我所期望的,但url仍然设法工作很长时间后,他们应该。

yqkkidmi

yqkkidmi1#

所以,这个问题是由于浏览器缓存,而不是任何与nginx或Python.我尝试了一个“工作”过期链接在另一个浏览器,它失败了,因为它应该.所以,真实的的修复是添加以下到nginx块:

add_header Last-Modified $arg_expires;
add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
if_modified_since off;
expires $arg_expires;
etag off;

相关问题