[nginx]統計檔案下載是否完整思路(flask)

來源:互聯網
上載者:User

有一個需求是統計檔案是否被使用者完整下載,因為是web應用,用js沒有找到實現方案,於是搜尋下nginx的實現方案,把簡單的探索過程記錄下。

實驗一

  • 最原始的思路,查看日誌,下載了一個檔案之後我們看日誌的傳輸的檔案大小跟檔案原始的大小是否一致
  • 測試要下載的檔案的大小

  • 一次完整下載的log 跟一次沒下載完成的log,可以通過對比傳輸位元組的大小來判斷

這種方式就是根據日誌來做統計,每隔一段時間分析日誌得到結果,有些麻煩,時效性不好。

實驗二:

找了相關的部落格

  • Counting-100-completed-downloads
    使用post_action(下面使用的方式)

  • Nginx-post-action-to-trigger-successfully-download-file 遇到的問題 nginx-post-action-proxy-pass-track-downloading-file

  • 使用 x-accel-redirect

    • nginx-x-accel-redirect-php-rails 英文
    • 利用nginx的x-accel-redirect頭實現下載控制 中文

大概的流程:

主要的工作就是2個
1 修改nginx的配置,把下載檔案的資訊轉寄到統計服務或者url
2 統計服務記錄和判斷檔案下載狀態

這裡的重點是使用nginx 的post_action參數, 在下載請求結束之後把下載的情況發送給另一個統計服務,由統計服務來判斷檔案下載的情況

配置類似

location / {    limit_rate 20k;    post_action @afterdownload;}location @afterdownload {    proxy_pass http://127.0.0.1:8888/counting?FileName=$uri&ClientIP=$remote_addr&body_bytes_sent=$body_bytes_sent&status=$request_completion;    internal;}

然後寫個一個flask 來接收統計請求

#!/usr/bin/python#-*- coding:utf-8 -*-#############################File Name: counting_file.py#Author: orangleliu#Mail: orangleliu@gmail.com#Created Time: 2015-03-11 16:41:05#License: MIT############################'''    nginx統計使用者下載檔案位元組    '''from flask import Flask, request    app = Flask(__name__)    @app.route("/counting")defcounting():        req = request.args.get("FileName")        clientip = request.args.get("ClientIP")        size = request.args.get("body_bytes_sent")        status = request.args.get("status")        print"request  ", req        print"ip  ", clientip        print"size  ", size        print"status  ", status        return"ok"if __name__ == "__main__":        app.run(port=8888, debug=True)

訪問的日誌

lzz@ubuntu:code$ python counting_file.py * Running on http://127.0.0.1:8888/ * Restarting with reloaderrequest   /index.htmlip   10.0.1.16size   0status   OK127.0.0.1 - - [12/Mar/2015 10:42:59] "GET /counting?FileName=/index.html&ClientIP=10.0.1.16&body_bytes_sent=0&status=OK HTTP/1.0" 200 -request   /Pillow-2.3.0.zipip   10.0.1.16size   225280status127.0.0.1 - - [12/Mar/2015 10:43:14] "GET /counting?FileName=/Pillow-2.3.0.zip&ClientIP=10.0.1.16&body_bytes_sent=225280&status= HTTP/1.0" 200 -

只要在flask中做處理就可以統計使用者下載的情況了。
上面的文章也說了,當使用者使用多個串連下載的時候可能就有問題了,會重複統計,結果也會不準確,所以還有很多改進空間.

聲明:
本文出自 “orangleliu筆記本” 部落格,轉載請務必保留此出處http://blog.csdn.net/orangleliu/article/details/44219213
作者orangleliu 採用署名-非商業性使用-相同方式共用協議

以上就介紹了[nginx]統計檔案下載是否完整思路(flask),包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.