nginx静态资源下载,实现下载点击量、下载完成量统计

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tomnic_ylwang/article/details/47343161 ...
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tomnic_ylwang/article/details/47343161
先认识几个nignx内置变量:
$request_uri: 则是请求的整个字符串,包含了 后面的query_string的;
$remote_addr:则是发送下载请求的主机ip;
$body_bytes_sent :传送页面的字节数

认识几个nignx指令:
post_action :当主请求完成后,进行的请求。
internal:指令指定某个location只能被“内部的”请求调用,外部的调用请求会返回”Not found” (404)
“内部的”是指下列类型:
proxy_pass:转发请求

ngnix配置:
location /predownload/{
                rewrite ^/predownload/(.*)$  /download/$1 redirect;
                post_action @before;
       }

      location /download/ {
             alias /data/storage/android/;
             default_type application/octet-stream;
             autoindex_exact_size off;
             autoindex_localtime on;
             post_action @after;
      }

      location @before{
                proxy_pass   http://www.henaizhangli.cn/download/predownload?fileName=$request_uri&clientIp=$remote_addr;
                internal;
      }
      location @after{
               proxy_pass  http:// http://www.henaizhangli.cn /download/downloaded?fileName= $request_uri&clientIp=$remote_addr&bytes=$body_bytes_sent;
               internal;
     }

请求地址:   http://www.staticdownload.cn /predownload/imooc.apk?adId=1426

单线程下载:


1、向ngnix发送请求 http://www.staticdownload.cn /predownload/imooc.apk?adId=1426
2、定向到“location /predownload/“,根据配置现转发到 ”location /download/ “与客户端建立下载链接,开始下载
3、执行post_action,转发到”location @before“,发送请求到后台,统计下载点击量
4、下载完成后,发送请求到server附带上请求的参数,以及下载的字节数到后台进行下载完成量的校验

多线程下载:
多线程下载的情况下,单线程下载完成的统计方案不适用。

1、向ngnix发送请求 http://www.staticdownload.cn /predownload/imooc.apk?adId=1426
2、定向到“location /predownload/“,根据配置现转发到 ”location /download/ “与客户端建立下载链接,浏览器进行多线程下载,重新发送多个请求,HTTP头增加了一个Range字段,下载开始
3、执行post_action,转发到”location @before“,发送请求到后台,统计下载点击量
4、下载完成后,发送请求到server附带上请求的参数,server取请求中的Range参数,进行分析

浏览器多线程下载的,实际上是把文件分成多个部分进行分段下载,分段后Http头里有一个Range字段
如下:
若下载一个12826743个字节的文件,随机可能会出现;
Range: bytes=0-    
Range: bytes==4301545-8551161
Range: bytes==8551162-12826742


后台server获取
String range=request.getHeader("Range");


最后通过比较bytes与文件实际大小进行比较,达到统计下载完成量的目的;

本方法也有缺陷,若是Range: bytes==8551162-12826742这个线程先下载完成,下载完成量会增加,但是若其余线程下载还未完成,那么此时用户若是取消了下载,那么就会造成统计结果不准确。











目录
相关文章
|
6月前
|
存储 Ubuntu 应用服务中间件
【Nginx】centos和Ubuntu操作系统下载Nginx配置文件并启动Nginx服务详解
【Nginx】centos和Ubuntu操作系统下载Nginx配置文件并启动Nginx服务详解
91 1
|
3月前
|
缓存 应用服务中间件 nginx
成功解决 Nginx更新静态资源无效 ,Nginx静态资源更新不及时,Nginx清除缓存
这篇文章讨论了在使用Nginx进行动静分离时遇到的静态资源更新不及时的问题。问题描述了在服务器上更新静态资源后,访问页面时页面没有显示更新的情况。文章提供了解决这个问题的方法,即清除浏览器缓存,并提供了相关参考文章链接。此外,还展示了问题复现的步骤和正常情况的预期结果。
成功解决 Nginx更新静态资源无效 ,Nginx静态资源更新不及时,Nginx清除缓存
|
20天前
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
89 4
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
3月前
|
应用服务中间件 nginx
nginx动静分类,静态资源放到nginx中
这篇文章介绍了如何将项目中的静态资源部署到Nginx服务器中,包括将静态资源移动到Nginx目录、删除项目中的静态资源、替换静态资源访问路径、检查页面情况、修改Nginx配置文件以及重启Nginx查看效果的详细步骤。
nginx动静分类,静态资源放到nginx中
|
3月前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
3月前
|
安全 应用服务中间件 Linux
nginx搭建静态文件下载服务器
nginx搭建静态文件下载服务器
224 0
|
4月前
|
前端开发 JavaScript 应用服务中间件
|
4月前
|
前端开发 应用服务中间件 nginx
网页设计,若依项目修改(It must be done)01----若依打包位置,nginx代理前端静态资源和后端接口,就是怎样设置转载,访问固定端口,让他访问其他资料的配置文件,访问/,给你那些
网页设计,若依项目修改(It must be done)01----若依打包位置,nginx代理前端静态资源和后端接口,就是怎样设置转载,访问固定端口,让他访问其他资料的配置文件,访问/,给你那些
|
6月前
|
缓存 负载均衡 应用服务中间件
nginx(NGINX)详细下载安装及使用教程(非常适合入门)
nginx(NGINX)详细下载安装及使用教程(非常适合入门)
|
tengine 应用服务中间件 Linux
【Linux环境】如何在Nginx(或Tengine)服务器上安装ssl证书----介绍nginx服务器类型证书的下载与安装操作
【Linux环境】如何在Nginx(或Tengine)服务器上安装ssl证书----介绍nginx服务器类型证书的下载与安装操作
484 0