我想知道是否可以禁用 nginx 上的多线程下载。目前,用户可以使用下载管理器通过拆分文件来下载文件,我想知道如何在我的 nginx 服务器上阻止这种情况。
答案1
使用 nginxlimit_conn
配置示例:
limit_zone one $binary_remote_addr 10m;
server {
location /download/ {
limit_conn one 1;
}
}
不仅仅是下载管理器的Range
请求会多路复用下载(这不会禁用标头);现代浏览器加载页面时也会多路复用请求。除了需要专门阻止多路复用下载的地方外,Range
在任何地方使用此配置时都要非常小心。location
答案2
您正在寻找的设置已在 NGINX 1.1.12 中添加
proxy_cache_lock 开启;proxy_cache_lock_timeout 60;
当对每个文件发出第一个请求(并复制到 proxy_temp_path)时,该文件会被锁定,如果有第二个请求,客户端不会向后端发起第二个请求,而是等待 proxy_cache_lock_timeout 以等待原始请求完成。如果原始请求在超时之前完成,则第一个请求(客户端 A)的结果将返回给客户端 B。如果超时到期,nginx 将代表客户端 B 向后端发起第二个请求
这是一个比“limit_conn one 1”更好的解决方案,后者限制对整个位置(而不是每个 URI)的单个并发请求。